Трансформация изображения в трапецию Imagemagick

Тема в разделе "Perl программирование", создана пользователем Holger Dee Assuran, 6 окт 2010.

  1. Holger Dee Assuran

    Holger Dee Assuran Гость

    Есть картинка, скажем 110 на 154 пиксела.
    Необходимо ее трансформировать посредством Image::Magick модуля Perl в трапецию - нижний край должен быть шире чем верхний. При этом отклонение левого края должно быть больше чем отклонение правого.
    Подскажите как это сделать - перекопал кучу документалова, но с моим знанием английского :(
     
  2. Holger Dee Assuran

    Holger Dee Assuran Гость

    Я так понимаю это называется "перспектива" - как бы наклонить изображение верхним краем от себя...
    Путем рытья здесь пришел к выводу что надо использовать одну из функций:
    AffineTransform()
    Distort()
    еще вызвала подозрение на пригодность Shear()
    Только я не могу понять какую из них юзать. Код, на примере AffineTransform() должен быть чем-то вроде:
    Код (Text):
    use Image::Magick;
    my $IMG = Image::Magick->new;
    $IMG->Read(%filename%);
    $IMG->AffineTransform(%parameters%);
    $IMG->Write(%outfilename%);
    Из этого уточняю свой вопрос:
    Какую функцию лучше использовать и какие параметры ей передать?

    Ну и может я вообще не то накопал - наставьте на путь истинный.
     
  3. Holger Dee Assuran

    Holger Dee Assuran Гость

    Итак, путем долгого рытья по просторам тырнета нарыл таки решение. Почитать как сделать из прямоугольной картинки трапецию можно тут.

    Правда данный функционал реализован в версии ImageMagic, кажется, 6.5 и выше.
    Ну и еще один момент - с некоторых пор в ImageMagick по умолчанию отсутствует поддержка формата JPEG - ее надо ставить отдельно. Про это читайте здесь.

    Тему считаю закрытой.
    Спасибо всем, кто помог, то-есть мне ;)
     
  4. Holger Dee Assuran

    Holger Dee Assuran Гость

    В результате, код будет выглядеть так:
    Код (Text):
    use Image::Magick;
    my $IMG = Image::Magick->new;
    $IMG->Read(%filename%);
    $IMG->Distort('virtual-pixel' => "transparent", 'method' => "Perspective", 'points' => [0,0, 60,0, 0,86, 0,86, 110,86, 110,86, 110,0, 80,0]);
    $IMG->Write(%outfilename%);
    Ну и на вкусненькое, в параметр points передается массив float значений. Четыре пары координат описывающих углы области на картинке и их смещение при трансформации. Таким образом, значения приведенные в примере, при исходной картинке 110х86, означают следующее:
    0,0, 60,0, - левый верхний угол изображения сместить на 60 пикселей вправо по оси X
    0,86, 0,86 - левый нижний угол оставить на месте
    110,86, 110,86 - правый нижний угол оставить на месте
    110,0, 80,0 - правый верхний угол сместить на 30 пикселей влево по оси X

    Теперь тему можно действительно закрыть, я полностью ответил на свой вопрос.
     
  5. vital

    vital Больной Компом Детектед
    Команда форума Web Team

    Регистрация:
    29 янв 2006
    Сообщения:
    2.474
    Симпатии:
    27
    Спасибо=)
     
Загрузка...

Поделиться этой страницей