Ghostscript创建了巨大的图像,比预期的像素数量级更多

时间:2011-10-18 11:13:48

标签: ghostscript

我使用此Ghostscript命令将PDF转换为图像:

gs \
 -q -dQUIET -dPARANOIDSAFER -dBATCH -dNOPAUSE -dNOPROMPT \
 -dCOLORSCREEN \
 -dDOINTERPOLATE \
 -dMaxBitmap=500000000 \
 -dNumRenderingThreads=4 \
 -dAlignToPixels=0 \
 -dGridFitTT=0 \
 -dTextAlphaBits=4 \
 -dGraphicsAlphaBits=4 \
 -sDEVICE=jpeg \
 -dFirstPage=1 \
 -dDEVICEWIDTHPOINTS=1654 \
 -dDEVICEHEIGHTPOINTS=2333 \
 -dDEVICEXRESOLUTION=1654 \
 -dDEVICEYRESOLUTION=2333 \
 -sOutputFile=d:\images\%01d.jpg \
  d:\test.pdf

它会转换图像,但图像为13675x27280像素。我想要1654x2333px中的图像。我做错了什么?

2 个答案:

答案 0 :(得分:9)

您已在PostScript点中指定了介质的宽度和高度,其中有72英寸,然后指定了以每英寸点数定义的巨大分辨率(1654x2333)/

媒体的大小仅与输出的像素大小成比例,因为这也取决于分辨率。如果我将介质设置为72点(1英寸),分辨率为300 dpi,则生成的图像将为300像素。如果我将其设置为600 dpi,则图像将为600像素。

所以你说媒体是1654点(22.97222英寸)乘2333点(32.402777英寸。然后你说x方向的分辨率是1654 dpi。所以x方向的大小(以像素为单位)是22.97222 * 1654 = 37966.055。类似的计算得出y大小为75596.68。

虽然这与您声明的大小不同,但这可能是因为您没有设置-dFIXEDMEDIA,因此PDF文件中的介质大小会覆盖命令行上提供的介质大小。取分辨率和大小,这意味着介质宽度为13675/1654 = 8.25英寸,高度为11.69英寸。您的PDF文件最初使用A4作为页面大小。

您需要指定分辨率和页面大小,在一起计算时为您提供所需的像素大小。您还必须设置-dFIXEDMEDIA以防止 PDF文件覆盖指定的大小。

最后,您可能希望指定-dPDFFITPAGE,以便缩放PDF以适合媒体,假设这是您实际想要发生的事情。

在这种情况下,只需设置200 dpi的分辨率,并忽略其他点,就会得到接近你想要的结果(-r200)。显然你必须删除-dDEVICERESOLUTION开关。

答案 1 :(得分:5)

Ken解释得很清楚,但我注意到他在其中一个开关上的情况不正确。

使PDF适合(固定)页面大小的参数是-dPDFFitPage(不是全部大写)。所有Ghostscript 除非文档特别允许多个版本,否则交换机区分大小写。

此外,-g_ x _ 选项可直接以像素为单位设置图像大小(页面大小)并自动设置 -dFIXEDMEDIA选项。