Tengo un montón de imágenes escaneadas en formato jpg. Como veis en las imágenes de abajo, las tarjetas son de dos caras, al escanear he colocado 6 tarjetas dentro del escáner.
El anverso de la primera tarjeta está numerado 1 en la imagen de abajo, y su reverso está numerado 7. El anverso de la segunda tarjeta está numerado 2 y su reverso está numerado 8, y etc.
Lo que quiero lograr: dividir estos archivos (imagen1.jpg e imagen2.jpg) de manera que tenga una carpeta que contenga las tarjetas individuales en un orden como este:
1.jpg(1)
2.jpg(7) (since 7 is the back side of the 1.jpg)
3.jpg(2)
4.jpg(8)
etc
(imagen1.jpg) Anverso de las seis cartas:
(imagen2.jpg) Reverso de las seis cartas:
1- ¿Cómo puedo dividir imágenes según estas líneas divisorias usando imagemagick (o cualquier otra solución)? (Puedo obtener la x y la y de estas líneas porque todas las imágenes son 2550x3507)
Las líneas divisorias están en rojo:
- después de dividir o durante la división, ¿es posible numerarlos automáticamente según el orden deseado descrito anteriormente?
Respuesta1
¿Cómo puedo dividir imágenes según estas líneas divisorias usando [ImageMagick?]
Podría decirse que la solución más sencilla sería utilizar-cultivoal igual que:
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%02d.jpg
Este comando:
Divide cada imagen en 6 mosaicos (aproximadamente) del mismo tamaño (-recortar 3x2@), numerando cada uno en orden.
Inicia la secuencia de numeración en
1
(-escena 1), en vez de0
.Da a los números finales un
0
relleno (%02d
) en los dígitos individuales [01-09
].
Notas de comando
Si bien es posible especificar un tamaño exacto (p. ej.
1000x1000
) o utilizar porcentajes (p. ej.33%x50%
) para un recorte de mosaico, esto también puede producir imágenes "recortadas" (probablemente no deseable).El uso de, por ejemplo,
-3x2@
normalmente crea imágenes que tienen un tamaño más cercano (entre sí) que los porcentajes de "exceso" (por ejemplo,33.4%x50%
) para evitar producir imágenes "recortadas".En un archivo por lotes, deberá duplicar los signos de porcentaje para que funcionen según lo previsto:
convert -crop 3x2@ -scene 1 image1.jpg image2.jpg cropped_%%02d.jpg
Si está escribiendo en formatos que pueden tener desplazamientos de imagen/lienzo (p. ej.
.png
), es posible que desee incluir+repaginadespues de ti-crop
:convert -crop 3x2@ +repage -scene 1 image1.jpg image2.jpg cropped_%02d.png
Si sus formatos de entrada pueden contener desplazamientos de imagen/lienzo, es posible que
+repage
también los desee.
Cambiar el nombre
¿Es posible numerarlos automáticamente según el orden descrito anteriormente?
Solo con ImageMagick, no pude hacerlo (sospecho que probablemente no sea posible, pero honestamente no estoy seguro de esto). Por supuesto, aparte de ImageMagick, esto es completamente posible.
Dado que ha etiquetado esta pregunta con batch
, vale la pena mencionar que probablemente no pueda ayudar con ninguna buena solución por lotes. Con eso en mente, parece muy probable que usted (u otra persona) pueda encontrar algo mejor que lo que detallo a continuación.
Lote obligatorio (no)Respuesta
Es posible cambiar el nombre por fuerza bruta con lotes. Primero, cambie el nombre de cada archivo (excepto el primero y el último) temporalmente, por ejemplo:
rename cropped_02.jpg cropped_02_temp.jpg
[...]
rename cropped_11.jpg cropped_11_temp.jpg
Luego, cámbieles el nombre a sus nuevas posiciones, por ejemplo:
rename cropped_02_temp.jpg cropped_03.jpg
rename cropped_03_temp.jpg cropped_05.jpg
rename cropped_04_temp.jpg cropped_07.jpg
rename cropped_05_temp.jpg cropped_09.jpg
rename cropped_06_temp.jpg cropped_11.jpg
rename cropped_07_temp.jpg cropped_02.jpg
rename cropped_08_temp.jpg cropped_04.jpg
rename cropped_09_temp.jpg cropped_06.jpg
rename cropped_10_temp.jpg cropped_08.jpg
rename cropped_11_temp.jpg cropped_10.jpg
Batch tiene la capacidad de tomar argumentos de la línea de comandos y hacer cálculos, además de poseer for
bucles y if
declaraciones, etc., por lo que esta solución se puede (obviamente) mejorar.
Cambiar el nombre de las notas
Si observa la segunda mitad del proceso de cambio de nombre anterior, notará un patrón en los nombres de los archivos. Efectivamente, para una Posición N determinada, podemos usar una de las dos fórmulas siguientes para encontrar la nueva posición de un elemento en su esquema:
- Elementos hasta el punto "medio" (por ejemplo, 2-6):
(Position_N * 2) - 1
- Elementos más allá del punto "medio" (por ejemplo, 7-11):
(Position_N * 2) - Total_Items
Nota: Si bien es posible aplicar estas fórmulas a una secuencia completa (por ejemplo, 1 y 12), el primer y el último elemento nunca cambian de posición. Podría decirse que esto hace innecesario cambiarles el nombre.
Además, estos deberían funcionar para cualquierincluso(no impar) número de elementos/posiciones (4 o más), suponiendo que los nombres de sus archivos estén en orden (por ejemplo, 1 a 12). Entonces, para sus ejemplos originales:
Temp Item 2 becomes (2 * 2) - 1 = Item 3
Temp Item 7 becomes (7 * 2) - 12 = Item 2
Temp Item 8 becomes (8 * 2) - 12 = Item 4
[...]
Por lo tanto, las fórmulas proporcionadas pueden ser potencialmente la base para soluciones por lotes (u otras secuencias de comandos). Sin embargo, hay un par de cosas más que debes tener en cuenta si decides utilizarlos como tales...
Clasificación
La clasificación (como se mencionó anteriormente) puede tener consecuencias prácticas en cosas como scripts, ya que los elementos que Windows devuelve "desordenados" "romperán" las fórmulas dadas. Particularmente:
Windows ordena los nombres enlexicográficoorden por defecto. Esto significa elementos que no tienen un dígito
0
delante de un solo dígito (p. ej.imagen_1.jpgvs.imagen_01.jpg) no aparecerá en orden (natural) cuando Windows lo devuelva directamente. Es decir, se devolverán como, por ejemplo:cropped_1.jpg, cropped_10.jpg, cropped_11.jpg, cropped_12.jpg, cropped_2.jpg, etc.
Ciertas palabras y frases (como
- Copy
) en los nombres de los archivos también pueden afectar el orden en que se devuelven los nombres de los archivos.
Si utiliza las fórmulas anteriores, asegúrese de 0
rellenar con dígitos un solo dígito en los nombres de sus archivos y eliminar elementos como - Copy
(o tomar medidas para mitigar estos problemas).
Bucles/Contadores que comienzan con 0
Si está utilizando un lenguaje que comienza a contar 0
(por ejemplo, en bucles), esto puede cambiar ligeramente las fórmulas:
- Elementos hasta el punto "medio" (por ejemplo, 1-5):
(Position_N * 2)
- Elementos más allá del punto "medio" (por ejemplo, 6-10):
(Position_N * 2) - (Total_Items - 1)
Recuerde que, contando desde 0, se ejecutarían 12 elementos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
.
Una secuencia de comandos de Python
Si estás interesado, he escrito un pequeño (probablemente terrible)secuencia de comandos de Pythonpara Python 3.x (probado con 3.6.4), que se puede usar desde la línea de comando para cambiar el nombre de archivos arbitrarios que están en secuencia (p. ej.cropped_01.jpg...cropped_XX.jpg) al orden especificado en su pregunta. Necesitarastener una copia de Pythoninstalado si decides probarlo.
Limitaciones
No lee archivos de texto para obtener información (por lo que no se especifica una lista de archivos en este momento). Del mismo modo, se requiere un prefijo y una extensión de nombre de imagen/archivo en la línea de comando.
Tal como está, el script espera que los nombres de los archivos se devuelvan automáticamente en el orden correcto (consulte Windows y
0
-padding, más arriba).Existe una opción para utilizar un módulo de terceros llamado
natsort
(instalado con, por ejemplopython -m pip install natsort
), si sus elementos no están0
acolchados. Sin embargo, debe descomentar la línea 13 (from natsort import natsorted
) y la línea 105 (item_list = list(natsorted(item_list))
) en el script después de la instalaciónnatsort
para usar esta opción.
Para ser claros, "descomentar" significa eliminar el #
espacio inicial y al principio de la línea. Se incluyen instrucciones adicionales sobre el uso con el script.