从命令行使用脚本扫描相册

显然有几个 用于扫描照片的图形界面,其中提供了许多选项。 但是,当要扫描的照片数量很大并且我们没有配备自动供纸器的扫描仪时,事情就会变得很棘手。 通常,您需要单击一下进行扫描,或者在窗口的另一端进行另一次单击才能保存...这需要时间。 无论如何,一个很好的借口来使用 命令行.

这是鲁本的贡献,因此成为我们每周比赛的获胜者之一:分享您对Linux的了解«。 恭喜鲁本!

我读了以下文章 GIMP批处理图像 y 如何从终端操作图像,就在我的朋友Huguito向我索要我1989年旅行的照片(他丢失的照片)…(4卷36张照片!当然还有纸上🙂),它使我想起了扫描照片的技巧我忘记了。

这个想法是使用脚本来尽快完成它:

1.-将照片放在扫描仪上
2.-按任意键进行扫描
3.-重复该过程,除非所按的键是例如“ n”退出
4.-照片将存储在预先建立的子目录中并编号。

什么命令

“魔术”命令是scanimage,它是SANE的一部分。 SANE是提供对任何成像设备的标准化访问的API。 Sane API在公共领域中,其源代码在GNU通用公共许可证下提供。

安装很简单。 每个发行版都带有其软件包。 对于Ubuntu(或其衍生产品),只需使用synaptic并安装sane和sane-utils。

如何使用?

最好的方法总是在终端“ man scanimage”中写入。 但是,我们将总结我们将使用的选项。

我们打开一个终端并运行scanimage -L以查看可用的设备:

扫描图像

就我而言,它返回:

设备`xerox_mfp:libusb:001:005'是三星ORION多功能外围设备

这就是它给我的Samsung SCX-4200多功能打印机带来的结果。 如果您具有多合一功能,但找不到该设备,请确保打印机未处于活动状态,例如打印待处理。

值“ xerox_mfp:libusb:001:003”用于通过-d选项告诉scanimage命令使用哪个设备。 如果仅连接一台扫描仪,则不需要此选项。

当scanimage命令扫描时,它将结果图像以pnm或tiff格式发送到标准输出。 因此,为了进行扫描,我们将输出重定向到文件。 如果要查看命令给出的消息,请添加-v选项。 如果我们还想查看操作进度百分比,可以添加-p选项。

scanimage -v -p> image.tiff

scanimage:以1284位/像素扫描大小为1734x24像素的图像
scanimage:获取RGB帧
scanimage:最小/最大灰度值= 69/255
scanimage:总共读取6679368字节
进度:13.8%

如果我们扫描图像–帮助,它将给我们带来什么? 看起来很明显,它为命令提供了帮助。 但是该命令具有特殊性。 在命令的常规帮助末尾,添加扫描仪可接受的特定参数。

scanimage-帮助

用法:scanimage [OPTION] ...

BLA bla ....

特定于设备`xerox_mfp:libusb:001:005'的选项:

标准:
--resolution 75 | 100 | 150 | 200 | 300 | 600dpi [150]设置扫描图像的分辨率。
--mode线稿|半色调|灰色|彩色[颜色]选择扫描模式(例如,线稿,单色或彩色)。
--highlight 30..70%(以10为步进)[不活动]选择最小亮度以获得白点
--source平板| ADF |自动[平板]选择扫描源(例如文档进纸器)。
几何:
-l 0..215.9mm(以1为步长)[0]左上角x扫描区域的位置。
-t 0..297.18mm(以1为步长)[0]左上角和扫描区域的位置。
-x 0..215.9mm(以1为步长)[215.9]扫描区域的宽度。
-y 0..297.18mm(以1为步长)[297.18]扫描区域的高度。

输入``scanimage --help -d DEVICE''以获取DEVICE所有选项的列表。

可用设备列表:

xerox_mfp:libusb:001:005

从这里我们可以选择具有我们可以使用的值的选项。

例如:

决议

–第150号决议

摩多

–模式颜色

现在是几何。 这非常有用,因为我们可以告诉扫描仪仅提取一个扇区的图像(我们将在其中放置照片),并且节省了扫描其余表面的时间,我们稍后还应使用图形编辑器进行切割,例如作为金普。

-l 0从扫描仪左上角0毫米开始水平扫描

-t 0从扫描仪左上角0毫米开始垂直扫描

请注意,我选择将照片放在扫描仪的角落[坐标(0,0)],因为它更易于放置。 在我的扫描仪(A4尺寸)上,l可以从0到215.9,t可以从0到297.18。

照片的宽度和高度。 在我的情况下,照片是13x18cm:

-x 180宽

-和130高

因此,它将仅扫描我们放置照片的部分。 当然,如果我们同意左边,右边,宽度,高度,顶部和底部是什么。 这将取决于您如何看待扫描仪。 我建议测试坐标并根据需要进行调整。

该命令的示例可能是:

scanimage -d xerox_mfp:libusb:001:003 -p-模式颜色-分辨率150 -l 0 -t 0 -x 180 -y 130> image.pnm

