【问题标题】:Convert all .jpg images in directory to .pdf | Debugging ImageMagick将目录中的所有.jpg图像转换为.pdf |调试 ImageMagick
【发布时间】:2021-06-27 23:15:32
【问题描述】:

我发现了多篇关于这个问题的帖子,每个人都推荐ImageMagick,但对我来说,它似乎没有按预期工作,我在他们的网站上没有看到太多关于 .jpg->.pdf 的文档转换。

是否有其他替代工具,最好是 CLI 工具?

或者我可以以某种方式调试为什么 ImageMagick 不适合我吗?我没有收到任何错误,我只是收到损坏的文件。

我的用例


我的操作系统是 Windows 和 我有 64 个名为 0.jpg、2.jpg、... 63.jpg 的 .jpg 文件,我想将所有这些图像合并到一个 .pdf 文件中。

我已经尝试过这些命令:

magick *.jpg out.pdf

convert *.jpg out.pdf

但在这两种情况下,我都无法打开 out.pdf 文件,因为它已损坏。我注意到我只能正确地将 0.jpg 文件转换为 pdf,但是当我尝试转换我的 64 个 jpg 文件中的任何其他文件时,结果我得到了一个损坏的 .pdf 文件
例如:
这给了我正确的 .pdf:

magick 0.jpg 0.pdf

但这给了我损坏的.pdf:

magick 2.jpg 2.pdf

我认为这是我无法将所有文件合并到一个未损坏的 .pdf 文件中的原因,我的假设是我的其余 .jpg 文件有问题,但我不知道如何调试这个问题。其他所有 .jpg 文件看起来都与我可以转换的那个 .jpg 完全相同,并且它们都可以毫无问题地打开。

magick identify -verbose foobar.jpg 结果:


我可以正确地将 0.jpg 文件转换为 .pdf,但 2.jpg 会导致 .pdf 损坏。 有一些明显的差异,但我不确定这些属性在 .jpg -> .pdf 转换的上下文中意味着什么

【问题讨论】:

  • 什么版本的 ImageMagick?你是怎么安装的?您是否为您的平台安装了正确的 32 位或 64 位版本的 ImageMagick?您在哪里安装了 ImageMagick?
  • @fmw42 版本: 7.0.11-5-Q16-HDRI-x64 从这里下载: imagemagick.org/script/download.php#windows 直接下载链接: download.imagemagick.org/ImageMagick/download/binaries/…我已经下载了准备运行的.exe,它有安装向导,我故意选择了 64 位
  • 另外,尝试magick identify -verbose XXX.jpg 并查看前几行,看看它们对于 "happy""unhappy" 是否相同JPEG。
  • 嗯...我能看到的主要区别是第二个是灰度,但我不知道为什么会有任何区别。
  • 它必须是基于 Windows 的问题或浏览器问题。我可以在我的 Mac OSX Sierra 上使用 IM 7.0.11.5 执行 magick 20.jpg 20.pdf 并在 Chrome 和 Acrobat Reader 和 Mac Preview 中打开 pdf 文件

标签: windows image pdf imagemagick jpeg


【解决方案1】:

一个想法是有人将灰度图像转换为具有 3 个相等通道的颜色,因此 IM 说它具有色彩空间 RGB。但是,JPEG 颜色空间标记为 2,表示它没有特定的颜色空间。

Properties:
    date:create: 2021-04-01T17:29:06+00:00
    date:modify: 2021-04-01T05:18:58+00:00
    exif:ExifOffset: 46
    exif:ExifVersion: 48, 50, 50, 48
    exif:PixelXDimension: 960
    exif:PixelYDimension: 1508
    exif:Software: Google
    jpeg:colorspace: 2
    jpeg:sampling-factor: 2x2,1x1,1x1

来自 JPG 文档

色彩空间

0 = Bi-level 
1 = YCbCr, ITU-R BT 709, video 
2 = No color space specified 
3 = YCbCr, ITU-R BT 601-1, RGB 
4 = YCbCr, ITU-R BT 601-1, video 
8 = Gray-scale 
9 = PhotoYCC 
10 = RGB 
11 = CMY 
12 = CMYK 
13 = YCCK 
14 = CIELab

在文件嵌入 PDF 矢量外壳后,这种冲突或缺少色彩空间可能会使某些查看者感到困惑。

【讨论】:

    【解决方案2】:

    感谢@Mark Setchell 通过分享此命令为我指明了正确的方向:

    magick identify -verbose XXX.jpg
    

    我的图像是灰色的,所以我不知道为什么大多数文件都有sRGB 颜色空间,但是在将颜色空间转换为Gray 之后,我可以正确地将它们转换为.pdf(打开时我看不到任何区别转换为灰度后我的 .jpgs 文件)。

    使用这个命令我可以将色彩空间更改为Gray:

    magick 2.jpg -colorspace gray gray2.jpg
    

    然后我可以简单地将“灰度”.jpgs 转换为 .pdf:

    magick gray2.jpg gray2.pdf
    

    附: 如果有人有更好的解决方案,我会很乐意接受,但如果没有任何结果,我会接受这个

    @fmw42 这是一个.zip file,其中包含

    • 20.jpg - 源图片
    • 20.pdf - 运行 >magick 20.jpg 20.pdf 后损坏的 pdf
    • gray20.jpg - 源图像由>magick 20.jpg -colorspace gray gray20.jpg 转换为灰色
    • gray20.pdf - 源图像在>magick gray20.jpg gray20.pdf首先将颜色空间更改为灰色后转换为.pdf

    请记住,这张图片来自一些奇怪的漫画,但我试图选择最正常的页面(它比看起来更难,但这张图片本身不是 nsfw)

    【讨论】:

    • 当你只有一个输入图像时,为什么你有 -evaluate-sequence 的意思?试试magick 2.jpg -colorspace gray gray2.jpg
    • 能否发布您的 gray2.jpg 或任何失败的文件,以便我进一步测试或向 ImageMagick 团队报告。
    • @fmw42 更新了色彩空间命令并添加了指向 .zip 文件的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2013-01-20
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2012-09-05
    • 2011-09-29
    相关资源
    最近更新 更多