2016-07-25 5 views
1

Ich versuche, ein Wasserzeichen in der Mitte meines Bildes zu installieren, aber jedes Mal zeigt es ein seltsames Quadrat, das nicht vollständig transparent ist. Dies ist das Ergebnis meiner Code:PHP-GD Transparenz von Wasserzeichen PNG nicht korrekt mit JPEG

enter image description here

Dies ist mein Code:

<?php 
header("Content-type: image/png"); 

$image = imagecreatefromjpeg('http://www.sideshowtoy.com/wp-content/uploads/2016/03/dc-comics-batman-v-superman-woner-woman-sixth-scale-hot-toys-feature-902687.jpg'); 
$watermark = imagecreatefrompng('https://d5odq6jbm6umf.cloudfront.net/assets/img/video-play-button-transparent.png'); 
imagesavealpha($watermark,true); 

$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 
$dest_x = (imagesx($image) - $watermark_width)/2; 
$dest_y = (imagesy($image) - $watermark_height)/2; 
imagecopymerge($image, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height, 100); 
imagejpeg($image); 
imagedestroy($image); 
imagedestroy($watermark); 
?> 
+1

Mögliche Duplikat [Mit

unten Ihren Code ein neues Bild, Kopie im JPEG, und dann überlagern die teilweise transparente Wasserzeichen erstellen geändert GD in PHP, wie kann ich ein transparentes PNG-Wasserzeichen für PNG- und GIF-Dateien erstellen? (JPG-Dateien funktionieren gut)] (http://stackoverflow.com/questions/4437557/using-gd-in-php-how-can-i-make-a-transparent-png-watermark-on-png-and- gif-files) – buster

+0

oder ein Duplikat von http://stackoverflow.com/questions/5529306/i-cant-use-transparent-background-with-imagecopymerge - Es gibt viele mit Antworten auf diese Frage. – Jim

Antwort

1

Ich schaffe in der Regel eine neue True-Color-Ressource und kopieren alles hinein. Dies stellt sicher, dass GD nicht zu schrulligen wird. Es ist ein wenig ressourcenintensiver, sollte aber in den meisten Fällen vernachlässigbar sein.

<?php 
$image = imagecreatefromjpeg('http://www.sideshowtoy.com/wp-content/uploads/2016/03/dc-comics-batman-v-superman-woner-woman-sixth-scale-hot-toys-feature-902687.jpg'); 
$img_w = imagesx($image); 
$img_h = imagesy($image); 
$new = imagecreatetruecolor($img_w, $img_h); 
imagecopy($new, $image, 0, 0, 0, 0, $img_w, $img_h); 
imagedestroy($image); 

$watermark = imagecreatefrompng('https://d5odq6jbm6umf.cloudfront.net/assets/img/video-play-button-transparent.png'); 
$watermark_width = imagesx($watermark); 
$watermark_height = imagesy($watermark); 
$dest_x = ($img_w - $watermark_width)/2; 
$dest_y = ($img_h - $watermark_height)/2; 
imagecopy($new, $watermark, $dest_x, $dest_y, 0, 0, $watermark_width, $watermark_height); 

header('Content-type: image/png'); 
imagejpeg($new); 
imagedestroy($new); 
imagedestroy($watermark); 

Ergebnis:

Wonder Woman! Na na na na na!