2016-12-07 6 views
2

Ich füge ein transparentes Logo als Wasserzeichen über einem Bild mit PHP hinzu. Im Ergebnis hat das Logo jedoch eine schlechte Qualität (das darunter liegende Bild ist von hoher Qualität, also ist es nur das Wasserzeichen). Dies ist der Code, den ich verwende (es geht um die letzten drei Zeilen):Logo als Wasserzeichen hinzufügen, Wasserzeichen schlechte Qualität

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

was ist Ihre wahre Frage? – Blueblazer172

+0

Warum das Wasserzeichen ist so schlechte Qualität mit Bildkopie resized –

Antwort

0

imagecopyresized kopiert und Skalierung und Bild. Dies verwendet einen ziemlich primitiven Algorithmus, der tendenziell mehr pixelige Ergebnisse liefert.

ein einfaches Beispiel für eine bessere Qualität ist:

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

Sie in diesem Beitrag here

0

Verwendung Bildqualität 1-100 einen Blick haben sollte.

imagejpeg($image, $new_image_name, 99);