我正在开发一个应用程序,它通过生成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
我现在的目标是加快这段代码。现在从打印机到打印机到打印机实际开始打印页面(对于2MB文件),大约需要14秒。
为什么这么慢?
也许我可以重新格式化图像,以便打印机不需要对图像进行仿射变换?
也许我可以使用更好的图像编码?
任何教程,线索或建议都很有价值。
答案 0 :(得分:3)
其缓慢的一个原因是因为JPEG是一种昂贵的压缩过滤器。请尝试使用Flate。不要对图像进行ASCII85编码,将其作为二进制文件发送,这样可以减少传输时间并删除另一个过滤器。请注意,jpeg是一种有损压缩,所以通过'转换为jpeg',你也会牺牲质量。
您可以减少打印机通过创建/缩放图像(创建PostScript之前)所花费的精力,使每个图像样本与设备空间中的一个像素匹配。另一方面,如果要缩放图像,这意味着您需要将更多图像数据发送到打印机。但通常这些天数据连接很快。
然而,这通常很难做到并且经常因打印机可能无法打印到介质边缘而失败,因此可能会将标记操作缩小一点,以便内容适合可打印区域。通常很难弄清楚是否会发生这种情况。
你的ImageMatrix很奇怪.....它不是1:1缩放和浮点缩放因子实际上会减慢从用户空间到设备空间的映射。你有很多样本要映射。
您还可以将图像样本映射到PostScript设备空间(这样左下角为0,0而不是左上角),这意味着您不必在y轴上翻转CTM。
但简而言之,尝试使用比例因子可能不值得,大多数打印机无论如何都会优化这些转换。
打印机的颜色模型通常是CMYK,因此通过发送RGB图像,您强制打印机对图像中的每个样本进行颜色转换。对于您的图片,转化次数超过850万次。