Вы можете сделать это намного быстрее без Python и использования многопроцессорной обработки с ImageMagick или libvips .
Первая часть - это все настройки:
Сделайте 20 изображений, называемых a-000.png
... a-019.png
, которые go от красного к синему:
convert -size 64x64 xc:red xc:blue -morph 18 a-%03d.png
Сделайте 20 изображений, называемых b-000.png
... b-019.png
, которые go от желтого до пурпурного:
convert -size 64x64 xc:yellow xc:magenta -morph 18 b-%03d.png
Сейчас добавьте их рядом в c-000.png
... c-019.png
for ((f=0;f<20;f++))
do
z=$(printf "%03d" $f)
convert a-${z}.png b-${z}.png +append c-${z}.png
done
Эти изображения выглядят так:
Если все в порядке, вы можете выполнить их все параллельно с помощью GNU Parallel :
parallel convert a-{}.png b-{}.png +append c-{}.png ::: {1..19}
Benchmark
Я провел быстрый тест и сделал 20 000 изображений a-00000.png
... a-019999.png
и еще 20 000 изображений b-00000.png
... b-019999.png
с каждым изображением размером 1200x800 пикселей. Затем я выполнил следующую команду, чтобы добавить каждую пару по горизонтали и записать 20000 выходных изображений c-00000.png
... c-019999.png
:
seq -f "%05g" 0 19999 | parallel --eta convert a-{}.png b-{}.png +append c-{}.png
, и это занимает 16 минут на моем MacBook Pro со всеми 12 ядрами ЦП. на 100% во всем. Обратите внимание, что вы можете:
- добавить разделители между изображениями,
- написать аннотацию к изображениям,
- добавить границы,
- изменить размер
если вы используете sh и выполняете много других операций - это всего лишь простой пример.
Обратите внимание, что вы можете получить еще более быстрое время - в районе 10-12 минут, если вы принимаете JPEG вместо PNG в качестве формата вывода.