2012-11-14 48 views
1

我試圖創建與下面的代碼ImageMagick的一個PNG。問題寫文字到圖像使用PHP的ImageMagick

<?php 
/* Create some objects */ 
$image = new Imagick(); 
$draw = new ImagickDraw(); 
$pixel = new ImagickPixel('gray'); 

/* New image */ 
$image->newImage(800, 75, $pixel); 

/* Black text */ 
$draw->setFillColor('black'); 

/* Font properties */ 
$draw->setFont('Oxin_free_promo.ttf'); 
$draw->setFontSize(30); 

/* Create text */ 
$image->annotateImage($draw, 10, 45, 0, 'The quick brown fox jumps over the lazy dog'); 

/* Give image a format */ 
$image->setImageFormat('png'); 

/* Output the image with headers */ 
header('Content-type: image/png'); 
echo $image; 

但是我不斷收到下面的錯誤。/usr/local/zend/tmp /被chmod改爲777,並由守護進程擁有:zend和magick- *不存在。有任何想法嗎?

httpd: FreeType library is not available `/Users/gareth.williams/Sites/_tests/texttoimg/Oxin_free_promo.ttf'. 
httpd: Postscript delegate failed `/usr/local/zend/tmp/magick-tmfNBDIx': No such file or directory. 
PHP Fatal error: Uncaught exception 'ImagickException' with message 'Unable to annotate image' 
+0

沒有你的網站服務器的用戶ID必須對../tmp文件夾的寫權限? –

+0

試試這個:sudo chmod 777/usr/local/zend/tmp/ – aykut

+0

在更改服務器設置之前,您應該嘗試找出Imagick創建臨時文件的原因,而不是僅在內存中工作! – emartel

回答

2

看看給出的錯誤信息,它說那裏有問題。

「FreeType庫不可用」 - ImageMagick的使用FreeType庫渲染字體,你給它一個TTF使用,它說沒有安裝FreeType的,所以它不能使用的字體。安裝FreeType,然後重新安裝/重新編譯ImageMagick以獲得FreeType支持。

第二個錯誤可能是ImageMagick的努力退回到渲染利用其後記光柵化支持的字體,通常這是通過ghostscript (gs),因此「後記委託失敗」。無論ghostscript不可用,或者臨時文件的路徑,它要求Ghostscript的渲染太/從不可寫。可以通過安裝ghostscript並確保臨時目錄具有完全的寫入權限來修復,正如人們在問題的評論中提到的那樣。

爲了證實這些原因,使用convert的-list選項。

  • convert -list format:這將顯示支持的文件類型,尋找TTF,確保它至少r--狀態,應該說像"TTF* TTF r-- TrueType font (Freetype 2.2.1)"是否正確安裝FreeType的。

  • convert -list delegate:這將顯示委派類型的處理和使用的命令行。它將使用其中一個ps轉換器作爲後備。

正如我說的,最簡單的解決方法是安裝的FreeType,然後重新編譯/重新安裝ImageMagick的。