【发布时间】:2014-06-02 11:52:37
【问题描述】:
我正在向图像添加透明 PNG 水印。水印是高分辨率的,所以在将其覆盖在原始图像中之前,我调整了它的大小。这似乎在水印中引入了一些我还没有找到避免的方法。
原图:
调整大小的图像(查看字母之间的水平线状“污垢”):
缩放调整大小的图像(不透明)以阐明我所说的字母之间的“污垢”是什么意思。我用选择工具清理了“s”和“t”之间的区域并删除(在新选项卡中打开以查看更清晰的完整尺寸):
这是我正在使用的代码:
function resizeImage($image_filename, $out_filename, $width, $height){
// Get image info
$image_info = @getimagesize($image_filename);
if ($image_info == false) return false;
$org_width = $image_info[0];
$org_height = $image_info[1];
$image_type = $image_info[2];
// Open image
if ($image_type == IMAGETYPE_JPEG) $org_image = @imagecreatefromjpeg($image_filename);
else if ($image_type == IMAGETYPE_GIF) $org_image = @imagecreatefromgif($image_filename);
else if ($image_type == IMAGETYPE_PNG) $org_image = @imagecreatefrompng($image_filename);
else return false;
// Open stream for resized image
$resized_image = @imagecreatetruecolor($width, $height);
if ($resized_image == false) return false;
// Handle transparency in PNGs
if ($image_type == IMAGETYPE_PNG){
$transparent = imagecolorallocatealpha($resized_image, 255, 255, 255, 127);
imagefilledrectangle($resized_image, 0, 0, $width, $height, $transparent);
imagealphablending($resized_image, false);
imagesavealpha($resized_image, true);
}
// Resize
$resize_result = @imagecopyresampled($resized_image, $org_image, 0, 0, 0, 0, $width, $height, $org_width, $org_height);
// Free original image
@imagedestroy($org_image);
// Save
if ($image_type == IMAGETYPE_JPEG) $save_result = imagejpeg($resized_image, $out_filename, 90); // 90 = compression
else if ($image_type == IMAGETYPE_GIF) $save_result = imagegif($resized_image, $out_filename);
else if ($image_type == IMAGETYPE_PNG) $save_result = imagepng($resized_image, $out_filename, 0);
// Free resized image
if ($resize_result) @imagedestroy($resized_image);
return ($resize_result && $save_result);
}
知道是什么导致了伪影吗?
【问题讨论】:
-
我没有看到任何文物?
-
它们不是很明显,但字母之间的 100% 透明区域(在原图中)在调整大小的图像中包含一些模糊的灰色线条/点。
-
是的,没关系,用更好的显示器看照片,它们很明显。