Это довольно сложная задача: в ImageMagick есть несколько встроенных эффектов искажения, но ни один из них не похож на тот, который вам нужен.
Для достижения своей цели вы можете попробовать определить пользовательское искажение: например, используя карты изображений (в частности, карты поиска абсолютного искажения, дополнительная информация здесь).
По сути, вы создаете черно-белое градиентное изображение (карту), которое определяет, как конкретный эффект должен применяться к каждому отдельному пикселю изображения.
Сложность заключается в правильном создании карты изображений: вы можете сделать это вручную или с помощью ImageMagick.
Например, эта команда, взятая из документации ImageMagick, создает карту сферического искажения:
convert -size 100x100 xc: -channel R \
-fx 'yy=(j+.5)/h-.5; (i/w-.5)/(sqrt(1-4*yy^2))+.5' \
-separate +channel sphere_lut.png
это результирующее изображение:
после того, как вы создали свою карту искажения, вы можете применить ее к своему изображению, например, с помощью:
convert input.png lut_mask.png -fx 'p{ v*w, j }' output.png
person
Andrea
schedule
23.05.2013