问题:将任何PNG图像转换为JPEG时,图像都会变黑。
首先,我搜索了互联网和stackoverflow以了解如何执行此操作。我已经尝试了我在PHP手册和Stack Overflow中找到的所有方法。问题依然存在。我正在使用GD(没有安装ImageMagick)。
我的代码如下。这是对函数的调用:
$tempImage = $dirPath.$filename.$tempMini.".jpg";
createTempImage($sourcefile, $tempImage, $tempMini_width, $tempMini_height, 100);
我已经评论了我尝试过的不同方法。
function createTempImage($sourcefile, $setNewName, $maxwidth, $maxheight, $quality){
$fileInfoArray = getimagesize($sourcefile);
$imagetype = $fileInfoArray['mime'];
if($imagetype == 'image/jpeg'){
$img = imagecreatefromjpeg($sourcefile);
}elseif($imagetype == 'image/gif'){
$img = imagecreatefromgif($sourcefile);
}elseif(($imagetype == 'image/png')||($imagetype == 'image/x-png')){
$img = imagecreatefrompng($sourcefile);
}
$width = imagesx( $img );
$height = imagesy( $img );
if ($width > $maxwidth || $height > $maxheight){
$factor = min(($maxwidth/$width),($maxheight/$height));
$newwidth = round($width*$factor);
$newheight = round($height*$factor);
} else {
$newwidth = $width;
$newheight = $height;
}
$tmpimg = imagecreatetruecolor( $newwidth, $newheight );
imagecopyresampled($tmpimg, $img, 0, 0, 0, 0, $newwidth, $newheight, $width, $height );
imagejpeg($tmpimg, $setNewName, 100);
imagedestroy($tmpimg);
imagedestroy($img);
}
还尝试了以下方法:
$white = imagecolorallocate($tmpimg, 255, 255, 255);
ImageFill($tmpimg, 0, 0, $white);
ImageSaveAlpha($tmpimg, false);
ImageAlphaBlending($tmpimg, false);
$white = imagecolorallocate($tmpimg, 255, 255, 255);
imagefilledrectangle($tmpimg, 0, 0, $newwidth, $newheight, $white);
更新:顶部的黑框是图像结果:http://twitpic.com/30ywf5
答案 0 :(得分:1)
只是几个想法:
$newHeight = $maxheight;
似乎是一个拼写错误,“newheight”在整个代码中拼写没有大写“H”。
确定新尺寸的代码可以大大缩短:
if ($width > $maxwidth || $height > $maxheight){
$factor = min(($maxwidth/$width),($maxheight/$height));
$newwidth = round($width*$factor);
$newheight = round($height*$factor);
}
imagecopyresampled
创建新图片 - 这仅适用于特定的GD版本(“版本2”),否则请尝试使用imagecopyresized
。答案 1 :(得分:0)
我似乎通过从头开始重新创建整个功能来解决问题。谢谢你们的意见。
问题是PNG没有被上传。当执行已经上传过的网址的脚本时,它运行正常。
再次感谢。