2014-02-19 3 views
1

Как я могу получить максимальную ширину и высоту изображения, выполнить некоторые математические вычисления на нем, а затем использовать его в моем искажении перспективы?ImageMagick - рассчитать перспективу, не зная размеры изображения

У меня есть куча изображений, к которым я хочу применить искажение перспективы.

Единственная проблема в том, что каждое изображение отличается по размеру.

Этот код работает с изображением, где я знаю размер (1440 * 900).

convert test.jpg -matte \ 
    -virtual-pixel transparent \ 
    -distort Perspective '0,0  75,0 \ 
          0,900  0,450 \ 
          1440,0  1440,200 \ 
          1440,900 1200,900' \ 
    distorted.jpg 

Я знаю, что могу получить максимальные значения с помощью %h и %w - но я не могу найти способ, чтобы умножить эти цифры.

По сути, то, что я хочу сделать, это определить точки, как это:

-distort Perspective '0,0  75,0 \ 
          0,%h  0,(%h/2) \ 
          %w,0  %w,200 \ 
          %w,%h  (%w*0.75),%h' 

Для бонусных очков, я хотел бы быть в состоянии назвать перспективу, используя -distort Perspective '@points.txt'

ответ

2

Вы можете использовать ImageMagick-х встроенный fx Оператор для выполнения математических упражнений для вас, без привлечения bash математика, bc или eval.

Как это:

persp=$(convert image.jpg -format "0,0 75,0 0,%h 0,%[fx:int(h/2)] %w,0,%w,200 %w,%h %[fx:int(w*0.75)],%h" info:) 

echo $persp 
0,0 75,0 0,900 0,450 1440,0,1440,200 1440,900 1080,900 

Затем сделайте:

convert image.jpg ... -distort Perspective "$persp" ... distorted.jpg 

О, для тех бонусных очков ... ;-)

convert image.jpg -format "0,0 75,0 0,%h 0,%[fx:int(h/2)] %w,0,%w,200 %w,%h %[fx:int(w*0.75)],%h" info: > points.txt 
convert image.jpg ... -distort Perspective @points.txt distorted.jpg 
+0

Wow! Не думал, что когда-нибудь будет получен ответ. Отлично, спасибо :-) –

Смежные вопросы