使用这些选项,我们已经可以构建脚本。

但是之前...

Tiff或pnm是未压缩的格式,因此我们的照片将占用巨大的磁盘空间。 这是ImageMagick转换命令所在的位置,有关如何从终端操作图像进行了说明。

如果我们从扫描仪获得了image.pnm,则可以将其转换为jpg:

转换image.pnm image.jpg

但是在这样做之前,还有另一个技巧:

Image.pnm占用大量空间,获取image.jpg后应将其删除。 convert命令有一个选项,以便代替直接从磁盘上获取文件,它将直接转换标准输入。 这是通过破折号-而不是文件来完成的:

转换-image.jpg

由于scanimage将扫描的图像传送到标准输出,因此我们进行了“流水线化”,并节省了从磁盘删除image.pnm文件所需的处理时间。

scanimage -d xerox_mfp:libusb:001:003 -p --mode颜色-分辨率150 -l 0 -t 0 -x 180 -y 130 | 转换-image.jpg

现在是的,脚本...

我们将以下代码写入一个名为scan-album.sh的文件中,并授予其执行权限。 当我们运行它时,它将创建一个子目录,扫描的照片将位于该子目录中。 切记根据需要修改参数值。

一定要在脚本之后阅读一些建议。

#!/斌/庆典
#选项数据

VERBOSE =“”#查看状态msg:“”不是; “ -v”是
PROGRESS =“-p”#显示进度“”为否; “ -p”是

#scanimage --help为您的扫描仪提供以下参数
#Device:如果只有一台扫描仪,则没有必要,将DEV =“”
#DEV =“ xerox_mfp:libusb:001:003”

DEV =“”
MODE =“-模式颜色”
解决方案=“-分辨率600dpi”

#geometry,例如130x180毫米照片
#位于左上角顶点扫描器中

x0 = 0
y0 = 0
宽度= 180
高= 130

#选项:

L =“-l $ x0”
T =“-t $ y0”
WIDTH =“-x $ width”
HIGH =“-和$高”

#所有参数一起:

参数=“ $ DEV $详细信息$进度$模式$分辨率$ L $ T $宽度$高”

#相册名称。 用您的名字创建一个子目录:

专辑=“假日_1989”

#为了安全起见,如果目录已经存在,我什么也不做

mkdir $专辑

如果[“ $?” =“ 1”]; 然后
退出100
fi

#照片的基本名称(在子目录中)

FILE =“ ./” $专辑“ /” $专辑“ _foto_”

函数问题(){
扔出去 ” - - - - - - - - - - - - - - - - - - - - - - - - --------------------------“
回音
扔出去 ”******************************”
回显“扫描的照片数量:”“ $ I”
扔出去 ”******************************”
echo -e“按:n * n退出*另一个要扫描的键。”
回音
读-s -n1 -p“扫描新照片?” 按键
回音
}

##############################################

#开始

##############################################

I = 0

问题

while [“ $ keypress”!=“ n”]; 做
#要扫描的新照片
让“我+ = 1”
名称= $ FILE $ I
scanimage $参数| 转换-$ NAME.jpg
问题
完成

建议

使用示例中的高分辨率会使扫描速度变慢。

请记住,如果要在纸张上打印照片,则每英寸需要大约250点。 如果扫描照片的想法是使用与原始照片相同的尺寸打印照片,则分辨率为250足够了。要在监视器上查看照片就足够100。 更高的分辨率将有助于放大。

照片堆应该事先准备好,以便每张照片都在右侧。 这样,您就不会浪费时间将其放入扫描仪中,这样它们就不会旋转180º。

校准几何参数的测量值时,建议观察将原稿放置在哪个位置,以使数字图像不会“倒置”。 在我的情况下,照片的下部沿“ l”轴移动。

如果仅连接一台扫描仪,请不要使用-d选项。 在脚本中是DEV =»»

有时,“ xerox_mfp:libusb:001:003”中的数字会更改,并且每次使用脚本时都必须对其进行修改。

复制脚本时,请注意连字符和引号。 连字符(减号)可以是一个或两个在一起,具体取决于选项。 引号是键盘的两倍,而不是像LibreOffice这样的文字处理程序所使用的引号。

为了安全起见,脚本不会创建目录(如果目录已经存在),以免覆盖目录(如果有的话)。 在这种情况下,它将停止。

如果相册较旧,则不留意图像中是否有大量的头发,皱纹或几公斤缺失:-


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   低级卡尔德隆

    哇! 多么好的兔兔!
    我不认为bash xD可以完成很多事情
    每天您都会学到更多!
    感谢您的意见!
    我没有扫描仪,但是如果有扫描仪,我会立即尝试try

  2.   乡巴佬

    这种贡献对我的笔记数字化有多大帮助,我希望它能有所改善,我在考虑一种功能,可以扫描整个文件并检测扫描对象的大小,因为我们依赖图像魔术,它可以转换为djvu或pdf,从而创建一个文件。 好吧,我只是闲逛。 非常感谢您的贡献。

  3.   阿多·埃洛(Ado Ello)

    非常高兴,非常感谢您的分享。