Escanear un álbum de fotos cun guión desde a liña de comandos

Claramente hai varios interfaces gráficas para escanear fotografías, que ofrecen numerosas opcións. Pero cando o número de fotos a escanear é grande e non temos un escáner que conteña un alimentador automático de follas, as cousas póñense. En xeral tes que facer un clic para escanear, outro clic quizais no outro extremo da xanela para gardar ... leva tempo. En fin, unha boa escusa para usar o Liña de comando.

Esta é unha contribución de Rubén, converténdose así nun dos gañadores da nosa competición semanal: «Comparte o que sabes sobre Linux«. Parabéns Rubén!

Lin os artigos sobre Procesamento de imaxes por lotes con GIMP y Como manipular imaxes desde o terminal, xusto o día que o meu amigo Huguito me pediu as fotos (que perdera) dunha viaxe que fixemos en 1989 ... (4 rolos de 36 fotos! e en papel, por suposto 🙂. Recordoume este consello para escanear fotografías que esquecera.

A idea é empregar un script para facelo o máis rápido posible:

1.- Pon unha foto no escáner
2.- Preme calquera tecla para escanear
3.- Repita o procedemento, a menos que a tecla premida sexa, por exemplo, un 'n' para saír
4.- As fotos gardaranse e numeraranse nun subdirectorio preestablecido.

Que comando?

O comando 'maxia' é scanimage que forma parte de SANE. SANE é unha API que proporciona acceso estandarizado a calquera dispositivo de imaxe. A API Sane é de dominio público e o seu código fonte está dispoñible baixo a licenza pública xeral GNU.

A instalación é sinxela. Cada distribución trae os seus paquetes. Para Ubuntu (ou os seus derivados), basta con usar synaptic e instalar sane-sane-utils.

Como empregar?

Como sempre o mellor é escribir nun terminal "man scanimage". Non obstante, resumiremos as opcións que usaremos.

Abrimos un terminal e executamos scanimage -L para ver os dispositivos dispoñibles:

imaxe dixitalizada -L

No meu caso devolve:

dispositivo `xerox_mfp: libusb: 001: 005 'é un periférico multifunción SAMSUNG ORION

Este é o resultado que me deu co meu multifunción Samsung SCX-4200. Se tes un MFP e non atopas o dispositivo, asegúrate de que a impresora non está activa, por exemplo, cunha impresión pendente.

O valor 'xerox_mfp: libusb: 001: 003' úsase para indicar ao comando scanimage que dispositivo usar mediante a opción -d. Se só está conectado un escáner, esta opción non é necesaria.

Cando o comando scanimage analiza, envía a imaxe resultante á saída estándar en formato pnm ou tiff. Entón, para dixitalizar rediriximos a saída a un ficheiro. E se queremos ver que mensaxes está dando o comando, engadimos a opción -v. Se tamén queremos ver a porcentaxe de progreso da operación, engadimos a opción -p.

scanimage -v -p> image.tiff

scanimage: imaxe de dixitalización de tamaño 1284x1734 píxeles a 24 bits / píxel
scanimage: adquisición de marco RGB
imaxe de escaneo: valor mínimo / máximo de grayle = 69/255
scanimage: ler 6679368 bytes en total
Progreso: 13.8%

Que nos dará se escaneamos a imaxe –axudamos? Parece obvio, axuda na orde. Pero este comando ten unha peculiaridade. Ao final da axuda xenérica para o comando, engada os parámetros específicos que acepta o seu escáner.

scanimage --help

Uso: scanimage [OPCIÓN] ...

BLA bla ....

Opcións específicas do dispositivo `xerox_mfp: libusb: 001: 005 ':

estándar:
--resolution 75 | 100 | 150 | 200 | 300 | 600dpi [150] Establece a resolución da imaxe dixitalizada.
--mode Lineart | Semitono | Gris | Cor [Cor] Selecciona o modo de dixitalización (por exemplo, lineart, monocromo ou cor).
--Relate 30..70% (en pasos de 10) [inactivo] Seleccione o brillo mínimo para obter un punto branco
--source Flatbed | ADF | Auto [Flatbed] Selecciona a fonte de dixitalización (como un alimentador de documentos).
Xeometría:
-l 0..215.9mm (en pasos de 1) [0] Posición superior esquerda x da área de dixitalización.
-t 0..297.18 mm (en pasos de 1) [0] Arriba á esquerda e posición da área de exploración.
-x 0..215.9 mm (en pasos de 1) [215.9] Ancho da área de dixitalización.
-y 0..297.18 mm (en pasos de 1) [297.18] Altura da área de exploración.

Escribe "scanimage --help -d DEVICE" para obter a lista de todas as opcións de DEVICE.

Lista de dispositivos dispoñibles:

xerox_mfp: libusb: 001: 005

A partir de aquí podemos escoller as opcións cos valores que podemos usar.

exemplo:

Resolución

–Resolución 150

modo

–Cor de modo

Agora a xeometría. Isto é moi útil porque podemos dicir ao escáner que só extraia a imaxe dun sector (onde poñeremos a fotografía) e aforramos o tempo de dixitalización do resto da superficie que tamén debemos cortar despois cun editor gráfico como como Gimp.

-l 0 comeza a dixitalizar horizontalmente desde 0 mm desde a esquina superior esquerda do escáner

-t 0 comeza a dixitalizar verticalmente desde 0 mm desde a esquina superior esquerda do escáner

Teña en conta que escollín colocar a foto na esquina do escáner [coordenadas (0,0)], xa que é máis fácil de colocar. No meu escáner (tamaño A4) podo ir de 0 a 215.9 e t de 0 a 297.18.

Ancho e alto da fotografía. No meu caso as fotos son de 13x18cm:

-x 180 de ancho

-e 130 de alto

Polo tanto, só escaneará a parte onde colocamos a nosa foto. Por suposto, se coincidimos en que é a esquerda, a dereita, o ancho, a altura, a parte superior e a inferior. Dependerá de como mires o escáner. Suxiro probar as coordenadas e axustalas ás túas necesidades.

Un exemplo do comando podería ser:

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Color --resolution 150 -l 0 -t 0 -x 180 -y 130> image.pnm

Con estas opcións, xa poderiamos construír o noso guión.

Pero antes ...

Tiff ou pnm son formatos sen comprimir, polo que as nosas fotos ocuparán un enorme espazo en disco. Aquí é onde entra o comando ImageMagick convert que se explica en Como manipular imaxes desde o terminal.

Se obtemos unha imaxe.pnm do escáner, podemos convertela a jpg:

converter image.pnm image.jpg

Pero antes de facelo, outro truco:

Image.pnm ocupa moito espazo e deberiamos eliminalo despois de obter a nosa image.jpg. Existe unha opción para o comando convert de xeito que, en vez de tomar un ficheiro do disco, converterá directamente a entrada estándar. Isto faise cun guión - no canto do ficheiro:

converter - image.jpg

Dado que scanimage entrega a imaxe dixitalizada á saída estándar, facemos un "pipeline" e gardamos o tempo de procesamento que leva escribir e eliminamos o ficheiro image.pnm do disco.

scanimage -d xerox_mfp: libusb: 001: 003 -p --mode Color --resolution 150 -l 0 -t 0 -x 180 -y 130 | converter - image.jpg

Agora si, o guión ...

Escribimos o seguinte código nun ficheiro ao que chamaremos scan-album.sh e démoslle permiso de execución. Cando o executemos, creará un subdirectorio onde estarán as nosas fotos dixitalizadas. Lembre de modificar os valores dos parámetros ás súas necesidades.

Asegúrese de ler algunhas suxestións despois do guión.

#! / bin / bash
# Datos para opcións

VERBOSE = "" # ver o estado msg: "" non é; "-v" é si
PROGRESS = "- p" # mostra o progreso "" non; "-p" é si

# Os seguintes parámetros danse mediante scanimage --help para o seu escáner
#Dispositivo: se só hai un escáner, non é necesario, poña DEV = ""
# DEV = "xerox_mfp: libusb: 001: 003"

DEV = ""
MODE = "- Color mode"
RESOLUTION = "- resolución 600 dpi"

# xeometría, por exemplo, foto de 130x180 mm
#localización no escáner do vértice superior esquerdo

x0 = 0
y0 = 0
ancho = 180
alto = 130

#opcións:

L = "- l $ x0"
T = "- t $ y0"
ANCHO = "- x $ ancho"
HIGH = "- e $ high"

# todos os parámetros xuntos:

PARAMETERS = "$ DEV $ VERBOSE $ PROGRESO $ MODO $ RESOLUCIÓN $ L $ T $ ANCHO $ ​​ALTO"

# Nome do álbum. Crea un subdirectorio co teu nome:

ALBUM = "Holidays_1989"

# Por seguridade, non fago nada se o directorio xa existe

mkdir $ ALBUM

se ["$?" = "1"]; entón
saída 100
fi

# Nome base das fotos (en subdirección)

FILE = "./" $ ALBUM "/" $ ALBUM "_foto_"

pregunta de función () {
botou "----------------------------------------------- - ------------------------- "
perder
botou "*******************************"
eco "No de fotos escaneadas:" "$ I"
botou "*******************************"
echo -e "Prema: n * n para saír * Outra tecla para escanear."
perder
read -s -n1 -p "¿Escanear unha foto nova?" pulsación de teclas
perder
}

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

# Comezar

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

I = 0

pregunta

while ["$ keypress"! = "n"]; facer
# nova foto para escanear
imos "I + = 1"
NOME = $ FICHEIRO $ I
scanimage $ PARÁMETROS | converter - $ NAME.jpg
pregunta
feito

Suxestións

Usar resolucións altas como a do exemplo fai que a exploración sexa moito máis lenta.

Ten en conta que se queres imprimir unha foto en papel precisas uns 250 puntos por polgada. Se a idea de escanear as fotos é imprimilas co mesmo tamaño que o orixinal, abonda cunha resolución de 250. Basta velas nun monitor con 100. Unha resolución máis alta serviría para unha ampliación.

A pila de fotos debe prepararse con antelación para que cada foto estea no lado dereito. Deste xeito non perderás o tempo meténdoo no escáner para que non se xiren 180º.

Ao calibrar as medidas dos parámetros de xeometría, é aconsellable observar en que posición hai que colocar o orixinal, de xeito que as imaxes dixitais non queden "do revés". No meu caso a parte inferior da foto vai polo eixo "l".

Se só tes un escáner conectado non dubides en non usar a opción -d. No guión está DEV = »»

Ás veces os números en "xerox_mfp: libusb: 001: 003" cambian e terás que modificalo cada vez que uses o script.

Ten coidado cos guións e as comiñas ao copiar o guión. Os guións (o signo menos) poden estar un ou dous xuntos segundo a opción; as comiñas son o dobre do teclado, non son as que poñen algúns procesadores de texto como LibreOffice.

Por seguridade, o script non crea o directorio se xa existe, para non sobrescribir ficheiros se os hai. Nese caso para.

Se o álbum de fotos é vello, non se arrepinte se faltan as imaxes de pelo, engurras ou quilos: -


O contido do artigo adhírese aos nosos principios de ética editorial. Para informar dun erro faga clic en aquí.

3 comentarios, deixa os teus

Deixa o teu comentario

Enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados con *

*

*

  1. Responsable dos datos: Miguel Ángel Gatón
  2. Finalidade dos datos: controlar SPAM, xestión de comentarios.
  3. Lexitimación: o seu consentimento
  4. Comunicación dos datos: os datos non serán comunicados a terceiros salvo obrigación legal.
  5. Almacenamento de datos: base de datos aloxada por Occentus Networks (UE)
  6. Dereitos: en calquera momento pode limitar, recuperar e eliminar a súa información.

  1.   Calderón xuvenil dixo

    Vaia! Que bo tuto!
    Non pensei que se puidesen facer tantas cousas co bash xD
    Todos os días aprendes máis!
    Grazas pola entrada.
    Non teño un escáner, pero se o consigo, probareino inmediatamente 🙂

  2.   Rube dixo

    Que ben me axudará moito esta dixitalización na dixitalización das miñas notas, espero que mellore, estou a pensar nunha función para escanear un ficheiro completo e detectar o tamaño do obxecto escaneado, xa que dependemos da imaxe magick, pode convértese a djvu ou pdf e así crear un único ficheiro. Ben, acabo de divagar. Moitas grazas pola contribución.

  3.   Encántame dixo

    Que gran pracer, moitas grazas por compartilo.