将目录中的所有 .jpg 图像转换为 .pdf |调试 ImageMagick

Convert all .jpg images in directory to .pdf | Debugging ImageMagick

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

是否有其他选择,最好是 CLI 工具?

或者我能以某种方式调试为什么 ImageMagick 对我不起作用吗?我没有收到任何错误结果我只是收到损坏的文件。

我的用例


我的 os 是 Windows 并且 我有 64 个名为 0.jpg、2.jpg、... 63.jpg 的 .jpg 文件,我想将所有 os 图像合并到一个 .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 损坏。 有一些明显的差异,但我不确定 those 属性在 .jpg -> .pdf conversion

的上下文中意味着什么

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

magick identify -verbose XXX.jpg

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

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

magick 2.jpg -colorspace gray gray2.jpg

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

magick gray2.jpg gray2.pdf

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

@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)

一种想法是有人将灰度图像转换为具有 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 矢量后,这种冲突或缺少色彩空间可能会使某些查看者感到困惑 shell。