PHP GD透明PNG黑条问题
PHP GD Transparent PNG black bars issue
我正在开发一个 PHP 脚本,它可以减小图像文件的大小,并且它可以完美地处理 JPEG 图像。但是,当上传 PNG 图像时,结果图像中会出现一些奇怪的黑条。
这是一个例子:
函数调用如下:
compress_image($_FILES["pic"]["tmp_name"], $folder_path . "/" . $pic_new_name, 50);
函数代码如下:
//function for compressing and storing image
function compress_image($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source_url);
elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source_url);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source_url);
imagejpeg($image, $destination_url, $quality);
return;
} ?>
这个问题有任何解决方案或解决方法吗?
嗯,我很惊讶在将近 5 小时后只有 8 人查看了 post。反正我自己解决了:D
希望对大家有所帮助
这是正确压缩和处理 PNG 图像并将其转换为白色背景的 JPEG 的完整函数:
//function for compressing and storing image
function compress_image($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
$w = $info[0];
$h = $info[1];
if ($info['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($source_url);
imagejpeg($image, $destination_url, $quality);
}
elseif ($info['mime'] == 'image/gif') {
$image = imagecreatefromgif($source_url);
imagejpeg($image, $destination_url, $quality);
}
elseif ($info['mime'] == 'image/png') {
$image = imagecreatefrompng($source_url);
$image_p = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($image_p, 0xFF, 0xFF, 0xFF);
imagealphablending($image_p, false);
ImageSaveAlpha($image_p, true);
ImageFill($image_p, 0, 0, $white);
imagealphablending($image_p, true);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $w, $h, $w, $h);
imagejpeg($image_p, $destination_url, $quality);
}
return;
我正在开发一个 PHP 脚本,它可以减小图像文件的大小,并且它可以完美地处理 JPEG 图像。但是,当上传 PNG 图像时,结果图像中会出现一些奇怪的黑条。
这是一个例子:
函数调用如下:
compress_image($_FILES["pic"]["tmp_name"], $folder_path . "/" . $pic_new_name, 50);
函数代码如下:
//function for compressing and storing image
function compress_image($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
if ($info['mime'] == 'image/jpeg')
$image = imagecreatefromjpeg($source_url);
elseif ($info['mime'] == 'image/gif')
$image = imagecreatefromgif($source_url);
elseif ($info['mime'] == 'image/png')
$image = imagecreatefrompng($source_url);
imagejpeg($image, $destination_url, $quality);
return;
} ?>
这个问题有任何解决方案或解决方法吗?
嗯,我很惊讶在将近 5 小时后只有 8 人查看了 post。反正我自己解决了:D
希望对大家有所帮助
这是正确压缩和处理 PNG 图像并将其转换为白色背景的 JPEG 的完整函数:
//function for compressing and storing image
function compress_image($source_url, $destination_url, $quality) {
$info = getimagesize($source_url);
$w = $info[0];
$h = $info[1];
if ($info['mime'] == 'image/jpeg') {
$image = imagecreatefromjpeg($source_url);
imagejpeg($image, $destination_url, $quality);
}
elseif ($info['mime'] == 'image/gif') {
$image = imagecreatefromgif($source_url);
imagejpeg($image, $destination_url, $quality);
}
elseif ($info['mime'] == 'image/png') {
$image = imagecreatefrompng($source_url);
$image_p = imagecreatetruecolor($w, $h);
$white = imagecolorallocate($image_p, 0xFF, 0xFF, 0xFF);
imagealphablending($image_p, false);
ImageSaveAlpha($image_p, true);
ImageFill($image_p, 0, 0, $white);
imagealphablending($image_p, true);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $w, $h, $w, $h);
imagejpeg($image_p, $destination_url, $quality);
}
return;