Как копировать, вставлять и переворачивать по горизонтали и вертикали много изображений?

По сути, у меня есть 500+ изображений, которые мне нужно изменить точно так же. У меня есть такие изображения Ввод изображения,

И мне нужно скопировать левую сторону изображения, точнее прямоугольник, размеры которого составляют 645x999 пикселей, вставить его, перевернуть по диагонали и переместить на правую сторону. Я мог бы сделать это вручную с помощью любого графического редактора, но я хочу знать, могу ли я создать программу (желательно на C++) или ввести команду, которая может сделать это для меня. Я хочу получить это Вывод изображенияЛюбой совет будет очень полезен.

Спасибо.

1 ответ

Решение

Следующие команды netpbm показывают, как сделать это для одного файла

cat cwxAr.png | pngtopnm | pamcut -width 670 -height 999 | pnmtopng > il.png
cat il.png | pngtopnm | pnmflip -tb | pnmflip -lr | pnmtopng > ir.png
cat il.png | pngtopnm > il.pnm
cat ir.png | pngtopnm > ir.pnm
pnmcat -lr il.pnm ir.pnm | pnmtopng > i.png

примечание - для получения выходного изображения, которое приведено в примере, ширина составляет 670 пикселей, а не 645.

Это должно генерировать промежуточные изображения il.png

ir.png

и окончательное изображение i.png

Для этого для ряда файлов будет работать следующий скрипт, в котором переменная flist задает список файлов для обработки

#!/bin/bash -f

flist=( cwxAr-0 cwxAr-1 cwxAr-2 )
outpref=( cwxAr-out )
nout=0
for f in ${flist[*]} ; do
 fout=`printf "%s-%4.4d.png" ${outpref} ${nout}`
 echo "Reading "${f}", writing ",${fout}
 cat ${f}.png   | pngtopnm | pamcut -width 670 -height 999 | pnmtopng > il.png
 cat il.png | pngtopnm | pnmflip -tb | pnmflip -lr | pnmtopng > ir.png
 cat ir.png | pngtopnm > ir.pnm
 cat il.png | pngtopnm > il.pnm
 pnmcat -lr il.pnm ir.pnm | pnmtopng > ${fout}
 nout=$(( nout +1 ))
done
Другие вопросы по тегам