Dream4ever / Knowledge-Base

record every requirement and solution here
https://www.hewei.in/
36 stars 6 forks source link

ImageMagick 使用笔记 #178

Closed Dream4ever closed 2 years ago

Dream4ever commented 2 years ago

运行

Windows 版本的所有可执行文件(.exe)都在软件根目录下,默认路径为 c:\Program Files\ImageMagick-7.1.0-Q16-HDRI\

PDF 转图片

搜索资料

示例命令

.\convert.exe
  -density 320
  'c:\d\e.pdf'
  -quality 100
  c:\temp\png\output.png

输出路径设置

不管是在 Windows 下还是 Linux,都要注意 ImageMagick 在输出文件的目录下有写权限,否则会报 permission denied 类似的错误。

清晰度设置

-density 参数决定了输出图片 DPI 的大小,对于行知天下答案,这个参数值设置为 320,输出图片的宽度为 1335px,文件体积为 33.3KB。如果将参数值降为 160,输出图片的宽度和文件体积也都会降一半。但如果 -quality 参数的值都是 100,则输出图片的清晰度都是 OK 的。

-quality 参数的值设置为 100,输出的图片就很清晰了。

尺寸设置

如果用 -resize 1280x 参数将输出图片的宽度调整为 1280px,那么输出图片的原始色彩数会是 64bpp(bits per pixel)。不加这个参数的时候,输出图片的默认原始色彩数是 8bpp。这样的话,输出行知天下答案的时候,就不加这个参数了。

文件名设置

在将多页 PDF 输出为图片文件的时候,ImageMagick 会自动在设定的文件名(不含扩展名)后面加上 -1-2 这样的后缀,用来标记图片文件与原始 PDF 页码的对应关系。

PNG 相关

在将 PDF 转换为 PNG 图片时,ImageMagick 默认输出的是透明背景的 PNG。如果增加对应参数输出白色背景的 PNG,会发现文件体积反而大了不少,那还不如按默认参数来,生成体积更小的 PNG。

依赖环境

在另一台电脑上全新安装 ImageMagick 之后,执行前面的 convert 命令将 PDF 转换为图片时,报下面的错误:

PS C:\Program Files\ImageMagick-7.1.0-Q16-HDRI> .\convert.exe -density 320 'C:\Downloads\temp2\1.pdf' -quality 100 'C:\Downloads\temp2\png\output.png'
convert.exe: FailedToExecuteCommand `"gswin64c.exe" -q -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pngalpha" -dTextAlphaBits=4 -dGraphicsAlphaBits=4 "-r320x320" -dPrinted=false  "-sOutputFile=C:/AppData/Local/Temp/magick-AqmmIj_klIA9DLkNTicVWh3kgRBopLQG%d" "-fC:/AppData/Local/Temp/magick-jWh82d1BX1MGengqQH2ZXs_v0qFrBrF2" "-fC:/AppData/Local/Temp/magick-eaJwCdNd-2B_BlWENDIBVvV9dtNLL72W"' (系统找不到指定的文件。
) @ error/delegate.c/ExternalDelegateCommand/516.
convert.exe: PDFDelegateFailed `系统找不到指定的文件。
' @ error/pdf.c/ReadPDFImage/714.
convert.exe: no images defined `C:\Downloads\temp2\png\output.png' @ error/convert.c/ConvertImageCommand/3327.

Google 之后发现 ImageMagick 原来只是将相关参数传给 GhostScript,让后者来将 PDF 转换为图片(参考链接:Imagemagick Convert PDF to JPEG: FailedToExecuteCommand `"gswin32c.exe" / PDFDelegateFailed)。而且这个链接里的回答者都说不如直接用 GhostScript,转换更快,没必要用 ImageMagick 再中转一层,下回可以研究研究。