我有一组~18,000个jpg文件,我需要优化/重新压缩。
我几乎尝试了每个gulp图像优化插件,并且每个插件在某个时刻都会出错,并没有建议它是什么文件的原因。
以下是gulp-image-resize
结尾的内容:
events.js:141 throw er; // Unhandled 'error' event ^ Error: Error: Command failed: gm identify: No decode delegate for this image format (/var/folders/ns/85cnwvcx5ysb7jzr8hh_k4r80000gn/T/gmROZu8m). gm identify: Request did not return an image. at finish (/Users/mvasin/Sites/process images/node_modules/gulp-gm/index.js:40:21) at gm. (/Users/mvasin/Sites/process images/node_modules/async/lib/async.js:485:30) at emitMany (events.js:108:13) at gm.emit (events.js:182:7) at gm. (/Users/mvasin/Sites/process images/node_modules/gm/lib/getters.js:70:16) at cb (/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:318:16) at ChildProcess.proc.on.onExit (/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:293:9) at emitTwo (events.js:87:13) at ChildProcess.emit (events.js:172:7) at maybeClose (internal/child_process.js:817:16)
这是gulp-gm
的蓝屏:
events.js:141 throw er; // Unhandled 'error' event ^ Error: Stream yields empty buffer at Socket. (/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:57:17) at emitNone (events.js:72:20) at Socket.emit (events.js:166:7) at endReadableNT (_stream_readable.js:893:12) at doNTCallback2 (node.js:429:9) at process._tickCallback (node.js:343:17) a228:process images mvasin$ gulp GraphicsMagick
gulp-responsive
:
events.js:141 throw er; // Unhandled 'error' event ^ Error: Input buffer contains unsupported image format at Error (native)
gulp-sharp-resize
:
Unhandled rejection Error: Input buffer contains unsupported image format at Error (native)
美丽!我将对所有18,000张图像进行排序,并希望能够找出具有“不支持的图像格式”的图像。坚持下去,我马上回来。
现在来imagemin-jpeg-recompress
:
events.js:141 throw er; // Unhandled 'error' event ^ Error: Unsupported color conversion request at ChildProcess. (/Users/mvasin/Sites/process images/node_modules/imagemin-jpeg-recompress/index.js:101:11) at emitTwo (events.js:87:13) at ChildProcess.emit (events.js:172:7) at maybeClose (internal/child_process.js:817:16) at Socket. (internal/child_process.js:319:11) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at Pipe._onclose (net.js:469:12)
你明白了......
gulp-imagemin
也会因错误而停止。
我试图使用桌面mac应用程序ImageOptim(它在设置中有“有损”),但在真正庞大的图像集上,由于内部错误,它会在中间的某个时间静默停止处理。
无论如何我还想保留gulp工作流程。
答案 0 :(得分:3)
您可以使用gulp-plumber来阻止在错误图像上停止gulp任务。
它还可以显示哪个图像导致错误。
var gulp = require('gulp');
var $ = require('gulp-load-plugins')();
gulp.task('images', function() {
return gulp.src('src/*.jpg')
.pipe($.plumber())
.pipe($.responsive({
...
}))
.pipe(gulp.dest('dist'));
});
答案 1 :(得分:1)
使用GNU Parallel
和ImageMagick
,您可以重新压缩所有JPEG图像并删除EXIF数据,如下所示:
parallel convert {} -quality 70% -strip {} ::: *.jpg
两个{}
表示输入文件名和输出文件名。请在您的文件的COPY上尝试此操作,并检查您是否对结果感到满意,并且在您对真实数据执行操作之前删除版权和EXIF数据。
如果你有太多的文件要扩展shell,你可以通过stdin
这样抽取文件名:
find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}
我自己不使用pngcrush
,但假设你可以这样做:
parallel pngcrush {} {} ::: *.png
如果您想观看进度表并想要预估到达时间,请在--eta
后添加parallel
。
parallel --eta pngcrush {} {} ::: *.png
答案 2 :(得分:0)
gulp.src('path/to/imagesrc/*')
与
gulp.src('path/to/imagesrc/*.jpg')
我的gulp任务会立即在imagesrc文件夹中创建一个缩略图文件夹。这就是问题所在。 *选择器包含这个缩略图文件夹并将其传送到imagemagick函数,这当然无法处理它。