1

我有一组 ~18,000 个 jpg 文件需要优化/重新压缩。

我尝试了几乎所有的 gulp 图像优化插件,并且每个插件在某些时候都会给出一个错误,并且没有建议是什么文件是它的原因。以下是gulp-image-resize结尾:

事件.js:141
      投掷者;// 未处理的“错误”事件
      ^
错误:错误:命令失败:gm 识别:没有此图像格式的解码委托 (/var/folders/ns/85cnwvcx5ysb7jzr8hh_k4r80000gn/T/gmROZu8m)。
gm identify:请求未返回图像。

    完成时(/Users/mvasin/Sites/process images/node_modules/gulp-gm/index.js:40:21)
    在通用汽车 (/Users/mvasin/Sites/process images/node_modules/async/lib/async.js:485:30)
    在 emitMany (events.js:108:13)
    在 gm.emit (events.js:182:7)
    在通用汽车 (/Users/mvasin/Sites/process images/node_modules/gm/lib/getters.js:70:16)
    在 cb (/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:318:16)
    在 ChildProcess.proc.on.onExit (/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:293:9)
    在 emitTwo (events.js:87:13)
    在 ChildProcess.emit (events.js:172:7)
    在可能关闭(内部/child_process.js:817:16)

这是gulp-gm蓝屏:

事件.js:141
      投掷者;// 未处理的“错误”事件
      ^
错误:流产生空缓冲区
    在套接字。(/Users/mvasin/Sites/process images/node_modules/gm/lib/command.js:57:17)
    在 emitNone (events.js:72:20)
    在 Socket.emit (events.js:166:7)
    在 endReadableNT (_stream_readable.js:893:12)
    在 doNTCallback2 (node.js:429:9)
    在 process._tickCallback (node.js:343:17)
a228:处理图像 mvasin$ gulp GraphicsMagick

gulp-responsive

事件.js:141
      投掷者;// 未处理的“错误”事件
      ^
错误:输入缓冲区包含不受支持的图像格式
    在错误(本机)

gulp-sharp-resize

未处理的拒绝错误:输入缓冲区包含不受支持的图像格式
    在错误(本机)

美丽的!我将整理我所有的 18,000 张图像,并希望能找出“不支持的图像格式”的图像。留下来,我马上回来。
现在来了imagemin-jpeg-recompress

事件.js:141
      投掷者;// 未处理的“错误”事件
      ^

错误:不支持的颜色转换请求

    在子进程。(/Users/mvasin/Sites/process images/node_modules/imagemin-jpeg-recompress/index.js:101:11)
    在 emitTwo (events.js:87:13)
    在 ChildProcess.emit (events.js:172:7)
    在可能关闭(内部/child_process.js:817:16)
    在套接字。(内部/child_process.js:319:11)
    在 emitOne (events.js:77:13)
    在 Socket.emit (events.js:169:7)
    在 Pipe._onclose (net.js:469:12)

你明白了……

gulp-imagemin错误也停止。

我试图求助于桌面 mac 应用程序 ImageOptim(它在设置的深处有“有损”),但在真正巨大的图像集上,由于内部错误,它会在中间的某个时间静默停止处理。

无论如何,我想保留 gulp 工作流程。

4

3 回答 3

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'));
});
于 2015-11-12T16:44:48.077 回答
1

使用GNU Paralleland ImageMagick,您可以像这样重新压缩所有 JPEG 图像并剥离 EXIF 数据:

parallel convert {} -quality 70% -strip {} ::: *.jpg

两者分别{}代表输入文件名和输出文件名。请在您的文件副本上尝试此操作,并检查您是否对结果以及版权和 EXIF 数据在您对真实数据执行此操作之前是否感到满意。

如果你有太多文件需要 shell 扩展,你可以通过stdin如下方式将文件名注入:

find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}

我不使用pngcrush自己,但假设你可以这样做:

parallel pngcrush {} {} ::: *.png

如果您喜欢观看进度表并想要预计到达时间,请--eta在单词后添加。parallel

parallel --eta pngcrush {} {} ::: *.png
于 2015-11-12T09:38:20.413 回答
0

嗯,也许这对某人有帮助:还要花几个小时来处理这些奇怪的 imagemagick 错误消息。在我的情况下,对源图像路径的简单修正解决了它:

gulp.src('path/to/imagesrc/*') 对比 gulp.src('path/to/imagesrc/*.jpg')

我的 gulp 任务会立即在 imagesrc 文件夹中创建一个缩略图文件夹。这就是问题所在。* 选择器包含此缩略图文件夹并将其传送到 imagemagick 函数,这当然无法处理它。

于 2015-11-25T12:21:27.283 回答