fix: 增加索尼相机照片比例处理
This commit is contained in:
+14
-3
@@ -5,12 +5,14 @@ const readline = require('readline');
|
||||
const IMAGE_TYPES = {
|
||||
IPHONE: 'iphone',
|
||||
SONY: 'sony',
|
||||
XIAOMI: 'xiaomi',
|
||||
SCREENSHOT: 'screenshot',
|
||||
};
|
||||
|
||||
const IMAGE_TYPE_LABELS = {
|
||||
[IMAGE_TYPES.IPHONE]: '📱 iPhone (4:3)',
|
||||
[IMAGE_TYPES.SONY]: '📷 索尼相机 (3:2)',
|
||||
[IMAGE_TYPES.XIAOMI]: '📱 小米手机 (4:3)',
|
||||
[IMAGE_TYPES.SCREENSHOT]: '🖼️ 截图 → WebP',
|
||||
};
|
||||
|
||||
@@ -72,14 +74,22 @@ function detectImageType(filePath, dimensions) {
|
||||
const makeUpper = make.toUpperCase();
|
||||
const modelUpper = model.toUpperCase();
|
||||
|
||||
// 我的 iPhone
|
||||
if (makeUpper === 'APPLE' || modelUpper.includes('IPHONE')) {
|
||||
return { type: IMAGE_TYPES.IPHONE, reason: `EXIF: ${make} ${model}`.trim() };
|
||||
}
|
||||
|
||||
// 老妈小米 11 青春版
|
||||
if (makeUpper === 'XIAOMI' || modelUpper.includes('M2101K9C')) {
|
||||
return { type: IMAGE_TYPES.XIAOMI, reason: `EXIF: ${make} ${model}`.trim() };
|
||||
}
|
||||
|
||||
// 索尼相机
|
||||
if (makeUpper.includes('SONY') || modelUpper.includes('ILCE') || modelUpper.startsWith('DSC-')) {
|
||||
return { type: IMAGE_TYPES.SONY, reason: `EXIF: ${make} ${model}`.trim() };
|
||||
}
|
||||
|
||||
// iPhone
|
||||
if (['.heic', '.heif'].includes(ext)) {
|
||||
return { type: IMAGE_TYPES.IPHONE, reason: 'HEIC/HEIF 格式' };
|
||||
}
|
||||
@@ -90,18 +100,19 @@ function detectImageType(filePath, dimensions) {
|
||||
}
|
||||
|
||||
// 根据类型和方向获取目标尺寸,截图为 null(不裁剪)
|
||||
// 索尼返回 ImageMagick 缩放规格(如 2250x),按原图宽高比缩放、不裁剪
|
||||
function getTargetSize(type, width, height) {
|
||||
const landscape = width >= height;
|
||||
|
||||
switch (type) {
|
||||
case IMAGE_TYPES.IPHONE:
|
||||
return landscape ? '2000x1500' : '1500x2000';
|
||||
return { size: landscape ? '2000x1500' : '1500x2000', crop: true };
|
||||
case IMAGE_TYPES.SONY:
|
||||
return landscape ? '2250x1500' : '1500x2250';
|
||||
return { size: landscape ? '2250x' : 'x2250', crop: false };
|
||||
case IMAGE_TYPES.SCREENSHOT:
|
||||
return null;
|
||||
default:
|
||||
return landscape ? '2250x1500' : '1500x2250';
|
||||
return { size: landscape ? '2250x1500' : '1500x2250', crop: true };
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user