2014-05-02 47 views
-1

image_small.php看起來是這樣的:爲什麼這個imagepng不工作?

<?php 
$id = (isset($_GET['im'])) ? $_GET['im'] : 0; 

//fetch the image from database 
$query='SELECT image_small FROM hr_employee WHERE id='.$id; 
$result = pg_query($dbconn, $query) or die('Query failed: ' . pg_last_error()); 

$raw = pg_fetch_row ($result ,0) 
$img=$raw['image_small']; 

header("Content-Type: image/png"); 

if(!file_exists($cachefile)) { 
    imagepng($img, $cachefile); 
    imagedestroy($img); 
} 

$fp = fopen($cachefile, 'rb'); 
fpassthru($fp); 
exit; 
?> 

我得到以下錯誤:

imagepng()預計參數1是資源,字符串中給定

+0

它似乎標題(「Content-Type:image/png」);不按預期工作。你可以刪除這條線,看看是否有其他字符? – bksi

+0

您確定GD已激活嗎? –

+0

是的,GD根據phpinfo() –

回答

2

在我看來,就好像你的數據庫包含base64編碼的圖像數據。

試試你的代碼更改爲

$img = base64_decode($raw['image_small']); 

,看看是否輸出變化。

1

錯誤非常明確,imagepng需要一個資源。簡單地說,將資源想象成你不知道課程的對象。實際上,GD是用C語言開發的,並且PHP將資源內部的所有C結構覆蓋了所有未知的

因此,在使用gd-family函數之前,您需要問GD爲您創建此資源。如果你原始地保存了你的圖像,你會得到它原始的,並將需要使用imagecreatefromstring函數。

$gdh = imagecreatefromstring($img); 
imagepng($gdh, $cachefile); 
+0

圖像其在pg表中以bytea格式 –

+0

Bytea格式不是原始二進制文件嗎?我想是的,你只需要使用'imagecreatefromstring'函數就可以了。例如:'$ gdh = imagecreatefromstring($ raw ['image_small']);'然後將'$ gdh'傳遞給'imagepng'函數。 –

+0

我做到了。它不工作。我將在幾個後發佈輸出。 –