为什么这个图片不起作用?

时间:2014-05-02 23:32:17

标签: php gd openerp

image_small.php如下所示:

<?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为资源,字符串为

2 个答案:

答案 0 :(得分:2)

我认为您的数据库包含base64编码的图像数据。

尝试将代码更改为

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

并查看输出是否发生变化。

答案 1 :(得分:1)

错误非常明确,imagepng需要资源。简单来说,想象一个资源作为一个对象,你不能从中知道这个类。事实上,GD是用C语言开发的,而PHP包装了所有未知的 C结构内部资源。

因此,在使用gd-family函数之前,您需要让GD为您创建此资源。如果您将图像存储为原始图像,则会将其生成,并且需要使用imagecreatefromstring函数。

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