graphics - “光栅”是特定格式还是通用术语(关于CUPS打印库)

标签 graphics cups image printing

我已经看到与CUPS库相关的两个文件:


OpenPrinting/cups-filters/blob/master/filter/imagetoraster.c
OpenPrinting/cups-filters/blob/master/cupsfilters/raster.c


我不确定raster.c到底能做什么,但是imagetoraster.c本质上需要PNG / JPEG / etc。并听起来像是“将其转换为栅格格式”。我不太明白这到底意味着什么。有些打印机是“ PostScript打印机”,有些是“光栅打印机”,但是我不确定这个术语“光栅”是否意味着存在某种“打印机光栅格式”,例如PNG或JPG,或者它仅仅是一个数组。某种像素或其他像素。打印机似乎具有某种标准格式,但是将其称为“光栅”似乎有点误导,因为光栅基本上是某种东西的任意像素表示(据我所知)。

希望可以弄清楚这个CUPS过滤器/打印库中的光栅到底是什么意思。我一直认为这实际上是某种IANA模仿类型,但我不确定。

最佳答案

初步说明:您引用的不是本机CUPS API。它是OpenPrinting项目的库的一部分。 OpenPrinting提供并维护了一组过滤器,这些过滤器可以集成并停靠到CUPS中,主要是针对Linux用户,因为Apple不再直接支持此操作系统,而是将各自的CUPS代码部分移交给了Linux Foundation ...



在CUPS和您提到的两个库源文件的上下文中,“栅格”是在此定义的特定栅格格式(并且实际上已在IANA上注册为mime类型'application/vnd.cups-raster'):


https://www.cups.org/doc/spec-raster.html


因此,这既不是TIFF,也不是PNG,也不是JPEG。 CUPS光栅是特定于CUPS的图像格式,并已开发用于CUPS。

当需要将可打印文档格式(例如PostScript,PDF,TIFF,JPEG,PNG,文本等)转换为打印机可以使用的格式时,此格式在某些类型的打印作业中起中介作用。 (如果您今天购买打印机,则可以直接使用PDF的机会大约为95%,因此不需要真正的转换!)

但是,如果打印机不支持PDF(与较早的型号一样,例如许多HP PCL专用设备),则需要将可打印格式转换为打印机喜欢的格式。您可以在可能的文件格式转换链中看到CUPS栅格的“中间”角色,CUPS可以自动为每个打印作业设置这些链:

  ## FILE FORMAT CONVERSIONS
  PDF -> CUPS-raster -> PCL6     # PCL6-consuming printer
  PDF -> CUPS-raster -> PCL3     # PCL3-consuming printer
  PDF -> CUPS-raster -> ESC/P    # EPSON's ESC/P consuming printer


为了完成这些转换,CUPS使用了一系列“过滤器”,这些过滤器从一种格式转换为另一种格式。它根据打印输入和当前目标打印机输出的当前需求自动为每个打印作业构造这些链:

  ## CUPS FILTERING CHAIN EXAMPLES
  (PDF input)        -> pdftoraster   -> rastertohp     # PCL6-consuming printer
  (PostScript input) -> gstoraster    -> rastertohp     # PCL3-consuming printer
  (TIFF input)       -> imagetoraster -> rastertoescpx  # EPSON's ESC/P consuming printer
  (PNG input)        -> imagetoraster -> rastertopwg    # any IPP-Everywhere printer
  (JPEG input)       -> imagetoraster -> rastertopdf    # any PDF-enabled printer
  (PDF input)        -> pdftoraster   -> rastertoqpdf   # some Samsung printers consuming SPLIX


您应该在Linux上的目录/ usr / lib / cups / filter /(或在macOS上的目录/ usr / libexec / cups / filter /)中四处浏览,以查看系统上所有已安装的过滤器的列表。如果您可以同时访问Linux和macOS,则会看到很多区别:


macOS:例如,在macOS上,您会看到cgpdftoraster过滤器,该过滤器是Apple专有的,不是作为开源发布的,在Linux上不可用。 (它与Apple的Core Graphic Library接口,无论如何在Linux上都不使用。)这将转换为CUPS栅格格式。

然后,(至少)还有两个滤镜将接管生成的CUPS栅格并将其进一步转换:rastertopwgrastertourf


URF是(Apple专有的)栅格格式,所有启用AirPrint并经过认证的打印机都必须支持。
PWG是Printer Working Group (PWG)指定的栅格格式。它与URF非常相似,并且需要每台IPP Everywhere认证的打印机都支持它。




如果您已安装任何供应商的打印机驱动程序,则系统上可能会有其他rastertoXYZ过滤器。
Linux:例如,在Linux(安装了OpenPrinting的cups-filters软件包)上,您会看到{pdf,image,gs}toraster,它也会转换为CUPS栅格格式。

两个过滤器rasterto{pdf,pwg}将CUPS栅格转换为PDF和PWG栅格。

同样:如果您已经安装了任何供应商专有的打印机驱动程序,或者安装了其他打印机驱动程序包,例如HPLIP,Gutenprint,printer-driver-foo2zjs,printer-driver-splix或打印机,则系统上可能还有其他rastertoXYZ过滤器-driver-brlaser(软件包名称适用于Debian)。




要查看哪种特定的输入文件格式mime类型可以通过哪个过滤器转换为哪种特定的输出mime类型,您应该查看并阅读系统的所有/usr/share/cups/mime/*.convs文件。



CUPS所说的“光栅打印机”是任何不使用PDF或PostScript的打印机。 (严格来说,市场上还有一些打印机可以使用Microsoft的XPS / OXPS打印格式,该格式也是基于矢量的。但是CUPS不支持这些格式,macOS和Linux均不支持。供应商仅提供Windows驱动程序。)

关于graphics - “光栅”是特定格式还是通用术语(关于CUPS打印库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54330180/

相关文章:

printing - 标签打印机的自定义纸张尺寸(Brother QL 570)

javascript - 使用 Javascript 通过变量切换图像

c# - 不知何故MySQL在运行后突然无法执行查询

javascript - 将 SVG 作为图像复制到剪贴板

c++ - 在C++中删除数组导致程序崩溃

python - 创建图形过程控制面板

linux - Ghostscript/裁剪框在 Linux 中无法正确打印

c# - 使用 Graphics.MeasureString 进行字符串测量

java - 绘制 JPanel 进行 2D 游戏开发的适当方法?

python - 监视文件夹中添加的 .jpg、使用 CUPS 自动打印、将相同的 .jpg 移动到另一个文件夹