2015-10-18 1 views
0

Я пытаюсь сделать черепицу/петлю простой pattern-image над canvas-image. Вот соответствующий фрагмент кода.PHP-Imagick: Образ шаблона теряет непрозрачность

$image = new \Imagick(); 
$image->newPseudoImage(700, 400, "canvas:black"); 
$image->setImageFormat("png"); 
$texture = new \Imagick(realpath('pattern.png')); 
$image = $image->textureImage($texture); 
header("Content-Type: image/png"); 
echo $image; 

pattern-image (pattern.png) является титрование по холсту просто отлично, но почему-то кажется, что прозрачность pattern.png перепутались в этом процессе. Вот результат, который я получаю.

not good result


Вот что результат изображения, как ожидается выглядеть.

expected result


На всякий случай, вот var_dump из $texture->getImageProperties();

array (size=8) 
    'date:create' => string '2015-10-18T09:59:01+05:00' (length=25) 
    'date:modify' => string '2015-02-08T20:53:20+05:00' (length=25) 
    'png:IHDR.bit-depth-orig' => string '8' (length=1) 
    'png:IHDR.bit_depth' => string '8' (length=1) 
    'png:IHDR.color-type-orig' => string '0' (length=1) 
    'png:IHDR.color_type' => string '0 (Grayscale)' (length=13) 
    'png:IHDR.interlace_method' => string '0 (Not interlaced)' (length=18) 
    'png:IHDR.width,height' => string '68, 34' (length=6) 

СРЕДЫ:

PHP Version 5.5.12 
Wampserver2.5 
Apache-2.4.9- 
Imagick 3.1.2 
mageMagick 6.8.9-1 Q16 x64 2014-05-08 
Windows 7 : 64 Bit. 

НОТЫ: Хотя я понятия не имею, с чего начать искать, я начал проверять альфа-каналы. Кроме того, другие изображения работают нормально, поэтому это может также быть проблемой, связанной с изображениями. Возможно, что изображение является 8-битным? Мне нужно удалить прозрачность из pattern.png? Если да, то как мне это сделать? Дай мне свои 2 цента :)


ПРОБОВАЛИ ПОКА ЧТО НЕ РАБОТАЮТ:

  • $image->setImageFormat("png24");
  • $texture->setImageAlphaChannel(Imagick::ALPHACHANNEL_DEACTIVATE);
+0

Может быть разница в версии, у меня есть вопрос с моей средой. Поделитесь своей средой и версиями. Imagick, imagemagic, OS и т. Д. Могут помочь найти альтернативные функции. Thnx. – gurung

+0

Похоже, вы получили последнее из всего этого. Какие у меня варианты? – gurung

+0

thnx для обратной связи. – gurung

ответ

0

Ну, по обратной связи в разделе комментариев, кажется, быть проблемой с версией imagick/imagmagick, которую у меня есть. Поскольку мне не разрешалось обновляться, вот альтернатива, которую я придумал, на случай, если кто-то найдет ее полезной.

$pattern = new Imagick(realpath('pattern.png')); // Create a new pattern object 
$pw = $pattern->getImageWidth(); 
$ph = $pattern->getImageHeight(); 

    $draw = new ImagickDraw(); // Create imagickdraw object 
    $draw->pushPattern('pattern', 0, 0, $pw, $ph); // Create a pattern identifier 
    $draw->composite(Imagick::COMPOSITE_OVER, 0, 0, $pw, $ph, $pattern); // Composite the pattern 
    $draw->popPattern(); // Close the pattern 
    $cw = 700; 
    $ch = 400; 

    $draw->push(); 
    $draw->setFillPatternURL('#pattern'); 
    //$draw->setFillColor('yellow'); 
    $draw->rectangle(0, 0, $cw, $ch); 
    $draw->pop(); 

$canvas = new Imagick(); // Create a new canvas object 
$canvas->newImage($cw, $ch, "none"); 
$canvas->drawImage($draw); // Draw the ImagickDraw on to the canvas 
$canvas->setImageFormat('png'); // Set the format to PNG 
header("Content-Type: image/png"); // Output the image 
echo $canvas;