2012-08-03 51 views
0

當我在圖像所在的同一文件夾中使用imagick基礎的php腳本,並使用文件名輸出完美時,它會輸出PDF第一頁的圖像:Imagick使用不同的目錄和數據庫PDF縮略圖JPG

// Read page 1 
$im = new imagick('Miami_Guide.pdf[0]'); 
// Convert to png 
$im->setImageFormat("png"); 
// Send out 
header("Content-Type: image/png"); 
echo $im; 

以下是挑戰:我如何將此腳本移動到不同的目錄並使用名爲$從數據庫記錄上傳的字段名替代?我試過,但沒有奏效:

$path: '../../otherplace/'; 
// $uploaded is the field with the filename value 
$fileloc: $path . $uploaded; 
// Read page 1 
$im = new imagick('$fileloc[0]'); 
// Convert to png 
$im->setImageFormat("png"); 
// Send out 
header("Content-Type: image/png"); 
echo $im; 

我得到一個「致命錯誤:未捕獲的異常‘ImagickException’有消息‘無法讀取文件:$ fileloc’在/ home /用戶/的public_html /目錄/folder/script.php:334堆棧跟蹤:#0 /home/user/public_html/dir/folder/script.php(334):Imagick - > __ construct('$ fileloc')#1/home/user/public_html/DIR /文件夾/ script.php的(226):show_record(陣列)#2 {主}拋出/home/user/public_html/dir/folder/script.php上線334

還試圖PATHINFO()和致死性錯誤再次

我做了一些調整,但現在Imagick返回gibb erish而不是圖像:

$sourcePath = 'dir/folder/'; // Path of original image 
$sourceUrl = 'http://www.site.com/'; 
$thumbPath = $sourcePath; // Writeable thumb path 
$thumbUrl = $sourceUrl . $thumbPath . $uploaded ; 
$im = new Imagick($thumbUrl); 
$im->setImageFormat("jpg"); 
$im->thumbnailImage(100, 100); 
header("Content-type: image/jpg"); 
echo "$im"; 

「沒有錯誤」,但輸出亂碼,而不是像:

ÿÛCÿÀdd 「!ÿÄÿÄ91」 #A2QVh'•|Ôä$ WAQ±ÓÿÄÿÄ)1QQ「A'Òar 「¡阿玉Íkßμ+¾; E =oÕÜŽW#ü-ÙænÝ»ë'çOo'OÒÝr2_^¬ÇiÓFãaR> 5 $ O〜\'0#¢ - ·©ÕuμðGMXÍ«ùÛæÿÃ'g§lfÍ,Ø」蘇* ¥AW「H‡/ QK,=Ýržzï->〜AOUTƒÔ«á3žŽÃ<¶s8yd「4-ݤ®§,ÇqW¼ºÎ£

任何幫助?

回答

0

你的第一個例子不工作的原因是因爲你有單引號,不是雙引號中的變量。

此:

$im = new imagick('$fileloc[0]'); 

告訴ImageMagick的尋找一個名爲$fileloc文件,這當然是不存在的。

做到這一點,而不是:

$im = new imagick("$fileloc[0]"); 

至於你的第二個例子,我相信你有問題,因爲某種原因,你已經把$im引號內,當你echo它。你應該呼應它,你在你的工作測試的方式相同:

echo $im; 

echo "$im"; 
+0

謝謝戈登,但它沒有工作 – cchap 2012-08-08 19:38:23

+0

它有什麼區別?你現在輸出什麼? – 2012-08-08 19:44:32

+0

我剛發佈的解決方案:echo「」; – cchap 2012-08-08 19:49:08

0

這裏是解決方案:的

代替:

echo $img; 

你應該回聲:

echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />"; 

這解決了我的Imagick問題,我希望它能幫助別人。

我確定的一件事是測試基礎:test.pdf> test.jpg,也進行了測試:test.pdf> test.png,test.pdf> test.tiff - 一旦我確定所有擴展名在代表中,工作正常,我轉移到不同的目錄並從其他地方拉取文件。

附圖的所有步驟:

1-安裝imagick(PHP) - 我相信這是devel的

2-路徑設置爲文件通HTTP://

3-其餘幾乎是Imagick的基本知識:

$pdfUrl = "http://www.site.com/dir/$file"; 
$img = new Imagick($pdfUrl); 
$img->setImageFormat("jpeg"); 
echo "<img src='data:image/jpg;base64,".base64_encode($img)."' />"; 
+0

這並沒有完成你最初設定的任務,即發送圖像。在這裏,你發送一個嵌入了圖像的html代碼片段,這根本不是一回事。 – 2012-08-08 19:54:03

+0

我知道,但自從3天后試圖找到一個有點類似的解決方案,這解決了我的需求 - echo $ im;或回聲「$ im」; - 都導致亂碼和標題(「Content-type:image/jpg」);正在解決與代表錯誤 – cchap 2012-08-08 20:06:57

+0

足夠公平,無論我想要的作品。 – 2012-08-08 20:13:01