создание пронумерованных серий изображений в imagemagick

создание пронумерованных серий изображений в imagemagick

Как создать пронумерованную серию изображений? Мне нужно пронумеровать (написать на них) тысячи изображений.

Есть простой способ сделать это:

преобразовать input.png - шрифт arial - заполнить черным - размер 10 - аннотировать +20+20"1"выход_0001.png

преобразовать input.png - шрифт arial - заполнить черным - размер 10 - аннотировать +20+20"2"выход_0002.png

....

преобразовать input.png - шрифт arial - заполнить черным - размер 10 - аннотировать +20+20"1250"выход_1250.png

решение1

Используйте forцикл:

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

РЕДАКТИРОВАТЬ: Вы не указали в своем вопросе, что вы на Windows. Поскольку я не знаю ни cmd.exe, ни PowerShell, я предложу два альтернативных решения:

Если у вас есть дистрибутив Perl (например,http://strawberryperl.comилиhttp://dwimperl.com), попробуйте (непроверено):

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

Если у вас есть компилятор C, попробуйте (опять же непроверено);

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

решение2

Быстрого ответа нигде не нашел, поэтому написал пакетный скрипт, который делает именно то, что вам нужно:

@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

Если вы новичок в пакетном производстве, вот на что вам следует обратить внимание:

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

Это означает, что он будет обрабатывать только файлы PNG в этой папке. Измените его на любое расширение файла, которое вы используете.

И взгляните на основную команду:

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

Вы можете изменить несколько параметров, включая шрифт, цвет числа (заливку), а также указать, хотите ли вы, чтобы был контур (обводка и ширина обводки, удалите их, если они вам не нужны). Гравитация определяет, где будет напечатано число, в данном случае юго-восток означает, что оно будет в правом нижнем углу.

И вам определенно захочется изменить -pointsize, который управляет размером числа. Я выбрал значение 250, поскольку все изображения, которые мне нужно было пронумеровать, были размером 1920x1080, но размер шрифта нужно будет изменить в зависимости от размера вашего целевого изображения.

И это...

set /a count = 0

Это означает, что первым числом, напечатанным на изображении, будет 1. Установите значение -1, если вы хотите, чтобы оно было равно нулю, больше или меньше в зависимости от нужного вам начального числа.

Надеюсь, это поможет тому, кто это найдет в будущем!

решение3

Вместо:output_1250.png

Вы хотите:output_%04d.png

%dсообщает imagemagick о необходимости вставить инкрементное число, например 01.png 02.png, и %04dозначает сделать число 4-значным, дополнив его нулями, например output_0001.png, output_0002.png...output_1250.png

Таким образом, вы используете только одну команду конвертации.

Связанный контент