Erstellen nummerierter Bildserien in ImageMagick

Erstellen nummerierter Bildserien in ImageMagick

Wie erstelle ich eine nummerierte Bildserie? Ich muss Tausenden von Bildern Nummern (mit Beschriftung) geben.

Gibt es eine einfache Möglichkeit, dies zu tun:

convert input.png -font arial -fill black -pointsize 10 -annotate +20+20"1"Ausgabe_0001.png

convert input.png -font arial -fill black -pointsize 10 -annotate +20+20"2"Ausgabe_0002.png

....

convert input.png -font arial -fill black -pointsize 10 -annotate +20+20"1250"Ausgabe_1250.png

Antwort1

Verwenden Sie eine forSchleife:

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

BEARBEITEN: Sie haben in Ihrer Frage nicht angegeben, dass Sie Windows verwenden. Da ich weder cmd.exe noch PowerShell kenne, schlage ich zwei alternative Lösungen vor:

Wenn Sie eine Perl-Distribution haben (zBhttp://strawberryperl.comoderhttp://dwimperl.com), versuchen Sie (ungetestet):

#!/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";
}

Wenn Sie einen C-Compiler haben, versuchen Sie es (ebenfalls ungetestet);

#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;
}

Antwort2

Da ich nirgends eine schnelle Antwort finden konnte, habe ich ein Batch-Skript geschrieben, das genau das tut, was Sie brauchen:

@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

Wenn Sie mit Batch noch nicht vertraut sind, müssen Sie auf Folgendes achten:

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

Dies bedeutet, dass nur die PNG-Dateien in diesem Ordner verarbeitet werden. Ändern Sie es in die von Ihnen verwendete Dateierweiterung.

Und schauen Sie sich den Hauptbefehl an:

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

Sie können verschiedene Dinge ändern, darunter die Schriftart, die Farbe der Zahl (Füllung) sowie ob Sie einen Umriss haben möchten (Strich und Strichstärke; entfernen Sie diese, wenn Sie sie nicht möchten). Die Schwerkraft bestimmt, wo die Zahl gedruckt wird. In diesem Fall bedeutet Südosten, dass sie in der unteren rechten Ecke sein wird.

Und Sie sollten auf jeden Fall -pointsize ändern, das die Größe der Zahl steuert. Ich habe einen Wert von 250 gewählt, da die Bilder, die ich nummerieren musste, alle 1920 x 1080 groß waren, aber die Schriftgröße muss je nach Größe Ihres Zielbildes geändert werden.

Und das...

set /a count = 0

Bedeutet, dass die erste auf einem Bild gedruckte Zahl 1 ist. Setzen Sie diesen Wert auf -1, wenn Sie eine Null, einen höheren oder niedrigeren Wert wünschen, abhängig von der benötigten Startzahl.

Hoffe, das hilft jedem, der es in Zukunft findet!

Antwort3

Anstatt:output_1250.png

Sie wollen:output_%04d.png

%dweist ImageMagick an, eine inkrementelle Zahl einzufügen, z. B. 01.png 02.png, und %04dbedeutet, die Zahl vierstellig zu machen und sie mit Nullen aufzufüllen, z. output_0001.pngB. output_0002.pngoutput_1250.png

Auf diese Weise verwenden Sie nur einen Konvertierungsbefehl.

verwandte Informationen