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

Mar*_*tin 4 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
Run Code Online (Sandbox Code Playgroud)

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

Ken*_*enS 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开关.


小智 5

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

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

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