8

我正在使用 GS 进行从 PDF 到 JPEG 的转换,以下是我使用的命令:

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf

如您所见,在此命令中-g500x300设置转换后的图像大小(宽度 x 高度)。

有没有办法只设置宽度而不必输入高度,所以它将基于宽度使用其原始纵横比缩放高度?我知道它可以通过使用 ImageMagick convert 来实现,您只需0在高度参数上加上 ie -resize 500x0。我尝试使用 GhostScript,但我认为这不是正确的方法。

我决定不使用 ImageMagick convert 原因是因为它在转换大尺寸多页 PDF 时非常慢。

谢谢您的帮助!

4

3 回答 3

5

这篇文章解释了为什么 ghostscript 更快 - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted,修复它的唯一解决方法是修改 imagemagick 代码。

不幸的是,ghostscript 不支持自动确定的输出大小。这主要是因为-g使用的选项实际上是确定将保存渲染输出的设备大小,而不是渲染输出本身。该输出大小正在发生变化,因为该-dPDFFitPage开关随后尝试匹配设备大小。尽管您可以使用 仅定义 jpeg 'device' 的高度-dDEVICEHEIGHT=n,但这将使设备宽度保持不变的默认值。

尽管解决方法有些繁琐,但您可以使用 ghostscript 或 imagemagick 来获取 pdf 页面的宽度和高度。要使用 ghostscript 执行此操作,请参阅Using GhostScript to get page size的答案。然后,您可以计算适当的宽度以设置 -g 标志以保持纵横比。如果您能找出一组命令来完成所有这些操作,则可以加分 :)

于 2012-04-05T03:13:24.777 回答
4

您可以编写一个 PostScript 程序来轻松完成这项工作。这是一个开始:

%!
使用百分比:gs -sFile=____.pdf scale.ps

/文件没有{
  (\n *** 缺少源文件。\(使用 -sFile=____.pdf\)\n) =
  用法
} {
  流行音乐
}如果别的

% 获取PDF页面的宽度和高度
%
/GetSize {
  pdfgetpage 当前页面设备
  1 索引 get_any_box
  exch pop dup 2 得到 exch 3 得到
  /PDFHeight exch def
  /PDFWidth exch def
} 定义


%
% 主循环
% 对于原始 PDF 文件中的每一页
%
1 1 PDFPageCount
{
  /PDFPage exch def
  PDFPage 获取大小

% 在这里,知道所需的目标大小
% 计算适合 PDF 的比例因子
% 宽度或高度,或其他
% 宽度和高度存储在 PDFWidht 和 PDFHeight 中
  PDFPage pdfgetpage
  pdfshowpage
} 为了

pdfgetpage 和 pdfshowpage 是 PostScript 语言的内部 Ghostscript 扩展,用于处理 PDF 文件。

于 2012-04-05T07:37:28.530 回答
0

要使用 Ghostscript 调整图像大小,请使用-dDownScaleFactor 例如 gs -dBATCH -dNOPAUSE -r300 -dDownScaleFactor=3 -sDEVICE=png16m -sOutputFile=/tmp/26a0e9f7-3f26-437d-9a97-1653074e819a_%d.png,/tmp/temp.pdf

  • -r300 这里会产生一个巨大的图像

  • 我可以通过缩小 3 来减小尺寸,同时保持纵横比。

如果设置精确的宽度尺寸并不重要,您可以使用它。这适用于大多数用例。

于 2021-09-20T15:47:11.993 回答