我想通过在jpeg上合并透明png来创建一个jpeg文件。 我试过网&其他问题,但我没有找到我在找什么。 下面的代码在我的本地环境中成功运行,但只要我将它上传到我的服务器[Godaddy/Linux],png的透明背景变成白色,因此覆盖了jpeg。 我曾尝试使用'imagecopyresampled'来代替'imagecopy',建议使用here,但这并不奏效。 我在这里做的事情有错吗?检查服务器GD,它已安装。 任何建议将不胜感激。通过JPEG重叠透明PNG
$dest = imagecreatefromjpeg($jpegFileURL);
$src = imagecreatefrompng($pngFileURL);
list($destWidth, $destHeight) = getimagesize($jpegFileURL);
list($srcWidth, $srcHeight) = getimagesize($pngFileURL);
/***
* create base image
*/
$base_image = imagecreatetruecolor($destWidth,$destHeight);
/***
* make $base_image transparent
*/
imagealphablending($base_image, false);
$col = imagecolorallocatealpha($base_image,255,255,255,127);
imagefilledrectangle($base_image,0,0,$destWidth,$destHeight,$col);
imagealphablending($base_image,true);
imagesavealpha($base_image, true);
/***
* Copy JPEG & then PNG over JPEG
*/
imagecopy($base_image, $dest, 0, 0, 0, 0, $destWidth, $destHeight);
imagecopy($base_image, $src, 0, 0, 0, 0, $srcWidth, $srcWidth);
/***
* Output the file
*/
header('Content-Type: image/jpeg');
imagejpeg($base_image,$urlToSave);
imagedestroy($dest);
imagedestroy($src);
编辑: 这里使用的JPEG和PNG也通过一个脚本,然后我用此合并产生的。
为了确保文件生成不是问题,我通过使用带有透明背景的png进行了测试,该透明背景不是由我的代码生成的,并且工作正常。
因此,我猜这个问题可能来自PNG一代。
Image attached for one that worked.
用于生成png的代码。
$image = imagecreatefromjpeg($fileJpegURL);
imagealphablending($image, true);
$transparentcolour = imagecolorallocate($image, 255,255,255);
imagecolortransparent($image, $transparentcolour);
header('Content-Type: image/png');
imagepng($image, $pngFileSavePath, 1);
试过你的代码片段,在本地完美工作,但在服务器上没有运气。我运行脚本时没有错误。 –
你是否检查过服务器错误日志?通常,生产站点上的“error_reporting”处于关闭状态。 – timclutton
是的,检查php错误日志还检查error_reporting是。记录了其他的php错误,但上面的代码片段运行时没有记录。 –