0

我有这个接收上传图像的 PHP 脚本。上传的图像保存在临时文件夹中,然后此脚本重新采样图像并将其保存到正确的文件夹中。用户可以上传 JPG、PNG 或 GIF 文件。该脚本仅适用于 JPG 文件。

我将如何修改此脚本以调整 PNG 和 GIF 的大小而不会失去透明度?

$targ_w = $targ_h = 150;
$jpeg_quality = 90;

$src = $_POST['n'];
$img_r = imagecreatefromjpeg($src);
$dst_r = ImageCreateTrueColor( $targ_w, $targ_h );

$new_src = str_replace('/temp','',$_POST['n']);

imagecopyresampled($dst_r,$img_r,0,0,$_POST['x'],$_POST['y'],
$targ_w,$targ_h,$_POST['w'],$_POST['h']);

imagejpeg($dst_r,$new_src,$jpeg_quality);
4

2 回答 2

1

JPEG 图像不能有透明背景。

相反,您可以根据以下内容制作图像imagesavealpha()

$targ_w = $targ_h = 150;
$newImage = imagecreatetruecolor($targ_w, $targ_h);
imagealphablending($newImage, false);
imagesavealpha($newImage, true);
$transparent = imagecolorallocatealpha($newImage, 255, 255, 255, 127);
imagefilledrectangle($newImage, 0, 0, $targ_w, $targ_h, $transparent);

$src = $_POST['n'];
$img_r = imagecreatefromstring(file_get_contents($src));
$img_r_size = getimagesize($src);

$width_r = $img_r_size[0];
$height_r = $img_r_size[1];
if($width_r > $height_r){
    $width_ratio = $targ_w / $width_r;
    $new_width   = $targ_w;
    $new_height  = $height_r * $width_ratio;
} else {
    $height_ratio = $targ_h / $height_r;
    $new_width    = $width_r * $height_ratio;
    $new_height   = $targ_h;
}

imagecopyresampled($newImage, $img_r, 0, 0, 0, 0, $new_width, $new_height, $width_r, $height_r);

$new_src = str_replace('/temp','',$_POST['n']);
imagepng($newImage, $new_src);

它将从 PNG 和 GIF 制作一个 PNG(具有透明背景,并调整为 150x150。

这只是一个示例,因为它不限制比例。

于 2012-09-28T08:02:28.620 回答
0

几个月前我遇到了这个问题,并通过使用以下代码解决了这个问题:

imagealphablending($target_image, false);
imagesavealpha($target_image, true);
于 2012-09-28T08:03:13.413 回答