2011-11-02 3 views
3

Ce qui semble être simple, n'est pas :(PNG transparent sur JPG en PHP

Je suis en train d'ajouter quelque chose comme un filigrane (png transparent) sur une image (jpg) . Voici le code J'utilise.

$width = 800; 
$height = 600; 
$bottom_image = imagecreatefromjpeg("portrait1.jpg"); 
$top_image = imagecreatefrompng("man2.png"); 
imagesavealpha($top_image, true); 
imagealphablending($top_image, true); 
imagecopy($bottom_image, $top_image, 200, 200, 0, 0, $width, $height); 
header('Content-type: image/png'); 
imagepng($bottom_image); 

Quand je fusionner les images, le .png est placé au bon endroit, everythig ci-dessus et à gauche de celui-ci est bon (jpg est copié), mais tout le reste est noir

J'ai essayé de définir imagesavealpha et imagealphablending sur false, il n'y avait pas de différence.

Vous pouvez voir l'image résultante à http://ekstrakt.selfip.com/photobomb/image.php

J'ai cherché sur le net, je ne peux pas trouver une solution.

Toute aide est appréciée.

+2

Vous devez également activer l'alphablending sur l'image $ bottom_image. –

Répondre

3

Votre $width et $height devraient être les dimensions du filigrane, et non de la photo. Ce que vous lui dites de faire est de copier le filigrane avec une taille beaucoup plus grande que c'est. Quand il lit une partie d'une image qui n'existe pas (coordonnées en dehors des limites) le résultat est noir opaque, donnant le résultat que vous voyez.