好的,所以我在谷歌搜索和阅读评论后改变了我的代码。
但是现在得到这个错误
警告:imagecopyresampled():提供的参数不是有效的Image资源 /home/realcas/public_html/eshop/ecms/system/classes/photofetch.php on 第51行PNGIHDRâI¯警告:imagepng()[function.imagepng]: gd-png:致命的libpng错误:zlib错误 /home/realcas/public_html/eshop/ecms/system/classes/photofetch.php on 第54行
警告:imagepng()[function.imagepng]:gd-png错误:setjmp返回 错误情况 /home/realcas/public_html/eshop/ecms/system/classes/photofetch.php on 第54行
警告:无法修改标头信息 - 已发送的标头 (输出始于 /home/realcas/public_html/eshop/ecms/system/classes/photofetch.php:51) 在/home/realcas/public_html/eshop/ecms/system/classes/photofetch.php 在第55行
这是新代码
<?
include_once('database.php');
//Fetch basic Profile
class fetchphoto extends Database{
public function countrysize($id){
$this->id = $id;
$array=preg_split('#(?<!\\\)\:#',$this->id);
if($array[1] == "9177156176671")
{
$max_width = 226;
$max_height = 3000;
}
$sth = mysql_query("SELECT categoryimage FROM shop_categories WHERE id = '".$array[0]."'");
while($r = mysql_fetch_assoc($sth)) {
$blobcontents = $r["categoryimage"];
$im = imagecreatefromstring($blobcontents);
$x = imagesx($im);
$y = imagesy($im);
$ratioh = $max_height/$y;
$ratiow = $max_width/$x;
$ratio = min($ratioh, $ratiow);
// New dimensions
$width = intval($ratio*$x);
$height = intval($ratio*$y);
// Temporarily increase the memory limit to allow for larger images
ini_set('memory_limit', '32M');
// create a new blank image
$newImage = imagecreatetruecolor($width, $height);
// Copy the old image to the new image
imagecopyresampled($newImage, $img, 0, 0, 0, 0, $width, $height, $w, $y);
// Output to a temp file
imagepng($newImage, null, 10);
header('Content-type: image/png');
return $newImage;
// Free memory
imagedestroy($newImage);
}
}
}
$fetchpicture = new fetchphoto();
$fetchpicture->Connect();
$fetchpicture->DB();
$fetchpicture->countrysize($_GET['pic']);
$fetchpicture->CloseDB();
?>
答案 0 :(得分:0)
您不清楚自己遇到的问题是什么。提供有关问题的更多细节将有所帮助。
话虽如此,你的Content-Type标题是问题吗?在您的代码段中,您应该Content-Type: <span class="posthilit">image</span>/png
时传递Content-Type: image/png
。
此外,在将图片发送给客户之前,您似乎正在销毁图片 - 请在致电imagedestory($im)
后尝试移动imagepng($im, null, 300)
。
请务必检查您的返回值! imagecopyresampled
可以在成功时返回true
,在失败时返回false
,这可以帮助您缩小失败的部分范围。
编辑:正如Korvin Szanto所说,您还需要将imagealphablending设置为true。
您的新代码中注意到了一些事情:
$im
创建变量imagecreatefromstring
,但稍后在调用$img
时使用imagecopyresampled
。imagecopyresampled
时,您使用变量$w
时应该是$x
。imagecopyresampled
发现问题。imagedestroy
。一旦你的函数返回,它就不会执行 - 所以你的图像永远不会被破坏。此外,您还需要销毁原始PNG - 因此请在返回声明之前添加imagedestroy($im)
。