【问题标题】:ImageMagick convert pdf to png with fixed width or heightImageMagick 将 pdf 转换为具有固定宽度或高度的 png
【发布时间】:2016-01-15 14:48:57
【问题描述】:

我正在使用 ImageMagick 的 convert 方法将 PDF 文件转换为 PNG:

convert -density 150 file.pdf -quality 100 res.png

问题是结果图片的大小根据文件内容不同。如何为结果图片选择特定的最大高度和最大宽度(以像素为单位)?

【问题讨论】:

    标签: pdf imagemagick imagemagick-convert


    【解决方案1】:

    更新答案

    从你的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
    

    【讨论】:

    • 非常感谢。我试图让事情变得更快,并以您的方式转换为大文件,然后调整大小,这可能需要很多时间。例如,600 的密度和 100x100 的调整大小仍然需要很长时间,直到大图像准备好然后调整大小,相反首先以正确的大小创建图片。
    • 抱歉,我将您的问题解释为您知道您想使用 -density 150(因为这是您编码的内容),然后您想调整图像大小 - 而不是您想加快仅使用最小密度进行处理...如果您对文件使用 ImageMagick 命令identify -verbose someFile.pdf,它们是否都具有相同的分辨率?它是 72x72 的吗?因为输出文件大小直接与密度成正比变化。
    • 我已经更新了我的答案 - 请再看看。此外,如果性能对您来说是个大问题,并且您有很多 PDF 文件要转换,如果您使用的是 Linux 或 OSX 等体面的操作系统,请考虑使用GNU Parallel
    猜你喜欢
    • 2011-11-04
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2014-05-24
    • 1970-01-01
    • 2019-04-10
    相关资源
    最近更新 更多