使用 SANE 和其他工具扫描

作者:Michael J. Hammel

几年前,Linux 用户经常面临现成的视频硬件与使其工作的 XFree86 驱动程序之间复杂的关系。为了了解如何配置您的新显卡,您需要了解详细的硬件问题,例如您的显卡使用了哪个芯片组。虽然随着越来越多的显卡制造商开始直接支持 XFree86 开发并提供自己的 XFree86 驱动程序,这个问题已经有所缓解,但 Linux 扫描仪世界仍然处于详细的硬件阶段。

硬件

扫描仪可以通过三种基本方式连接到 PC:通过并行端口、通过 SCSI 总线主机适配器或通过较新的通用串行总线 (USB)。现在几乎不可能找到不支持 USB 的现成扫描仪,尽管许多扫描仪也支持并行接口。SCSI 接口在很大程度上已被扫描仪制造商放弃,转而支持 USB。

Linux 2.4 内核系列中的 USB 支持可以通过使用 USB 内核扫描仪驱动程序或使用 libusb 库来处理。您可以通过运行以下命令来检查内核扫描仪驱动程序

lsmod | grep scanner

如果此命令返回任何内容,则您拥有内核扫描仪驱动程序。如果未返回任何内容,您可以使用以下命令加载扫描仪驱动程序

modprobe scanner
如果 USB 核心模块(当您运行 lsmod 时称为 usbcore)尚未加载,此命令也会加载它。为了使扫描仪与 USB 配合工作,还必须加载正确的 USB HCI 模块。对于 USB 1.0 设备,要加载的模块是 usb-uhci。对于 USB 1.1,它是 usb-ohci。对于 2.0 设备,即使以较低的速度运行,也是 usb-ehci。我的 USB 硬件是 USB 1.1,所以我必须加载 OHCI 版本
modprobe usb-ohci
要改为使用 libusb 库,请使用以下命令删除扫描仪模块(应以 root 用户身份运行)
rmmod scanner
虽然有传言称内核扫描仪驱动程序将在即将发布的 2.6 内核版本中消失,但在当前的 2.4 内核中仍然很常见。因此,在本文的其余部分,我们假设使用内核扫描仪驱动程序。

您可以使用运行适当 modprobe 命令的脚本来启动您的扫描仪软件,这样您可以确保扫描仪驱动程序已加载。或者,您可以使用系统启动脚本之一,例如 Red Hat 系统上常用的 /etc/rc.local 文件,在启动时加载扫描仪。

加载扫描仪驱动程序后,接下来挂载 USB 文件系统,同样以 root 用户身份

mount /proc/bus/usb

然后您可以列出 USB 总线上的设备

cat /proc/bus/usb/devices
如果您没有加载扫描仪、USB 核心和 HCI 驱动程序(如前所述,uhci、ohci 或 ehci 中的任何一个),则此命令不会产生任何输出。devices 文件很冗长,但您要查找的是供应商和产品 ID
P:  Vendor=04b8 ProdID=011d Rev= 1.00
保留这些值——如果 SANE 找不到您的扫描仪,稍后您将需要它们。如果您想确保 SANE 可以看到您的扫描仪,请像这样重新加载扫描仪驱动程序
rmmod scanner
modprobe scanner vendor=0x4b8 product=0x011d
这次我们在加载扫描仪驱动程序时包含了供应商和产品 ID。我们还在 ID 前面加上了 0x——如果您以这种方式使用 modprobe 命令,这是必需的。

sane-usb 手册页更详细地讨论了如何配置您的 USB 扫描仪。请访问 Linux USB 项目页面 www.linux-usb.org 获取有关通用 USB 配置和测试的帮助。

行业工具

现在我们有了基本的硬件配置,我们希望确保 SANE 软件可以访问它。本文使用的 SANE 版本是 1.0.8。SANE 软件分为两个部分:后端驱动程序软件和前端用户界面。SANE 实际上只提供后端驱动程序和一些命令行前端。基于 X 的图形前端,例如 XSane 和 QuiteInsane,是利用 SANE 后端的独立项目。

大多数现代 Linux 发行版现在都包含 SANE 后端的版本。但是,许多发行版提供的都是过时的版本。SANE 网站 (www.mostang.com/sane) 提供了 RPM 或类似格式的当前二进制发行版的链接,适用于 Red Hat、Debian、Mandrake 和 Slackware。

