Изместване на наклон на изображение с помощта на ImageMagick в PHP

Имам команда, която мога да изпълня от командния ред, за да преместя изображение с накланяне с помощта на Imagemagick:

convert \( myimage.jpg -gamma 0.75 -modulate 100,130 -contrast \) \( +clone -sparse-color Barycentric "0,0 black 0,%h white" -function polynomial 4,-4,1 -level 0,50% \) -compose blur -set option:compose:args 5 -composite myimage.jpg

Бих искал да мога да възпроизведа ефекта от тази команда с помощта на библиотеката imagemagick на PHP. Първите части на командата са лесни за възпроизвеждане, но имам проблеми с разбирането на sparse-color и аргументите след него. Досега имам:

$image = new imagick("myimage.jpg")
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);

Благодаря!


person Vijay Boyapati    schedule 19.06.2012    source източник
comment
Изглежда, че досега не сте опитвали нищо за превключване на наклона, нали? Има ли обещаващи кандидати в списъка с функции на imagemagick?   -  person hakre    schedule 19.06.2012
comment
Здравей Hakre, заседнах при възпроизвеждането на последната част от командния ред, който използвах: ( +clone -sparse-color Barycentric 0,0 black 0,%h white -function polynomial 4,-4,1 -level 0,50% ) -compose blur -set option:compose:args 5 -composite Проблемът, който имам е, че документацията за библиотеката Imagemagick в PHP е много оскъдна и няма никакви примери за например sparseColor   -  person Vijay Boyapati    schedule 19.06.2012
comment
Да, потребителите все още трябва да добавят примери там. Ако можем да създадем хубав пример тук, можем да го добавим по-късно към страницата с ръководство. Също така ми е трудно да намеря функцията за приспособяване за някои от параметрите на командния ред.   -  person hakre    schedule 20.06.2012
comment
Да, звучи добре. Ако го накарам да работи, ще прехвърля знанията и към документите за PHP imagick.   -  person Vijay Boyapati    schedule 20.06.2012


Отговори (3)


Предполагам, че имате предвид примерите, намерени тук:

http://www.imagemagick.org/Usage/photos/

С това казано, опитвам се да постигна същото с PHP Imagick. Използвам PHP Imagick 3.0.1 и ImageMagick 6.7.4-4 2012-01-09 Q16 в Linux.

Изглежда, че композитният режим на размазване е недокументиран. Намерих го, като прегледах източника на ImageMagick под magick/composite.h на ред 88.

Този код изпълнява това, което търсите:

$im = new Imagick();
$im->readImageBlob(file_get_contents($src));
$qr = $im->getQuantumRange();
$qr = $qr['quantumRangeLong'];
$im->sigmoidalContrastImage(true, 10, $qr / 2, Imagick::CHANNEL_ALL);
$blurmap = new Imagick();
$blurmap->setOption('compose:args', '5');
$blurmap->newPseudoImage($im->getImageWidth(), $im->getImageHeight(), 'gradient:black-white');
$blurmap->functionImage(Imagick::FUNCTION_POLYNOMIAL, array(4.5, -4.5, 1));
$blurmap->levelImage(0, 1, $qr / 2);
$im->compositeImage($blurmap, 57, 0, 0);
$blurmap->destroy();

Ако имате нужда от повече размазване, просто променете compose:args на 10 или нещо подобно. Едно нещо, което разбрах, беше, че трябва да задам опцията, преди да създам/заредя нещо в самата пръчка.

Не можах да накарам функцията SparseColorImage() да се държи както в командния ред, въпреки че съм сигурен, че някой друг може да допринесе за тази част, ако го разбере. Горното е достатъчно за моите нужди.

РЕДАКТИРАНЕ: При по-нататъшна проверка на генерираните изображения забелязах, че дори черните части на картата на размазването са замъглени. След известно търсене изглежда, че това произтича от грешка, въведена в ImageMagick. Преминах към версия 6.7.8-1 2012-07-05 Q16 и картата на замъгляване вече изглежда работи. Ако забележите нежелано замъгляване с композита за размазване, предлагам ви да надстроите своя ImageMagick.

person tbjers    schedule 05.07.2012

Успех на теб Виджай - препоръчвам ти да се придържаш към exec()

Както и да е, току-що опитах и ​​моят код е по-долу; можете да видите някои промени, които направих и се отказах с грешка на реда: $new->functionImage (FUNCTION_POLYNOMIAL, $functionImagearray);

// Did not like the %h
// $sparseColorarray = array( 0, 0, black, 0, %h, white );
$sparseColorarray = array( 0, 0, black, 0, 20, white );
$functionImagearray = array( 4, -4, 1 );
$image = new imagick("output3.jpg");
$image->gammaImage(0.75);
$image->modulateImage(100,130,100);
$image->contrastImage(1);
//$new = $image->clone(); 
$new = clone $image; 
$new->sparseColorImage( Imagick::SPARSECOLORMETHOD_BARYCENTRIC, $sparseColorarray );
$new->functionImage ( Imagick::FUNCTION_POLYNOMIAL, $functionImagearray );
// Did not like the %
// $new->levelImage( 0, 50% );
$new->levelImage( 0, 50 );
// Can not find any options for this blur
$image->setImageCompose ( BLUR );
$image->setOption( args, 5);
$image->compositeImage( $new, COMPOSITE_BLEND, 0, 0 );
$image->writeImage( "tilt.jpg" );
$image->destroy();

Четейки документацията и следвайки вашия примерен код, това е, което измислих. Също така не можах да намеря опциите за $image->setImageCompose ( BLUR );

Би било интересно да видим дали някога ще го накарате да работи.

Току-що разбрах, че моята версия на Imagick е твърде стара за functionImage

Променен ред $new->functionImage

person Bonzo    schedule 19.06.2012

Нямам голям опит с ImageMagick, но вярвам, че има функция, еквивалентна на sparse-color Barycentric, която може да бъде намерена в документацията тук.

Трябва да изглежда нещо като:

$image -> sparseColorImage(int SPARSECOLORMETHOD_BARYCENTRIC (integer), 
                           array $arguments [, int $channel = CHANNEL_DEFAULT ])

FUNCTION_POLYNOMIAL и други константи на метода/константи на канала могат да бъдат намерени тук за бъдещи справки!

Замъгляването по Гаус се обработва чрез добавяне на:

$image -> gaussianBlurImage ( float $radius , 
                              float $sigma [, int $channel = CHANNEL_ALL ] )

Разбира се, всички те са много общи, но можете да се забъркате, за да получите вида и усещането, които искате.

Надявам се това да помогне!

Мейсън

person MasonWinsauer    schedule 19.06.2012
comment
Здравей Мейсън - за съжаление това не помага много. Прочетох документацията за библиотеката ImageMagick. Търся конкретните команди. По-специално, това не работи за мен: $coords = array(0,0,0,$image-›getImageHeight()); $image-›sparseColorImage(imagick::SPARSECOLORMETHOD_BARYCENTRIC, $coords); - person Vijay Boyapati; 20.06.2012
comment
Какъв тип грешки, ако има такива, дава ли, когато опитате това? Единственото нещо, което мога да си представя, че се обърка там, е предаденият масив от координати. Моделът за необходимия масив е 'array(1,1, 2, 45)', но това всъщност е докъдето се простира моята експертиза... - person MasonWinsauer; 20.06.2012