加快后记图像打印

Speeding up postscript image print

我正在开发一个应用程序,它通过生成 postscript 输出并将其发送到打印机来打印图像。所以我将我的图像转换为 jpg,然后转换为 ASCII85 字符串,将此数据附加到 postscript 文件并将其发送到打印机。

输出如下:

%!
{/DeviceRGB setcolorspace
/T currentfile/ASCII85Decode filter def
/F T/DCTDecode filter def
<</ImageType 1/Width 3600/Height 2400/BitsPerComponent
8/ImageMatrix[7.809 0 0 -8.053 0 2400]/Decode
[0 1 0 1 0 1]/DataSource F>> image F closefile T closefile}
exec
s4IA0!"_al8O`[\!<E1.!+5d,s5<tI7<iNY!!#_f!%IsK!!iQ0!?(qA!!!!"!!!".!?2"B!!!!"!!!
---------------------------------------------------------------
ASCII85 data
---------------------------------------------------------------
bSKs4I~>
showpage

我现在的目标是加快这段代码的速度。现在,从向打印机发送 .ps 到打印机实际开始打印页面(对于 2MB 文件)大约需要 14 秒。

为什么这么慢?

也许我可以重新格式化图像,这样打印机就不需要对图像执行仿射变换了?

也许我可以使用更好的图像编码?

任何教程、线索或建议都是有价值的。

速度慢的一个原因是 JPEG 是一种昂贵的压缩过滤器。尝试改用 Flate。不要对图像进行 ASCII85 编码,将其作为二进制文件发送,这样可以减少传输时间并删除另一个过滤器。请注意,jpeg 是一种有损压缩,因此 'converting to jpeg' 你也在牺牲质量。

您可以减少 打印机对creating/scaling 图像(在创建 PostScript 之前)的工作量,以便每个图像样本与设备中的一个像素相匹配space。另一方面,如果您正在放大图像,这意味着您将需要向打印机发送更多图像数据。不过平时这​​几天数据连接很快。

然而,这通常很难做到,而且常常因打印机可能无法打印到介质边缘而失败,因此可能会通过少量缩放标记操作,以便内容适合可打印区域。通常很难弄清楚是否正在发生这种情况。

你的 ImageMatrix 好吧,很奇怪......它不是 1:1 缩放,浮点缩放因子确实会减慢从用户 space 到设备的映射space。你有很多样本要映射。

您还可以将图像样本映射到 PostScript 设备 space(这样左下角位于 0,0 而不是左上角)这意味着您不必在 y 中翻转 CTM轴.

但简而言之,尝试使用比例因子可能不值得,而且大多数打印机都会优化这些转换。

打印机的颜色模型通常是 CMYK,因此通过发送 RGB 图像,您会强制打印机对图像中的每个样本进行颜色转换。对于您的图片,转化次数超过 850 万次。