安装 SANE 后端后,您需要配置后端驱动程序。第一个技巧是确保 SANE 可以找到扫描仪。SANE 软件提供了一个名为 sane-find-scanner 的命令行工具,可以找到任何 SCSI 扫描仪和大多数 USB 扫描仪。以您的普通用户 ID 或 root 身份运行此命令;不需要命令行选项。此命令的输出将是一些注释和一行,如下所示(对于 USB 扫描仪)

sane-find-scanner: found USB scanner
    (vendor = 0x04b8, product = 0x011d)
    at device /dev/usb/scanner0

这意味着 SANE 可以使用设备 /dev/usb/scanner0 看到扫描仪,这很好;因此,我们只需要配置此扫描仪的后端驱动程序。但是,如果您没有获得这样的一行——如果在您以普通用户身份运行 sane-find-scanner 时找不到扫描仪,您可能需要更改设备文件的权限。您可以通过以 root 用户身份运行该命令来验证这一点。如果以 root 身份运行时 sane-find-scanner 找到扫描仪,则问题是权限问题。假设您是机器上唯一的用户,则问题很容易解决

chown owner.owner /dev/usb/scanner0
chmod 660 /dev/usb/scanner0
在此示例中,owner 是您的用户 ID 和组 ID。如果您需要与其他用户共享此扫描仪,您可以设置一个扫描仪组
chgrp scanner /dev/usb/scanner0
chmod 660 /dev/usb/scanner0
这两个命令需要以 root 身份运行。所有需要访问扫描仪的用户都必须添加到 scanner 组。关于设备文件的另一个注意事项:您可能会想创建一个从 /dev/usb/scanner0 到 /dev/scanner 的符号链接。不要这样做。SCSI 后端使用 /dev/scanner 设备名称,将其链接到 USB 设备会混淆 USB 后端。

现在 SANE 可以看到扫描仪了,是时候选择其后端驱动程序了。这是第一个棘手的部分。对于大多数 Epson 扫描仪,您将使用 Epson 后端。但是对于 Epson Perfection 1260(大多数电子商店都备货的经济实惠的型号),后端实际上是 Plustek 驱动程序。对于大多数扫描仪,您可以从 SANE 网站支持的硬件列表中进行有根据的猜测。如果不行,您可以尝试查找供应商和产品 ID,并将它们与 Linux USB 项目网站上支持的硬件列表中的信息进行匹配。

SANE 配置

现在您已经选择了合适的驱动程序,是时候配置后端了。如果您使用 RPM 安装 SANE 或使用从源代码构建时的默认配置,则 SANE 的配置文件位于 /etc/sane.d 下。主配置文件名为 dll.conf。此文件告诉 SANE 要使用哪些驱动程序。默认情况下,许多驱动程序已启用。如果您只有一个扫描仪,您可以将其限制为特定扫描仪的驱动程序。在我们的示例中,我们仅取消注释了 Epson 驱动程序,因为我们使用的是 Epson KOWA 后端而不是 Plustek 驱动程序。

并非所有后端都支持所有类型的扫描仪。无论您的扫描仪使用哪种类型的连接,每个后端配置文件都需要知道您的扫描仪将使用的设备文件的名称。请记住,我们使用 sane-find-scanner 工具找到了设备文件名。不幸的是,在配置文件中定义它的格式因后端而异。

Plustek 后端(SANE 支持 Epson Perfection 1260 的默认后端)包括用于 USB 和并行端口类型扫描仪的不同部分。要在此配置文件中指定设备文件,请使用 device 关键字,后跟设备文件的名称,如本例所示

device /dev/usb/scanner0

此条目必须位于 Plustek 驱动程序配置文件的相应部分中。但是,在 Epson KOWA 后端驱动程序用于 Epson Perfection 1260 的 Epson 配置文件中,设备文件使用 USB 关键字指定,后跟设备文件名,如本例所示

usb /dev/usb/scanner0
Epson 和 Plustek 配置文件都提供了注释以帮助进行配置,所有后端都有自己的手册页以提供进一步的配置帮助。尽管提供了许多配置选项,但所有这些选项真正需要的唯一选项是设备文件。

要测试您的 SANE 配置是否正常工作,请尝试以下命令

scanimage -T

