1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. Holger Dee Assuran

    Holger Dee Assuran Гость

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

    Holger Dee Assuran Гость

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

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

    Holger Dee Assuran Гость

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

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

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

    Holger Dee Assuran Гость

    Репутация:
    0
    В результате, код будет выглядеть так:
    Код:
    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

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

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