Imagemagick Gulp:当一些图像被破坏时,有损于图像的重新压缩

Imagemagick Gulp:当一些图像被破坏时,有损于图像的重新压缩,imagemagick,gulp,gulp-imagemin,Imagemagick,Gulp,Gulp Imagemin,我有一组约18000个jpg文件需要优化/重新压缩 我尝试了几乎所有的gulp图像优化插件,每个插件在某一点上都给出了一个错误,没有任何关于它的原因是什么文件的建议。 以下是“吞咽图像大小”的结尾: events.js:141 throw er; // Unhandled 'error' event ^ Error: Error: Command failed: gm identify: No decode delegate for this image format (

我有一组约18000个jpg文件需要优化/重新压缩

我尝试了几乎所有的gulp图像优化插件,每个插件在某一点上都给出了一个错误,没有任何关于它的原因是什么文件的建议。 以下是“吞咽图像大小”的结尾:

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) 吞咽响应:

漂亮!我将整理我的18000张图片,希望能找到一张“不支持的图片格式”。别动,我马上回来。 现在是imagemin jpeg重新压缩:

你有这个想法

gulp imagemin也会在出现错误时停止

我试图求助于桌面Mac APP IMAGE OpTIM,它在设置中有“有损”,但在巨大的图像集上,由于内部错误,它默默地停止在中间的某个时间处理。 我还是想保留gulp工作流。

使用GNU Parallel和ImageMagick,您可以重新压缩所有JPEG图像,并按如下方式剥离EXIF数据:

parallel convert {} -quality 70% -strip {} ::: *.jpg
find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}
两个{}表示输入文件名和输出文件名。请在您的文件副本上尝试此操作,并在对真实数据执行此操作之前,检查您是否对结果以及版权和EXIF数据被剥夺感到满意

如果shell无法扩展的文件太多,可以通过stdin将文件名输入,如下所示:

parallel convert {} -quality 70% -strip {} ::: *.jpg
find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}
我自己不使用pngcrush,但假设您可以:

parallel pngcrush {} {} ::: *.png
如果您喜欢观看进度表并希望了解预计到达时间,请在单词parallel后添加-eta

parallel --eta pngcrush {} {} ::: *.png
使用GNU Parallel和ImageMagick,您可以重新压缩所有JPEG图像并按如下方式剥离EXIF数据:

parallel convert {} -quality 70% -strip {} ::: *.jpg
find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}
两个{}表示输入文件名和输出文件名。请在您的文件副本上尝试此操作,并在对真实数据执行此操作之前,检查您是否对结果以及版权和EXIF数据被剥夺感到满意

如果shell无法扩展的文件太多,可以通过stdin将文件名输入,如下所示:

parallel convert {} -quality 70% -strip {} ::: *.jpg
find TOPDIR -iname *.jpg | parallel convert {} -quality 70% -strip {}
我自己不使用pngcrush,但假设您可以:

parallel pngcrush {} {} ::: *.png
如果您喜欢观看进度表并希望了解预计到达时间,请在单词parallel后添加-eta

parallel --eta pngcrush {} {} ::: *.png
您可以使用来防止在错误图像上停止吞咽任务

它还可以显示导致错误的图像

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'));
});
您可以使用来防止在错误图像上停止吞咽任务

它还可以显示导致错误的图像

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'));
});

Mh,也许这有助于某人: 还要花几个小时来处理这些奇怪的imagemagick错误消息。 在我的例子中,源图像路径上的简单校正解决了这一问题:

gulp.src'path/to/imagesrc/*' vs。 gulp.src'path/to/imagesrc/*.jpg'


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

Mh,也许这有助于某人: 还要花几个小时来处理这些奇怪的imagemagick错误消息。 在我的例子中,源图像路径上的简单校正解决了这一问题:

gulp.src'path/to/imagesrc/*' vs。 gulp.src'path/to/imagesrc/*.jpg'


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

您是否处于可以在终端中针对图像运行直接shell命令的环境中?如果是这样,ImageMagick有一个名为identify的工具,可以检查图像的完整性。您可以将其与GNU并行相结合,以完成一些非常快速的检查。。。试着复制几百个并运行这个并行标识::*.jpg谢谢提示,马克!如何递归检查图像?它跨越内部目录,并行标识:::*.jpg提供标识:无法打开图像“***.jpg”:没有这样的文件或目录@error/blob.c/OpenBlob/2701 error。尝试类似find topDirectory-name\*.jpg | parallel identification{}的方法。它提供了一个非常详细的输出,但我偶尔会找到一种方法:我最后用>test.txt运行它。它将文件信息打印到test.txt,并将错误文件直接输出到控制台。现在我将尝试手动删除这些插件,看看它是否有助于吞下插件。不,它没有帮助。我检查了两次,运行上面的命令以确保没有错误图像,并且仍然获取事件。js:141 thrower;//未处理的“错误”事件。真奇怪!这是一个关于“吞食图像”的热门话题,但如果sorce图像文件不是无菌的,目前它对实际项目并没有真正的用处。您是否处于一个可以在终端中针对您的图像运行直接shell命令的环境中?如果是这样,ImageMagick有一个名为identify的工具,可以检查图像的完整性。您可以将其与GNU并行相结合,以完成一些非常快速的检查。。。试着做一份几百张的复印件
这个平行标识:::*.jpg谢谢提示,马克!如何递归检查图像?它跨越内部目录,并行标识:::*.jpg提供标识:无法打开图像“***.jpg”:没有这样的文件或目录@error/blob.c/OpenBlob/2701 error。尝试类似find topDirectory-name\*.jpg | parallel identification{}的方法。它提供了一个非常详细的输出,但我偶尔会找到一种方法:我最后用>test.txt运行它。它将文件信息打印到test.txt,并将错误文件直接输出到控制台。现在我将尝试手动删除这些插件,看看它是否有助于吞下插件。不,它没有帮助。我检查了两次,运行上面的命令以确保没有错误图像,并且仍然获取事件。js:141 thrower;//未处理的“错误”事件。真奇怪!这是一个关于狼吞虎咽图像的热门话题,但如果sorce图像文件不是无菌的,那么目前它对实际项目并没有真正的用处。它成功了!与gulp shell一起,它可能成为gulp的一种方式。为什么不使用ImageMagick for png呢?::GNU并行语法表示命令的结束和参数的开始。它工作了!与gulp shell一起,它可能成为gulp的一种方式。为什么不使用ImageMagick for png呢?::是GNU并行语法,用于指示命令的结束和参数的开始。