Перспектива PHP ImageMagick Plane2Cylinder

#php #imagemagick

#php #imagemagick

Вопрос:

Я пытаюсь изменить перспективу искажения Plane2Cylinder в ImageMagick с помощью PHP.

Чтобы помочь объяснить, что я ищу, я создал эту графику:

Пример перспективы

Вы можете видеть, что нижняя часть красного блока имеет больший радиус, чем верхняя часть, как если бы вы рассматривали это сверху по центру.

Я попробовал дополнительные поля center_x / y:

 $label->distortImage(Imagick::DISTORTION_PLANE2CYLINDER, [28,0,100], true);
  

С различными настройками от 0 до 1000 для каждого x и y, с нулевыми результатами.

У кого-нибудь есть какие-либо идеи или подсказки? Я тщательно искал, но не могу найти ничего подходящего.

Комментарии:

1. Насколько я знаю, в функции ImageMagick plane2cylinder нет наклона. Смотрите imagemagick.org/Usage/mapping/#displace_cylinder где он использует полиномиальное уравнение, чтобы применить псевдотренажер к цилиндру. Вам пришлось бы использовать какой-то обратный этому.

2. @fmw42 Спасибо, я проверю это. (Да, я понимаю, что это было некоторое время назад)

3. Будет лучше, если вы предоставите большую часть своего кода — тогда больше людей попытаются помочь, теперь это только теория с одной строкой кода и одним изображением.

Ответ №1:

Я не нашел решения с помощью DISTORTION_PLANE2CYLINDER, но просто как идея, что жесткая перспектива может уменьшить силу различия и, возможно, стать также точкой для дальнейших искажений, например. Методы кругового и радиального искажения (Arc).

введите описание изображения здесь

plus

 convert img.png 
-matte 
-virtual-pixel transparent 
-distort Perspective '200,0,0,0 100,700,100,700 700,700,700,700 600,0,800,0 ' 
img1.png
  

введите описание изображения здесь

Может дать вам желаемый радиус сверху и снизу.

Комментарии:

1. Попробуйте plan2cylinder, затем создайте двоичную маску. Затем к результату от плоскости к цилиндру применить — исказить ствол. Затем примените к нему маску, чтобы обрезать любые горизонтальные смещения

2. Спасибо. Это не совсем то, что я искал, но я ценю идею!

Ответ №2:

Итак, после всей этой работы пытаюсь выяснить, как это сделать, используя маски, фильтры и т.д… решение было на самом деле очень простым.

В итоге я просто поместил основное изображение поверх более высокого прозрачного изображения (на правильном расстоянии сверху вниз для создания перспективы), а затем применил plane2cylindar ко всему этому изображению.

Настолько сумасшедший, что я не видел этого для начала. Спасибо за мысли и помощь.

Комментарии:

1. Как насчет публикации и ввода и вывода примера.