
Как создать пронумерованную серию изображений? Мне нужно пронумеровать (написать на них) тысячи изображений.
Есть простой способ сделать это:
преобразовать 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
Таким образом, вы используете только одну команду конвертации.