【发布时间】:2016-01-15 14:48:57
【问题描述】:
我正在使用 ImageMagick 的 convert 方法将 PDF 文件转换为 PNG:
convert -density 150 file.pdf -quality 100 res.png
问题是结果图片的大小根据文件内容不同。如何为结果图片选择特定的最大高度和最大宽度(以像素为单位)?
【问题讨论】:
标签: pdf imagemagick imagemagick-convert
我正在使用 ImageMagick 的 convert 方法将 PDF 文件转换为 PNG:
convert -density 150 file.pdf -quality 100 res.png
问题是结果图片的大小根据文件内容不同。如何为结果图片选择特定的最大高度和最大宽度(以像素为单位)?
【问题讨论】:
标签: pdf imagemagick imagemagick-convert
更新答案
从你的cmets,我想我更了解你现在想要什么。所以,我觉得你需要的身份是这样的:
Required Resolution Required Height
------------------- = ---------------
Current Resolution Current Height
但请记住,这适用于 X 和 Y 方向。所以,让 ImageMagick 计算出获得所需输出大小所需的 x 分辨率和 y 分辨率 - 使用 ImageMagick 的fx 方法更容易,因为它适用于 Windows 和 Linux,我碰巧知道你已经安装了 ImageMagick,而你可能没有 bc 或 Windows 上的任何东西来做数学:
#!/bin/bash
# New width and new height that you want
nh=1000
nw=500
# Calculate Resolution needed in Height
rh=$(identify -format "%[fx:int(($nh*resolution.y)/h)]" doc.pdf)
echo $rh
# Calculate Resolution needed in Width
rw=$(identify -format "%[fx:int(($nw*resolution.x)/w)]" doc.pdf)
echo $rw
所以,如果我在一个名为 doc.pdf 的文件上使用它,该文件的尺寸为 595x842,它会输出 85 和 60 的 x 和 y 密度。如果我再使用
convert -density 85 doc.pdf a.jpg
它出现在 702x994 - 接近我想要的 1000 的高度
如果我使用
convert -density 60 doc.pdf a.jpg
它的尺寸为 496x702,接近我想要的 500 的宽度。
在前面,你可以只使用:
identify -format "%[fx:int(($nh*resolution.y)/h)]" doc.pdf
而不是像我一样将结果分配给一个变量——我这样做是因为我通常想稍后使用该变量。
原答案
只需在转换后在其中添加-resize WIDTHxHEIGHT 即可设置所需的大小。因此,具体而言,如果您希望它不超过 1500x2000,同时保持原始纵横比,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize 1500x2000 res.png
如果您希望它不超过 800 像素宽,并且不关心高度,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize 800x res.png
如果您希望它不超过 1000 像素高,并且不关心宽度,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize x1000 res.png
如果你喜欢 “镜厅” 效果,并希望它能够达到 1200x1800 的效果,并且想知道纵横比,那么:
convert -density 150 file.pdf -quality 100 -resize 1200x1800! res.png
【讨论】:
-density 150(因为这是您编码的内容),然后您想调整图像大小 - 而不是您想加快仅使用最小密度进行处理...如果您对文件使用 ImageMagick 命令identify -verbose someFile.pdf,它们是否都具有相同的分辨率?它是 72x72 的吗?因为输出文件大小直接与密度成正比变化。
GNU Parallel。