2016-12-07 163 views
2

我在使用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); 
+0

你真正的问题是什么? – Blueblazer172

+0

为什么使用imagecopyresized的水印质量很差 –

回答

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); 
?> 

你应该在这个职位从1-100看看图像的here

0

使用质量。

imagejpeg($image, $new_image_name, 99);