feat: 新增 PNG 转 WebP 脚本,支持自动处理文件和添加作者信息
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { execSync } = require('child_process');
|
||||
|
||||
const AUTHOR = '奇趣保罗';
|
||||
|
||||
function commandExists(command) {
|
||||
try {
|
||||
const check =
|
||||
process.platform === 'win32' ? `where ${command}` : `command -v ${command}`;
|
||||
execSync(check, { stdio: 'ignore' });
|
||||
return true;
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function quotePath(filePath) {
|
||||
return `"${filePath.replace(/"/g, '\\"')}"`;
|
||||
}
|
||||
|
||||
function syncFileTimes(sourcePath, targetPath) {
|
||||
const { atime, mtime } = fs.statSync(sourcePath);
|
||||
fs.utimesSync(targetPath, atime, mtime);
|
||||
}
|
||||
|
||||
function main() {
|
||||
if (!commandExists('magick')) {
|
||||
console.error('错误: 未找到 ImageMagick,请先安装 ImageMagick');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (!commandExists('exiftool')) {
|
||||
console.error('错误: 未找到 ExifTool,请先安装 ExifTool');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const workDir = process.cwd();
|
||||
const pngFiles = fs
|
||||
.readdirSync(workDir)
|
||||
.filter((file) => {
|
||||
const fullPath = path.join(workDir, file);
|
||||
return (
|
||||
fs.statSync(fullPath).isFile() && path.extname(file).toLowerCase() === '.png'
|
||||
);
|
||||
});
|
||||
|
||||
if (pngFiles.length === 0) {
|
||||
console.log('当前目录下没有 PNG 文件');
|
||||
return;
|
||||
}
|
||||
|
||||
for (const pngFile of pngFiles) {
|
||||
const pngPath = path.join(workDir, pngFile);
|
||||
const filename = path.basename(pngFile, path.extname(pngFile));
|
||||
const webpPath = path.join(workDir, `${filename}.webp`);
|
||||
|
||||
if (fs.existsSync(webpPath)) {
|
||||
console.log(`跳过: ${filename}.webp 已存在`);
|
||||
continue;
|
||||
}
|
||||
|
||||
console.log(`正在转换: ${pngFile} -> ${filename}.webp`);
|
||||
execSync(`magick ${quotePath(pngPath)} ${quotePath(webpPath)}`, {
|
||||
stdio: 'inherit',
|
||||
});
|
||||
|
||||
console.log(`正在写入作者信息到: ${filename}.webp`);
|
||||
execSync(
|
||||
`exiftool -overwrite_original -Author=${quotePath(AUTHOR)} ${quotePath(webpPath)}`,
|
||||
{ stdio: 'inherit' }
|
||||
);
|
||||
|
||||
console.log(`正在同步创建日期: ${filename}.webp <- ${pngFile}`);
|
||||
syncFileTimes(pngPath, webpPath);
|
||||
}
|
||||
|
||||
console.log('所有文件处理完成!');
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user