creando series de imágenes numeradas en imagemagick

creando series de imágenes numeradas en imagemagick

¿Cómo puedo crear una serie de imágenes numeradas? Tengo que darle número (escribir sobre ellas) a miles de imágenes.

Hay una forma fácil de hacer esto:

convertir input.png -fuente arial -relleno negro -tamaño de punto 10 -anotar +20+20"1"salida_0001.png

convertir input.png -fuente arial -relleno negro -tamaño de punto 10 -anotar +20+20"2"salida_0002.png

....

convertir input.png -fuente arial -relleno negro -tamaño de punto 10 -anotar +20+20"1250"salida_1250.png

Respuesta1

Utilice un forbucle:

for i in `seq 1 1250`
do convert input.png -font arial -fill black -pointsize 10 -annotate +20+20 $i output_$(printf %04d $i).png
done

EDITAR: No especificaste en tu pregunta que estabas en Windows. Como no conozco cmd.exe ni PowerShell, propondré dos soluciones alternativas:

Si tiene una distribución Perl (por ejemplohttp://strawberryperl.comohttp://dwimperl.com), prueba (no probado):

#!/usr/bin/perl
use v5.14;
for (1 .. 1250) {
    my $x = sprintf "%04d", $_;
    system qw/convert input.png -font arial -fill black -pointsize 10 -annotate +20+20/, $_, "output_$x.png";
}

Si tiene un compilador de C, inténtelo (nuevamente sin probar);

#include<stdio.h>
#include<stdlib.h>

int main(void){
    char cmd[1000];
    int i;
    for(i = 1 ; i <= 1250 ; i++){
        sprintf(cmd, "convert input.png -font arial -fill black -pointsize 10 -annotate +20+20 %d output_%04d.png", i, i);
        system(cmd);
    }
    return 0;
}

Respuesta2

No pude encontrar una respuesta rápida en ninguna parte, así que escribí un script por lotes para hacer exactamente lo que necesitas:

@echo off
setlocal enableextensions enabledelayedexpansion
set /a count = 0
For %%A in (*.png) DO (
  set /a count += 1
  echo Processing Image !count!
  magick convert -font arial-black -pointsize 250 -fill white -strokewidth 5  -stroke black -gravity southeast -annotate +100+0 "!count!" "%%A" "!count!_%%A"
)
endlocal
pause

Si eres nuevo en el mundo de los lotes, estos son los aspectos a los que deberás prestar atención:

For %%A in (*.png) DO (

Esto significa que solo procesará los archivos PNG en esta carpeta. Cámbielo a cualquier extensión de archivo que esté usando.

Y eche un vistazo al comando principal:

magick convert -font arial-black -pointsize 250 -fill white -strokewidth 5  -stroke black -gravity southeast -annotate +100+0 "!count!" "%%A" "!count!_%%A"

Hay varias cosas que puedes cambiar, incluida la fuente, el color del número (relleno), así como si deseas que haya un contorno (trazo y ancho del trazo, elimínalos si no los deseas). determina dónde se imprimirá el número; en este caso, sureste significa que estará en la esquina inferior derecha.

Y definitivamente querrás cambiar -pointsize, que controla el tamaño del número. Elegí un valor de 250 ya que las imágenes que necesitaba numerar eran todas de 1920x1080, pero será necesario cambiar el tamaño de fuente dependiendo del tamaño de la imagen de destino.

Y esto...

set /a count = 0

Significa que el primer número impreso en una imagen será 1. Establezca esto en -1 si desea que sea cero, mayor o menor según el número inicial que necesite.

¡Espero que esto ayude a quien lo encuentre en el futuro!

Respuesta3

En lugar de:output_1250.png

Quieres:output_%04d.png

%dle dice a imagemagick que inserte un número incremental, por ejemplo 01.png 02.png, y %04dsignifica que el número tenga 4 dígitos, rellenándolo con ceros, por ejemplo output_0001.png, output_0002.png...output_1250.png

De esta manera solo usas un comando de conversión.

información relacionada