当我调整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:
还有其他解决方案吗?我错过了alpha混合的东西吗?为什么这对其他人有用,但对我来说却彻底失败了?我正在使用MAMP 2.1.3和PHP 5.3.15。
答案 0 :(得分:9)
"They have not worked at all and I'm not sure why."
你一定做错了。来自链接副本的代码添加了几行以加载并保存图像:
$im = imagecreatefrompng(PATH_TO_ROOT."var/tmp/7Nsft.png");
$srcWidth = imagesx($im);
$srcHeight = imagesy($im);
$nWidth = intval($srcWidth / 4);
$nHeight = intval($srcHeight /4);
$newImg = imagecreatetruecolor($nWidth, $nHeight);
imagealphablending($newImg, false);
imagesavealpha($newImg,true);
$transparent = imagecolorallocatealpha($newImg, 255, 255, 255, 127);
imagefilledrectangle($newImg, 0, 0, $nWidth, $nHeight, $transparent);
imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight,
$srcWidth, $srcHeight);
imagepng($newImg, PATH_TO_ROOT."var/tmp/newTest.png");
制作图片:
即。这个问题(和答案)完全重复。
答案 1 :(得分:-2)
我使用了simpleImage类来调整图像大小。 您可以通过保持纵横比来重新调整图像大小。 这个类使用 imagecreatetruecolor 和 imagecopyresampled 核心Php函数来重新调整图像大小
$new_image = imagecreatetruecolor($width, $height);
imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
$this->image = $new_image;
在http://www.white-hat-web-design.co.uk/blog/resizing-images-with-php/
找到完整的代码