2015-10-18 42 views
0

我想通過canvas-image來平鋪/循環簡單的pattern-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. 

腳註:雖然我不知道從哪裏開始尋找,我已經開始檢查alpha通道。此外,其他圖像工作正常,所以這也可能是圖像特定的問題。也許,這是一個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;