2015-02-03 2 views
0

IMagick의 API에 CLI 명령을 번역 : 컨텍스트에 대한PHP Imagick의 API 내가 PHP를 명령 IMagick이 방법에 ImageMagick이 간부 명령을 변경하려고

public function colortone($input, $color, $level, $type = 0) 
{ 
    $args[0] = $level; 
    $args[1] = 100 - $level; 
    $negate = $type == 0? '-negate': ''; 

    $this->execute("convert 
    {$input} 
    (-clone 0 -fill '$color' -colorize 100%) 
    (-clone 0 -colorspace gray $negate) 
    -compose blend -define compose:args=$args[0],$args[1] -composite 
    {$input}"); 
} 

는,이 방법이에서 가져옵니다은 만드는 방법에 대한 자습서를 nettuts Instagram iamge filters : http://code.tutsplus.com/tutorials/create-instagram-filters-with-php--net-24504

저는 하루 동안 벽돌 벽에 머리를 대고 있었지만, 제대로 작동하지 않는 것 같습니다. 나는 이미지 조작이 어떻게 작동 하는지를 잘 이해하지 못하고 있으며, PHP로 변환 할 수 있기 위해 무엇이 이루어지고 있는지를 이해하지 못하기 때문에 실패 할 수 있습니다. 내가 함께 ... colorizeIt 방법은 위에 사용되는 다음

public function colortone($color, $level, $type = 0){ 
    $args[0] = $level; 
    $args[1] = 100 - $level; 
    $this->_image = new Imagick(); 
    $this->_image->setOption('compose:args', $args[0] . 'x' . $args[1]); 
    $this->_image->readImage($image_loc); 


    $negate = $type == 0 ? TRUE : FALSE; 

    $this->_image->setImageColorspace (Imagick::COLORSPACE_RGB); 
    $_image_clone_1 = clone $this->_image; 
    $_image_clone_1 = $this->colorizeIt($_image_clone_1, $color, 1.0); 

    $_image_clone_2 = clone $this->_image; 
    $_image_clone_2->setImageColorspace(Imagick::COLORSPACE_GRAY); 
    if($negate) 
     $_image_clone_2->negateImage(0); 

    $this->_image->compositeImage($_image_clone_1, Imagick::COMPOSITE_BLEND, 0, 0); 
    $this->_image->compositeImage($_image_clone_2, Imagick::COMPOSITE_BLEND, 0, 0); 
} 

왔어요 무엇

입니다

public function colorizeIt($image_obj, $color, $alpha = 1){ 
    $draw = new ImagickDraw(); 
    $draw->setFillColor($color); 

    if (is_float($alpha)) 
     $draw->setFillAlpha($alpha);   

    $geometry = $image_obj->getImageGeometry(); 
    $width = $geometry['width']; 
    $height = $geometry['height']; 

    $draw->rectangle(0, 0, $width, $height); 

    $image_obj->drawImage($draw); 
    return $image_obj; 
} 
(그것은 colorizeImage 기본 IMagick 방법은 약간의 흉상 것을 보인다) 여기

원하는 결과와 실제 결과 내 PHP 코드를 다음에, 원래의 이미지가 저를주고있다 :

Original Image

And what I'm getting...

당신이 볼 수 있듯이

Desired Result

6,, 뭔가 잘 진정 borked된다. 어떤 도움을 많이 주시면 감사하겠습니다!

나는 당신의 명령 줄 버전을 촬영하고 난 당신의 코드가를 만듭니다이 명령 줄 생각대로 매개 변수에 넣어 가지고
+0

당신은'+ 추가 그래서,이 같은 IM 명령의 중간에 file' 쓸 수 요 당신의 중간 이미지를 명령 행에서 PHP로 생성 된 이미지와 비교할 수 있습니다 ... 'convert image.jpg \ (+ clone -colorspace gray + write temp1.png \) \ (+ clone ... + write temp2.png. ..' –

+0

당신의'args' 매개 변수가 잘못되었습니다 ... 왜'setOption()에서'$ arg1'과'$ arg2'를 사용하여'$ args [0]'과'$ args [1])'- 그런 다음 다시 사용하지 않습니까? –

+0

여기에 표시된 코드는 상황에 맞지 않습니다. 편집 했으므로 의미가 있습니다. args에 대해 잊어 버렸습니다 - 지금 고칠 것입니다. – Ste77

답변

1

:

convert http://i.stack.imgur.com/vqWqd.jpg   \ 
    \(-clone 0 -fill "#330000" -colorize 100% \) \ 
    \(-clone 0 -colorspace gray -negate \)  \ 
    -compose blend -define compose:args=100x0 -composite output.jpg 

을하고 그 결과가 이것이다 :

enter image description here

버전 : ImageMagick를 6.9.0-3 Q16 x86_64에 2015년 1월 15일는 http://www.imagemagick.org

+0

감사 마크는 기준선을 갖는 데 도움이됩니다. – Ste77

관련 문제