2014-05-02 16 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

我做到了。它不工作。我将在几个后发布输出。 –