如果您的测试失败,您可能需要再次验证是否已安装正确的 USB 模块,是否可以通过 sane-find-scanner 找到设备,以及您的 SANE 后端配置文件中是否具有正确的设备文件名。scanimage 程序的帮助选项还可以提供有关扫描仪功能的相当多的其他信息

scanimage --help
图形前端

硬件已配置并准备就绪。您现在需要的是一个易于使用的前端图形界面,让您可以预览扫描、从预览中选择要扫描的区域,并且可能进行颜色、质量和分辨率调整。您还需要一种将扫描结果导入到 GIMP 中以进行进一步处理的方法。

实际上有三个免费的前端可与 SANE 一起使用,以及一个存在于 SANE 之外的共享软件工具。让我们简要了解一下每个前端,然后再比较功能和质量问题。

XSane

这个项目与 SANE 项目一起成长,并肩发展。用户界面基于 GTK+,它包括一个 GIMP 插件,允许直接从 GIMP 中的 File®Acquire 菜单进行扫描。

Scanning with SANE and Other Tools

图 1. XSane 前端管理 Epson Perfection 1260

当作为 GIMP 插件运行时,不使用 Viewer 窗口——扫描的图像直接传输到 GIMP 的 Canvas 窗口中。务必仔细阅读文档,以充分利用此界面,包括扫描技巧网页的链接。

预览窗口允许设置用户定义和自动扫描区域。在全尺寸扫描之前,也可以在预览中设置黑点、灰点和白点。Viewer 窗口提供有限的编辑功能。

QuiteInsane

与 XSane 类似,QuiteInsane 也提供 GIMP 插件。但是,此插件尚处于早期开发阶段,可能不如 XSane 的插件稳定。除此之外,QuiteInsane 提供了与 XSane 大致相同的功能,外加一些额外的功能。QuiteInsane 的图像查看器允许用户选择要处理的图像区域,并允许直接从图像查看器打印。

Scanning with SANE and Other Tools

图 2. QuiteInsane 前端管理 Epson Perfection 1260

QuiteInsane 集成到 KDE 桌面中,允许将图像从图像查看器拖放到其他应用程序中。虽然可能不需要与其他应用程序集成,但对于桌面用户来说,这是一个不错的功能。

Image Scan!

唯一积极支持 SANE 项目的扫描仪制造商是 Epson。Epson KOWA 公司发布了他们自己的前端,称为 Image Scan!,以及更新的后端,统一支持所有当前的 Epson 扫描仪。该产品的优势在于直接从制造商处为现成的扫描仪提供更新的驱动程序。

Scanning with SANE and Other Tools

图 3. Image Scan! 前端管理 Epson Perfection 1260

此前端不如 XSane 或 QuiteInsane 复杂,提供的功能更少,但它具有更简洁、更整洁的界面。它还缺少内置的图像查看器,而是选择专门使用 GIMP 进行图像编辑,或直接将扫描结果保存到文件或打印机。没有内置帮助,在线文档也很少。

VueScan

XSane、QuiteInsane 和 Image Scan! 都充当 SANE 后端扫描仪驱动程序的前端用户界面。但是,另一种扫描仪产品根本不使用 SANE 后端:Hamrick Software 的 VueScan。该产品是共享软件,并为其各种扫描仪提供自己的一组扫描仪驱动程序。

Scanning with SANE and Other Tools

图 4. VueScan 前端管理 Epson Perfection 1260

VueScan 提供了 SANE 前端未提供的许多功能,例如设备校准、对焦和曝光。它不提供图像编辑或 GIMP 插件。扫描需要先保存到文件,然后在图像编辑器中打开。

功能比较

在四个前端中,只有一个前端仅限于一个供应商——Image Scan!,它仅支持 Epson 扫描仪。其他三个前端支持各种供应商。所有前端都提供伽玛和颜色通道校正的变体,无论是在扫描之前还是之后,或者在某些情况下两者都有。XSane、QuiteInsane 和 VueScan 都提供内置图像查看器,具有有限的图像编辑功能。Image Scan! 仅扫描到文件或直接扫描到 GIMP 中。

所有四个前端最大的差异领域是扫描结果可以发送到哪里以及如何打印。XSane 为扫描结果提供了最多的目的地,包括电子邮件和传真。XSane 和 QuiteInsane 都通过外部 gocr 程序支持光学字符识别 (OCR)。

