ami*_*dar 1 pdf imagemagick imagemagick-convert
我正在使用ImageMagick的convert将PDF文件转换为PNG:
convert -density 150 file.pdf -quality 100 res.png
Run Code Online (Sandbox Code Playgroud)
问题是结果图片的大小根据文件内容而不同。如何为结果图片选择特定的最大高度和最大宽度(以像素为单位)?
更新的答案
从您的评论中,我想我会更好地了解您现在想要什么。所以,我认为您需要的身份是:
Required Resolution Required Height
------------------- = ---------------
Current Resolution Current Height
Run Code Online (Sandbox Code Playgroud)
但是请记住,这在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
Run Code Online (Sandbox Code Playgroud)
因此,如果我在名为doc.pdf595x842 的文件中使用该文件,则它会针对x和y密度输出85和60。如果我再用
convert -density 85 doc.pdf a.jpg
Run Code Online (Sandbox Code Playgroud)
它的尺寸为702x994,接近我想要的高度1000
如果我用
convert -density 60 doc.pdf a.jpg
Run Code Online (Sandbox Code Playgroud)
它的尺寸为496x702,接近我想要的宽度500。
在前面的内容中,您可以使用:
identify -format "%[fx:int(($nh*resolution.y)/h)]" doc.pdf
Run Code Online (Sandbox Code Playgroud)
而不是像我一样将结果分配给变量-之所以这样做,是因为我通常想稍后使用该变量。
原始答案
只需-resize WIDTHxHEIGHT在转换后在其中添加即可设置所需的大小。因此,具体来说,如果您希望保留原始宽高比不超过1500x2000,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize 1500x2000 res.png
Run Code Online (Sandbox Code Playgroud)
如果您希望宽度不超过800像素,并且不关心高度,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize 800x res.png
Run Code Online (Sandbox Code Playgroud)
如果您希望它的高度不超过1000px,并且不关心宽度,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize x1000 res.png
Run Code Online (Sandbox Code Playgroud)
如果您喜欢“镜厅”效果,并希望它达到1200x1800,那么可以采用宽高比,请执行以下操作:
convert -density 150 file.pdf -quality 100 -resize 1200x1800! res.png
Run Code Online (Sandbox Code Playgroud)