
¿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 for
bucle:
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
%d
le dice a imagemagick que inserte un número incremental, por ejemplo 01.png
02.png
, y %04d
significa 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.