Tengo una imagen que contiene imágenes más pequeñas similares a esta:
------
| 1 |
------
| 2 |
------
| 3 |
------
| 4 |
------
Cada subimagen es de 100x200 y la imagen completa es de 100x800.
Me gustaría combinarlos todos en una sola animación que recorrerá las imágenes 1 a 4.
Utilizo la convert
herramienta de imagemagick para recortar las imágenes. Por ejemplo, hice un archivo por lotes
convert %1 -crop 100x200+0+0 %~n1_01.png
convert %1 -crop 100x200+0+200 %~n1_02.png
convert %1 -crop 100x200+0+400 %~n1_03.png
convert %1 -crop 100x200+0+600 %~n1_04.png
Y luego ejecútelo en una imagen llamadamain.jpg
Esto crea un conjunto de imágenes, pero cuando intento convertirlas a un gif como este
convert *.png out.gif
En lugar de una única animación de tamaño 100x200, obtengo una animación de tamaño 100x800 y las imágenes simplemente aparecen en ciertos desplazamientos.
Cuando veo identify
un par de imágenes recortadas, me da
main_01.png PNG 100x200 100x800+0+0 8-bit sRGB 4.74KB 0.000u 0:00.000
main_02.png PNG 100x200 100x800+0+200 8-bit sRGB 3.39KB 0.000u 0:00.000
Presumiblemente, imagemagick está tratando de ser útil leyendo los metadatos y determinando que, de hecho, me gustaría usar un lienzo de 100x800 y que cada imagen debe colocarse en desplazamientos específicos. Que no es lo que quiero.
de hecho, leyendo eltutorial, imagemagick lo deja ahí para ayudarte.
Es decir, la mensajería instantánea conserva la información de "lienzo virtual", "página" o "capas" de la imagen para preservarla para su uso posterior. Esto es especialmente importante para el correcto funcionamiento del manejo de animaciones GIF.
Cuando abro cada archivo manualmente en Paint y luego lo vuelvo a guardar, cuando lo vuelvo a identificar main_02.png
, aparece
main_02.png PNG 100x200 100x200+0+0 8-bit sRGB 4.03KB 0.000u 0:00.000
Haciendo esto para todas las imágenes, hago la conversión a gif nuevamente y finalmente es un gif de 100x200 que se parece a lo que quiero.
¿Cómo puedo configurar todas las compensaciones en (0, 0) para no tener que hacerlo manualmente mediante pintura?
Respuesta1
Puede restablecer las coordenadas del lienzo virtual haciendo +repage
después del recorte:
convert %1 -crop 100x200+0+0 +repage %~n1_01.png
convert %1 -crop 100x200+0+200 +repage %~n1_02.png
convert %1 -crop 100x200+0+400 +repage %~n1_03.png
convert %1 -crop 100x200+0+600 +repage %~n1_04.png
Además, no necesita un archivo por lotes para dividir la imagen en mosaicos; si especifica solo un tamaño, se dividirá en mosaicos, use "%d" en el nombre del archivo de salida para el número de mosaico:
convert %1 -crop 100x200 +repage %~n1_%d.png
O en su caso con el número de ancho fijo de dos dígitos:
convert %1 -crop 100x200 +repage %~n1_%02d.png
Eso generará cuatro imágenes.
De hecho, también puedes realizar la conversión GIF con el mismo comando, sin tener que generar ningún archivo de imagen intermedio temporal. El siguiente comando hará todo lo que quieras de una sola vez:
convert %1 -crop 100x200 +repage out.gif
Para más información, verla documentación para-crop
y también+repage
(tenga en cuenta que -repage
también se puede utilizar para editar datos de lienzo virtual en cualquier imagen por sí solo).
Por cierto, una forma alternativa de dividir imágenes es especificar elnúmerode azulejos en lugar del tamaño de los azulejos; Puedes hacer esto especificando el tamaño.en azulejospara recortar y agregar un signo "@", por ejemplo, esto produce los mismos resultados que arriba:
convert %1 -crop 1x4@ +repage %~n1_%02d.png