2014-05-14 66 views
0

工作,我有一個簡單的轉換的imagemagicks命令行,我想用PHP的Imagick類模仿:PHP Imagick的fxImage並不

convert \("image1.jpg" \) \ 
     \(-size 1x256 gradient:white-black \ 
      -rotate 90 \ 
      -fx "floor(u*10+0.5)/10" \ 
     \) \ 
     "temp1.jpg"` 

那行輸出2個圖像:temp1-0.jpg這只是一個image1.jpg副本和temp1-1.jpg這是這一個:temp1 正如你可以看到它是一個簡單的漸變圖像,使漸變不平滑的效果。這與命令行imagemagick完美配合。

儘管當我嘗試用PHP來模仿該行時,它會完成所有操作,但-fx部分仍然正確。代碼如下:

$canvas = new Imagick(); 
$canvas->newImage(1, 256, "white", "jpg"); 

$gradient = new Imagick(); 
$gradient->newPseudoImage(1, 256, "gradient:white-black"); 
$canvas->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0); 
$canvas->rotateImage(new ImagickPixel(), 90); 
$canvas->fxImage("floor(s*10+0.5)/10"); 

header("Content-Type: image/jpg"); 
echo $canvas; 

就像我說的,它不會重現fx一部分,而是一個正常的白色到黑色的漸變。

我是Imagemagick的新手,但我嘗試過使用該功能應用更簡單的效果u+10,但仍不會看到效果。 我錯過了什麼讓fxImage()正常工作? 是否有這樣的效果的解決方法?

+0

我還沒有使用imagick的特定函數,但我想指出,如果你真的找不到任何方法通過PHP imagick擴展來完成它,你可以調用你在PHP中使用的命令行版本,使用exec。 http://us3.php.net/function.exec – Kai

+0

哦,忘了說我正在一個不允許使用exec()的轉售服務器上工作,因此是Imagick類。 – Thomas

回答

0

它看起來像是Imagick庫中的一個bug - 圖像實際上可用,但是作爲函數的返回值。

$canvas = new Imagick(); 
$canvas->newImage(1, 256, "white", "jpg"); 

$gradient = new Imagick(); 
$gradient->newPseudoImage(1, 256, "gradient:white-black"); 
$canvas->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0); 
$canvas->rotateImage(new ImagickPixel(), 90); 
$fxImage = $canvas->fxImage("floor(s*10+0.5)/10"); 

$fxImage->setImageFormat('jpg'); 
header("Content-Type: image/jpg"); 
echo $fxImage; 

產生具有階梯漸變的圖像。

我在Imagick的github頁面上爲此打開了一個問題。

+0

我記得在舊的PHP bug軌道頁面上閱讀了有關fxImage()的行爲,幸運的是當時我有一個替代方案來重演該效果。無論如何,這就是fxImage的工作方式,我接受它的答案(因爲我現在用這種方式)。關於你的例子有一點:你應該回顯'$ fxImage'(或者在'$ canvas'上編寫'$ fxImage')來正確顯示它。謝謝。 – Thomas

+0

哎呀,謝謝。修復。 – Danack