Your IP : 172.69.59.18


Current Path : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/src/helpers/
Upload File :
Current File : /var/www/element/data/www/revenuestory.ru/bitrix/js/ui/uploader/core/src/helpers/resize-worker.js

// We can't use createImageBitmap due to the bug in Chrome (https://bugs.chromium.org/p/chromium/issues/detail?id=1220671).
// Chrome doesn't respect JPEG Orientation.

// Use 'bitmaprenderer' and transferFromImageBitmap to make a blob from the ImageBitmap;
/*
	const canvas = document.createElement('canvas');
	canvas.width = bitmap.width;
	canvas.height = bitmap.height;
	const ctx = canvas.getContext('bitmaprenderer');
	if (ctx)
	{
		ctx.transferFromImageBitmap(bitmap);
	}
	else
	{
		// twice in memory...
		canvas.getContext('2d').drawImage(bitmap, 0, 0);
	}
*/

export const ResizeWorker = function() {
	self.onmessage = event => {
		const { file, options = {}, calcTargetSizeFn } = event.data.message;
		self.createImageBitmap(file)
			.then(bitmap => {

				const calcTargetSize = new Function('return ' + calcTargetSizeFn.toString())();
				const { targetWidth, targetHeight } = calcTargetSize(bitmap, options);
				const resizeOptions = { resizeWidth: targetWidth, resizeHeight: targetHeight };

				self.createImageBitmap(bitmap, resizeOptions).then(previewBitmap => {
					bitmap.close();
					self.postMessage({
						id: event.data.id,
						message: {
							bitmap: previewBitmap,
							targetWidth,
							targetHeight,
						},
					}, [previewBitmap]);
				});

				/*const canvas = new OffscreenCanvas(targetWidth, targetHeight);
				const context = canvas.getContext('2d');
				context.imageSmoothingQuality = 'high';
				context.drawImage(bitmap, 0, 0, targetWidth, targetHeight);
				const previewBitmap = canvas.transferToImageBitmap();*/

			})
			.catch((error) => {
				console.warn('worker error', error);
				self.postMessage({ id: event.data.id, message: null });
			})
		;
	};
};