JPEG图像使用PHP从PNG转换时全黑

时间:2010-10-26 07:48:26

标签: php image-processing gd

问题:将任何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

2 个答案:

答案 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没有被上传。当执行已经上传过的网址的脚本时,它运行正常。

再次感谢。