【问题标题】:Gulp: lossy recompression of images when some are brokenGulp:当一些图像损坏时对图像进行有损重新压缩
【发布时间】:2016-02-13 01:56:22
【问题描述】:
我有一组大约 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 工作流程。
【问题讨论】:
-
您是否处于可以在终端中针对您的图像运行简单的 shell 命令的环境中?如果是这样,ImageMagick 有一个名为identify 的工具可以检查图像的完整性。您可以将其与GNU Parallel 结合起来,以完成一些非常快速的检查...尝试复制几百个并运行此parallel identify ::: *.jpg
-
感谢您的提示,马克!如何递归检查图像?它跨越内部目录,parallel identify ::: *.jpg 给出“识别:无法打开图像`**/*.jpg':没有这样的文件或目录@error/blob.c/OpenBlob/2701”错误。
-
试试find topDirectory -name \*.jpg | parallel identify {}
-
它给出了一个非常详细的输出,但我偶尔会找到一种方法:我最后用> test.txt 运行它。它将文件信息打印到test.txt 并将错误文件直接输出到控制台。现在我将尝试手动删除它们,看看它是否有助于吞咽插件。
-
不,它没有帮助。我检查了两次,运行上面的命令以确保没有错误图像,仍然得到events.js:141 throw er; // Unhandled 'error' event。这是一件很奇怪的事情!这种关于吞咽图像的嗡嗡声,虽然如果源图像文件不是无菌的,那么它对于目前的实际项目并不是很有用。
标签:
imagemagick
gulp
gulp-imagemin