86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
import fs from "fs";
|
||
|
||
export const title = "图片批量处理";
|
||
|
||
const IMAGE_EXTS = [".jpg", ".jpeg", ".png", ".webp", ".gif", ".tiff", ".avif"];
|
||
|
||
export function listImageFiles() {
|
||
try {
|
||
const cwd = process.cwd();
|
||
const files = fs.readdirSync(cwd);
|
||
return files.filter(file => {
|
||
const ext = file.slice(file.lastIndexOf(".")).toLowerCase();
|
||
return IMAGE_EXTS.includes(ext);
|
||
});
|
||
} catch (err) {
|
||
console.error("读取文件列表失败:", err);
|
||
return [];
|
||
}
|
||
}
|
||
|
||
export function getSteps() {
|
||
const files = listImageFiles();
|
||
|
||
return [
|
||
{
|
||
name: "源文件",
|
||
type: "multiselect",
|
||
message: files.length ? "选择要处理的图片文件" : "当前目录未找到图片文件",
|
||
options: files.map(file => ({ value: file, label: file })),
|
||
default: [],
|
||
emptyMessage: "请按 Esc 返回并放入图片文件后重试"
|
||
},
|
||
{
|
||
name: "压缩",
|
||
type: "select",
|
||
message: "选择压缩质量",
|
||
options: [
|
||
{ value: "skip", label: "跳过此操作" },
|
||
{ value: 90, label: "高质量 (90%)" },
|
||
{ value: 80, label: "标准 (80%)" },
|
||
{ value: 60, label: "中等 (60%)" },
|
||
{ value: 40, label: "低质量 (40%)" }
|
||
],
|
||
default: "skip"
|
||
},
|
||
{
|
||
name: "生成多尺寸",
|
||
type: "select",
|
||
message: "选择尺寸预设",
|
||
options: [
|
||
{ value: "skip", label: "跳过此操作" },
|
||
{ value: "responsive", label: "响应式 (800/400/200)" },
|
||
{ value: "thumbnail", label: "缩略图 (300/150/75)" },
|
||
{ value: "large", label: "大图 (1920/1280/640)" }
|
||
],
|
||
default: "skip"
|
||
},
|
||
{
|
||
name: "统一背景",
|
||
type: "select",
|
||
message: "选择背景颜色",
|
||
options: [
|
||
{ value: "skip", label: "跳过此操作" },
|
||
{ value: 0xFFFFFFFF, label: "白色" },
|
||
{ value: 0x000000FF, label: "黑色" },
|
||
{ value: 0xF5F5F5FF, label: "浅灰" },
|
||
{ value: 0x333333FF, label: "深灰" }
|
||
],
|
||
default: "skip"
|
||
},
|
||
{
|
||
name: "裁剪补边",
|
||
type: "select",
|
||
message: "选择目标画布尺寸",
|
||
options: [
|
||
{ value: "skip", label: "跳过此操作" },
|
||
{ value: "1200x800", label: "1200×800 (3:2)" },
|
||
{ value: "1920x1080", label: "1920×1080 (16:9)" },
|
||
{ value: "1080x1080", label: "1080×1080 (1:1)" },
|
||
{ value: "800x600", label: "800×600 (4:3)" }
|
||
],
|
||
default: "skip"
|
||
}
|
||
];
|
||
}
|