【发布时间】:2011-03-19 05:36:07
【问题描述】:
我对图像缩放的this discussion 很感兴趣,随后发现我用来从上传的图像创建缩略图的 PHP 代码也遇到了同样的问题。我决定尝试贴在底部附近的 PHP 修复(将 gamma 从 2.2 转换为 1.0,调整图像大小,将 gamma 从 1.0 转换回 2.2)。这可以解决文章中提到的问题,但是对代码的这种修改有一个不幸的副作用,就是破坏了 PNG alpha 通道的透明度。
这是我使用伽玛校正的代码。
<?php
$image = imagecreatefrompng($source_file);
$resized_image = imagecreatetruecolor($new_width, $new_height);
imagealphablending($resized_image, false);
imagesavealpha($resized_image, true);
imagegammacorrect($image, 2.2, 1.0);
imagecopyresampled($resized_image, $image, 0, 0, 0, 0, $new_width, $new_height, $image_width, $image_height);
imagegammacorrect($resized_image, 1.0, 2.2);
imagepng($resized_image, $dest_file);
?>
有谁知道如何调整图像大小,采用伽玛校正技巧,同时保持原始图像的 Alpha 通道透明度?
编辑
示例图片:
- 原始文件 - 具有 Alpha 通道透明度的 PNG
- 已注释掉两个 imagegammacorrect() 函数调用的调整大小文件
- 使用两个 imagegammacorrect() 函数调用调整大小的文件
在您尝试校正 Gamma 之前,您可以看到透明度很好。 (查看透明度的最简单方法是检查包裹在图像周围的段落标签,并通过 FireBug 或类似方法将背景添加到其样式属性中。)
original image http://ender.hosting.emarketsouth.com/images/test-image.png no gamma correction http://ender.hosting.emarketsouth.com/images/test-image-resized-no-gamma.png gamma corrected - no transparency http://ender.hosting.emarketsouth.com/images/test-image-resized.png
【问题讨论】:
标签: php png transparency gd2 gamma