
Como posso criar uma série de imagens numeradas? Tenho que dar um número (escrever nelas) a milhares de imagens.
Existe uma maneira fácil de fazer isso:
converter input.png -font arial -fill black -pointsize 10 -annotate +20+20"1"saída_0001.png
converter input.png -font arial -fill black -pointsize 10 -annotate +20+20"2"saída_0002.png
....
converter input.png -font arial -fill black -pointsize 10 -annotate +20+20"1250"saída_1250.png
Responder1
Use um for
loop:
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: Você não especificou em sua pergunta que estava no Windows. Como não conheço cmd.exe nem PowerShell, proporei duas soluções alternativas:
Se você tiver uma distribuição Perl (por exemplohttp://strawberryperl.comouhttp://dwimperl.com), tente (não testado):
#!/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";
}
Se você possui um compilador C, tente (novamente não testado);
#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;
}
Responder2
Não consegui encontrar uma resposta rápida em lugar nenhum, então escrevi um script em lote para fazer exatamente o que você precisa:
@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
Se você é novo no lote, estas são as partes que você precisa prestar atenção:
For %%A in (*.png) DO (
Isso significa que ele processará apenas os arquivos PNG nesta pasta. Altere-o para qualquer extensão de arquivo que você esteja usando.
E dê uma olhada no comando principal:
magick convert -font arial-black -pointsize 250 -fill white -strokewidth 5 -stroke black -gravity southeast -annotate +100+0 "!count!" "%%A" "!count!_%%A"
Há várias coisas que você pode alterar, incluindo a fonte, a cor do número (preenchimento) e também se deseja que haja um contorno (traço e largura do traço, remova se não quiser). determina onde o número será impresso, neste caso sudeste significa que estará no canto inferior direito.
E você definitivamente desejará alterar -pointsize, que controla o tamanho do número. Escolhi um valor de 250, pois as imagens que precisava numerar eram todas 1920x1080, mas o tamanho da fonte precisará ser alterado dependendo do tamanho da imagem alvo.
E isto...
set /a count = 0
Significa que o primeiro número impresso em uma imagem será 1. Defina como -1 se quiser que seja zero, maior ou menor, dependendo do número inicial necessário.
Espero que isso ajude quem o encontrar no futuro!
Responder3
Em vez de:output_1250.png
Você quer:output_%04d.png
%d
diz ao imagemagick para inserir um número incremental, por exemplo 01.png
02.png
, e %04d
significa tornar o número com 4 dígitos, preenchendo-o com zeros, por exemplo output_0001.png
, output_0002.png
...output_1250.png
Dessa forma, você usa apenas um comando de conversão.