Skip to content

Commit 2cebdcc

Browse files
committed
feat: layer image scale handling
1 parent 1490dd9 commit 2cebdcc

File tree

1 file changed

+25
-2
lines changed

1 file changed

+25
-2
lines changed

web/src/components/image-editor/layer-panel.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,17 +297,40 @@ export function LayerPanel({ imageEditor, imagePath, visualCropEnabled = false }
297297
// Extract filename for display name
298298
const filename = imagePath.split('/').pop() || imagePath
299299

300+
// Get base image dimensions for scaling
301+
const baseDimensions = imageEditor.getOriginalDimensions()
302+
303+
// Calculate scale to fit layer at 90% of base image size
304+
const targetWidth = baseDimensions.width * 0.9
305+
const targetHeight = baseDimensions.height * 0.9
306+
307+
const scaleX = targetWidth / dimensions.width
308+
const scaleY = targetHeight / dimensions.height
309+
// Use Math.min with 1.0 to prevent upscaling small images
310+
const scale = Math.min(scaleX, scaleY, 1.0)
311+
312+
// Only apply transforms if scaling is needed (scale < 1)
313+
let layerTransforms: Partial<ImageLayer>['transforms'] | undefined
314+
if (scale < 1) {
315+
layerTransforms = {
316+
width: Math.round(dimensions.width * scale),
317+
height: Math.round(dimensions.height * scale),
318+
fitIn: true,
319+
}
320+
}
321+
300322
// Create new layer with default settings
301323
const newLayer: ImageLayer = {
302324
id: `layer-${Date.now()}`, // Simple unique ID
303325
imagePath,
304326
originalDimensions: dimensions,
305-
x: 'center',
306-
y: 'center',
327+
x: 0, // Position at top-left instead of center
328+
y: 0, // Position at top-left instead of center
307329
alpha: 0, // 0 = opaque (no transparency)
308330
blendMode: 'normal',
309331
visible: true,
310332
name: filename,
333+
transforms: layerTransforms, // Apply auto-resize if needed
311334
}
312335

313336
imageEditor.addLayer(newLayer)

0 commit comments

Comments
 (0)