XSane、QuiteInsane 和 Image Scan! 在预览扫描进行中时,为预览显示提供持续更新。这意味着您可以观看扫描的发生过程。完整扫描也是如此。VueScan 不提供持续更新。

打印是所有四个前端中最大的差异。QuiteInsane 是唯一提供从应用程序打印的前端,具有各种打印选项。XSane 可以直接扫描到打印机,但您无法从内置图像查看器打印扫描结果。VueScan 提供从图像查看器打印的功能,但界面笨拙且缺少功能。

XSane 和 QuiteInsane 的文档都很详尽且写得相当好。VueScan 也提供了 HTML 文档,但远没有那么完整。Image Scan! 有一个极简的手册页。

所有开源工具都提供 GIMP 插件,尽管 VueScan 没有。XSane 的插件在稳定性方面是最先进的。QuiteInsane 的插件功能丰富,但尚处于早期开发阶段,可能不如用户希望的那么稳定。Image Scan! 的插件在功能上与其独立版本相当,而 XSane 和 QuiteInsane 为其 GIMP 插件提供了略微修改的版本。

表 1 是四个扫描仪前端的比较。虽然此表是选择从哪个前端开始的好工具,但如果您不至少尝试一下它们中的每一个,您将会错过很多。

Scanning with SANE and Other Tools

表 1. 扫描仪前端比较

质量比较

XSane 和 QuiteInsane 的所有扫描结果本质上都是相同的,因为使用了通用的 SANE 后端。Image Scan! 包含一个驱动程序,该驱动程序提供与 Epson Windows 驱动程序相同级别的质量。VueScan 的驱动程序是其自己的。在图 5 中,两个扫描结果比较了 Epson 和 VueScan 驱动程序。图 6 显示了这些扫描结果在眼睛周围的特写镜头。SANE 版本在像素之间具有更平滑的过渡,而 VueScan 在左眼的反射中提供了更多细节。

Scanning with SANE and Other Tools

图 5. 比较:左侧 - SANE;右侧 - VueScan。SANE 版本的 JPEG 质量设置为 100。

Scanning with SANE and Other Tools

图 6. SANE (Epson) 和 VueScan 扫描结果的特写镜头,显示质量差异。

总结

每个前端都有其独特的优点和缺点。XSane 对扫描质量的支持基于胶片介质选项,例如 Agfa、Fuji 和 Kodak 胶片底片,这使其更易于使用。

Image Scan! 更适合休闲桌面用户。作为额外的奖励,它提供了来自 Epson 的驱动程序,支持常用的扫描仪。

VueScan 在预览中放大时比其他工具快得多,因为它将扫描结果保存在内存中。这使得 VueScan 对于那些扫描大量图像的人来说比基于 SANE 的解决方案更可取。

只有 VueScan 提供多种色彩空间支持,包括 sRGB、PAL、NTSC、CIE、Apple、Adobe 等。然而,它是唯一一个在测试期间崩溃的工具。

QuiteInsane 具有其他前端缺少的许多功能。例如,菜单栏可以移动,这是此前端从使用 Qt 继承的功能。此工具的其他优点包括用户可修改的曲线图,类似于 GIMP 的曲线工具,用于调整红色、绿色和蓝色通道;直接从 Viewer 窗口打印,具有用户可配置的缩放、边距、图像分辨率和页面大小选项。

但是,没有基于介质类型的颜色校正预设,并且可用的预设扫描尺寸以毫米为单位,并且是非美国标准尺寸——没有 letter 或 legal 选项。尽管缺少这些少量功能,QuiteInsane 仍然具有优势。

无论您是专业艺术家还是休闲摄影师,都有大量的基于 Linux 的扫描选项。每个前端用户界面都提供不同的功能,后端驱动程序也很丰富,Epson 等制造商开始提供自己的版本来支持其特定型号。这些都结合起来,使 Linux 上的扫描与任何桌面系统相媲美。

资源

Michael J. Hammel (mjhammel@graphics-muse.org) 是一位作家、图形艺术家和软件开发人员,目前在德克萨斯州休斯顿的一家存储初创公司工作。他曾在 ALS、LinuxWorld 和 SXSW 会议上发表演讲,并主持了科罗拉多州的一次 Linux 会议。他的网站 The Graphics Muse (www.graphics-muse.com) 是 Linux 平台上图形艺术家和开发人员的重要参考。

加载 Disqus 评论