添加徽标作为水印,水印质量差

时间:2016-12-07 10:54:44

标签: php image gd

我正在使用PHP在图像上添加透明徽标作为水印。然而,在结果中,徽标质量很差(其下的图像质量很高,所以它只是水印)。这是我使用的代码(关于最后3行):

header("Content-Type: image/png");

$photo = imagecreatefromjpeg('photos/'.$photo['image']);
$height = imagesx($photo);
$width = imagesx($photo);
if ($width > $_POST['width']) {
    $r = $width / $_POST['width'];

    $newwidth = $width / $r;
    $newheight = $height / $r;
}
$image = imagecreatetruecolor($width, $height);

$image2 = imagecopyresampled($image, $photo, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

$position = explode(" ", $_POST['background']);

$image3 = imagecrop($image, [
    'x' => str_replace(array('-', 'px'), array('', ''), $position[0]),
    'y' => str_replace(array('-', 'px'), array('', ''), $position[1]),
    'width' => $_POST['width'],
    'height' => $_POST['height']
]);
$stamp = imagecreatefrompng('img/logo.png');
imagecopyresized($image3, $stamp, 0, 0, 0, 0, 147, 50, imagesx($stamp), imagesy($stamp));
imagepng($image3, "created/".time().".png", 9);

2 个答案:

答案 0 :(得分:0)

imagecopyresized将复制并缩放和成像。这使用了一种相当原始的算法,可以产生更多的像素化结果。

质量更好的一个简单例子是:

<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;

// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);

// Output
imagejpeg($image_p, null, 100);
?>

你应该看一下这篇文章here

答案 1 :(得分:0)

使用1-100的图像质量。

imagejpeg($image, $new_image_name, 99);