水印后的照片色彩损失

时间:2012-07-29 04:32:38

标签: php

有一些出牙问题给照片添加水印。这一切都很好,除了水印照片的颜色变得比它们应该更暗淡 - 事实上非常明显。

我正在使用 imagecopyresized 来进行水印,因为这特别允许我使用PNG-24水印,而其他人则没有。我知道颜色通常没问题,因为我刚刚使用 readfile($ url)作为测试,而且照片非常完美。

这是我的剧本:

<?php

// get parent and watermark images & sizes
$image = imagecreatefromjpeg($url);
$imageSize = getimagesize($url);
$watermark = imagecreatefrompng('watermark.png');
$watermark_o_width = imagesx($watermark);
$watermark_o_height = imagesy($watermark);

// calculate new watermark width and position
if ($imageSize[0] > $imageSize[1] || $imageSize[0] == $imageSize[1]) {
    $leftPercent = 23;
} else {
    $leftPercent = 7;
}
$leftPixels = ($imageSize[0]/100)*$leftPercent;
$newWatermarkWidth = $imageSize[0]-$leftPixels;
$newWatermarkHeight = $watermark_o_height * ($newWatermarkWidth / $watermark_o_width);

// place watermark on parent image, centered and scaled
imagecopyresized(
    $image,
    $watermark,
    $imageSize[0]/2 - $newWatermarkWidth/2,
    $imageSize[1]/2 - $newWatermarkHeight/2,
    0,
    0,
    $newWatermarkWidth,
    $newWatermarkHeight,
    imagesx($watermark),
    imagesy($watermark)
);

// print
imagejpeg($image);

// destroy
imagedestroy($image);
imagedestroy($watermark);

?>

如何阻止这种情况发生?我正在阅读 imagecreatetruecolor ,这是否解决了这个问题?我正在谷歌搜索“imagecreatetruecolor色彩损失照片”和变化,但没有人真正谈论这个问题。如果我确实需要这个功能,我会把它添加到这个脚本中吗?

这对我来说完全抛出了一个扳手,并希望有人告诉我在哪里坚持它(不是字面意思)。

这是色彩损失的一个例子。预览图像应与缩略图完全相同。缩略图是使用 readfile()创建的,而预览是使用 imagecreatefromjpeg imagecopresized 创建的。

enter image description here

2 个答案:

答案 0 :(得分:2)

通过使用与图像相同的特性,此示例代码可以正常工作:

原始JPG:深色背景;美丽的女孩;红色礼服。 水印PNG:透明背景;文本;灰色。

<?php

// Path the the requested file (clean up the value if needed)
$path = $url;

// Load image
$image = imagecreatefromjpeg($path);
$w = imagesx($image);
$h = imagesy($image);

// Load watermark
$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);

// Merge watermark upon the original image (center center)
imagecopy($image, $watermark, (($w/2)-($ww/2)), (($h/2)-($wh/2)), 0, 0, $ww, $wh);

// Output the image to the browser
header('Content-type: image/jpeg');
imagejpeg($image);

// destroy both images
imagedestroy($image);
imagedestroy($watermark);

// kill script
exit();

?>


左:输出图像|右:原始图像

Screen Shot

注意:

输出图像被压缩几次,直到:原始 - &gt; PHP输出 - &gt; GIMP - &gt;这里

答案 1 :(得分:0)

经过大量测试后,我得出结论,PHP的GD Image不支持正在加水印的图像上的颜色配置文件。我现在正在使用Imagick,颜色也很完美。