imagemagick искажает или искажает изображение - PullRequest
4 голосов
/ 13 марта 2012

Ну, как я могу изменить изображение до и после изображения с помощью imagemagick? Это команда -skew или -distort, и как ее можно использовать предпочтительно в typo3 и php?

Любая помощь приветствуется!

before and after

Ответы [ 3 ]

7 голосов
/ 09 апреля 2012

Использование Imagemagick с php и командной строкой:

// Working on the original image size of 400 x 300
$cmd = "before.jpg -matte -virtual-pixel transparent".  
" +distort Perspective \"0,0 0,0  400,0 400,22  400,300 400,320  0,300 0,300 \" "; 
exec("convert $cmd perspective.png");

Примечание: 1 / Это для более поздних версий Imagemagick - оператор перспективы изменился. 2 / Вам нужно использовать + distort not -distort, так как изображение больше, чем границы исходного изображения.

Примеры использования Imagemagick с php на моем сайте http://www.rubblewebs.co.uk/imagemagick/operator.php

4 голосов
/ 13 марта 2012

Искажение перспективы должно дать вам то, что вы хотите.Пример:

convert original.png -matte -virtual-pixel white +distort Perspective '0,0,0,0 0,100,0,100 100,100,90,110 100,0,90,5' distorted.png

В TYPO3 вы можете применить его с помощью (ab), используя SCALE объект GIFBUILDER .Пример:

temp.example = IMAGE
temp.example {  
  file = GIFBUILDER
  file {
    format = jpg
    quality = 100
    maxWidth = 9999
    maxHeight = 9999
    XY = [10.w],[10.h]

    10 = IMAGE
    10.file = fileadmin/original.png

    20 = SCALE
    20 {
      params = -matte -virtual-pixel white +distort Perspective '0,0,0,0 0,100,0,100 100,100,90,110 100,0,90,5'
    }
  }
}
2 голосов
/ 13 марта 2012

Я думаю, вам нужна функция Imagick::shearImage.Это создает квадрат шахматной доски и искажает его в параллелограмм (сохраните его как файл PHP и откройте в браузере, чтобы увидеть):

<?php
$im = new Imagick();
$im->newPseudoImage(300, 300, "pattern:checkerboard");
$im->setImageFormat('png');
$im->shearImage("transparent", 0, 10);
header("Content-Type: image/png");
echo $im;
?>

Внутри более крупного скрипта, чтобы разрезать изображение с именем myimg.png и сохранить его как myimg-sheared.png , вы можете использовать:

$im = new Imagick("myimg.png");
$im->shearImage("transparent", 0, 10);
$im->writeImage("myimg_sheared.png");

Если shearImage не достаточно универсален, вы можете попробовать Imagick::DISTORTION_PERSPECTIVE метод с помощью функции Imagick::distortImage.

...