pdf - Mac/Linux 构建之间的 ImageMagick 行为不一致。在 Linux 上损坏的 CMYK 文件
问题描述
我正在将 PDF 批量转换为 TIFF 图像。
bash 脚本在 Mac 上编写和测试,然后推送到 Ubuntu 机器上进行生产运行。(它有更好的规格)
奇怪的是,某些页面(大约 100 个页面中的 1 个)导出的图像已损坏。多次运行后,同一页面上发生图像损坏,这表明这不是随机运行时错误。
使用相同的 PDF/X4 配置文件从 Adobe InDesign CC2020 导出页面。所有都遵循具有样式的类似文本组合,放置在单色图像上。
左:正确/右:损坏
为了完整起见,我尝试了 im6 (ubuntu20.4 默认) convert 命令,但结果相同。
这是我运行批处理的选项(通过 GNU Parallel)。在我的脚本中,我可能做错了什么吗?
convert \
-verbose \
-alpha off \
-colorspace Gray \
-contrast-stretch 0 \
-depth 8 \
-compress zip \
-units PixelsPerInch \
-density 1200 \
${1} \
${1%.*}.tiff
通过搜索我发现im6和im7之间以及它们如何处理颜色配置文件之间可能存在问题,但它们的版本匹配如下:
版本如下所示magick --version
:
Mac (homebrew):
Version: ImageMagick 7.0.11-14 Q16 x86_64 2021-05-31 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(5.0)
Delegates (built-in): bzlib fontconfig freetype gslib heic jng jp2 jpeg lcms lqr ltdl lzma openexr png ps tiff webp xml zlib
Ubuntu20.04 (v7 installed with https://github.com/SoftCreatR/imei/ )
Version: ImageMagick 7.0.11-14 Q32 x86_64 2021-05-17 https://imagemagick.org
Copyright: (C) 1999-2021 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(4.5)
Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zip zlib
以下是 PDF 文件中的识别命令结果:
识别结果:存在导出问题的 PDF 文件
Image:
Filename: 05.pdf
Format: PDF (Portable Document Format)
Mime type: application/pdf
Class: DirectClass
Geometry: 380x533+0+0
Resolution: 72x72
Print size: 5.27778x7.40278
Units: Undefined
Colorspace: CMYK
Type: ColorSeparation
Endianness: Undefined
Depth: 16/8-bit
Channel depth:
Cyan: 1-bit
Magenta: 1-bit
Yellow: 1-bit
Black: 8-bit
识别结果:没有问题的PDF文件:
Image:
Filename: 06.pdf
Format: PDF (Portable Document Format)
Mime type: application/pdf
Class: DirectClass
Geometry: 380x533+0+0
Resolution: 72x72
Print size: 5.27778x7.40278
Units: Undefined
Colorspace: sRGB
Type: PaletteAlpha
Base type: Undefined
Endianness: Undefined
Depth: 16/8-bit
Channel depth:
Red: 8-bit
Green: 8-bit
Blue: 8-bit
Alpha: 8-bit
我注意到我似乎对 CMYK 色彩空间中的文件而不是 sRGB 有问题。
但是,对我来说,这并不能解释为什么它可以在 Mac 上运行,但不能在 Ubuntu 上运行。
也许 Ubuntu 构建,包含与 Mac 构建不同的 CMYK 库?有没有办法证实我的怀疑?
解决方案
我可能已经解决了。
问题似乎来自这部分:
Channel depth:
Cyan: 1-bit
Magenta: 1-bit
Yellow: 1-bit
Black: 8-bit
原始图像用于单色打印。这样 CMY 的除 K 外的所有通道都不包含数据,存储为位深度为 1。
仍然不清楚为什么它可以在 Mac 上运行,但这里有一个版本也可以在 Linux 上运行:
convert \
-verbose \
-alpha off \
-colorspace CMYK \
-contrast-stretch 0 \
-depth 8 \
-channel black -negate -separate \
-compress zip \
-units PixelsPerInch \
-density 1200 \
${1} \
${1%.*}.tiff
关键是首先以 CMYK 进行渲染,因为原始 PDF 是用于此目的的。
然后剥离 CMY 通道,创建纯灰度图像。(注意K通道需要取反)
上面的代码片段对 Mac/Linux 都有效。
推荐阅读
- r - R 在 filter_at 中的starts_with 错误(`starts_with()` 必须在 *selecting* 函数中使用。)
- wordpress - Wordpress:如何编辑有关电子邮件地址更改的邮件?
- android - 错误“未解决的参考:activity_splash”
- c# - 使用自动映射器将从数据读取器返回的数据映射到 C# 中的泛型类型
- python-3.x - 如何使用 RANSAC 解决错误:“RANSAC 找不到有效的共识集。全部”
- r - R中应用函数族的命名/名称
- animation - 使用 ffmpeg 在视频上添加移动覆盖
- aws-cli - AWS CLI 返回未知选项:awsvpcConfiguration
- cron - 如何每 40 分钟设置一次 crontab?
- wordpress - 如何在 WordPress 中修复模糊的缩略图图像