在调整 png 大小时,我已经全面了解如何正确管理 alpha。我设法让它保持透明度,但仅限于完全透明的像素。这是我的代码:
$src_image = imagecreatefrompng($file_dir.$this->file_name);
$dst_image = imagecreatetruecolor($this->new_image_width, $this->new_image_height);
imagealphablending($dst_image, true);
imagesavealpha($dst_image, true);
$black = imagecolorallocate($dst_image, 0, 0, 0);
imagecolortransparent($dst_image, $black);
imagecopyresampled($dst_image, $src_image, 0, 0, 0, 0, $this->new_image_width,
$this->new_image_height, $this->image_width, $this->image_height);
imagepng($dst_image, $file_dir.$this->file_name);
从此源图像开始:
调整大小的图像如下所示:
我看过的关于这个问题的几乎所有论坛帖子的解决方案都说要做这样的事情:
imagealphablending($dst_image, false);
$transparent = imagecolorallocatealpha($dst_image, 0, 0, 0, 127);
imagefill($dst_image, 0, 0, $transparent);
此代码的结果无法保存任何 alpha:
还有其他解决方案吗?我错过了阿尔法混合的东西吗?为什么这对其他人有用,而对我却完全失败?我正在使用 MAMP 2.1.3 和 PHP 5.3.15。