@uppy/image-editor
Version:
Image editor and cropping UI
31 lines (25 loc) • 1.07 kB
text/typescript
import type Cropper from 'cropperjs'
// See this cropperjs image to understand how container/image/canavas/cropbox relate to each other.
// (https://github.com/fengyuanchen/cropperjs/blob/9b528a8baeaae876dc090085e37992a1683c6f34/docs/images/layers.jpg)
//
function getCanvasDataThatFitsPerfectlyIntoContainer(
containerData: Cropper.ContainerData,
canvasData: Cropper.CanvasData,
): { width: number; height: number; left: number; top: number } {
// 1. Scale our canvas as much as possible
const widthRatio = containerData.width / canvasData.width
const heightRatio = containerData.height / canvasData.height
const scaleFactor = Math.min(widthRatio, heightRatio)
const newWidth = canvasData.width * scaleFactor
const newHeight = canvasData.height * scaleFactor
// 2. Center our canvas
const newLeft = (containerData.width - newWidth) / 2
const newTop = (containerData.height - newHeight) / 2
return {
width: newWidth,
height: newHeight,
left: newLeft,
top: newTop,
}
}
export default getCanvasDataThatFitsPerfectlyIntoContainer