webForumDet fria alternativet

imagecopymerge med en jpg + png(24)

PHP

1 svar · 378 visningar · startad av UrMe

Medlem sedan apr. 2001762 inlägg
Frågan#1

Försöker sätta ihop en stor jpg bakgrund och ovanpå denna ska det in en transparent png in, men mitt problem är att png:en blir inte helt transparent när bilderna har satts ihop.

T.ex här är png bilden jag använder:
http://www.urme.com/df/dot1.png (En png24 sparad i photoshop)
Så här ser det ut efter jag satt ihop bakgrunden och denna png:
http://www.urme.com/df/exempel.jpg

Så här ser koden ut:

function addnewdot($dotimagesource, $source, $xpos, $ypos) {
	$dotimage = imagecreatefrompng($dotimagesource);
	$dotimageX = imagesx($dotimage);
	$dotimageY = imagesy($dotimage);
	imagealphablending($dotimage, true);
	imagesavealpha($dotimage, true);

	$xpos = $xpos - ($dotimageX/2);
	$ypos = $ypos - ($dotimageY/2);
	imagecopymerge($source,$dotimage,$xpos,$ypos,0,0,$dotimageX,$dotimageY,100);
}

$dotimage1 = "dot1.png";
$backgroundSource = "karta.jpg";
$source = imagecreatefromjpeg($backgroundSource);
addnewdot($dotimage1, $source, 33, 271);
addnewdot($dotimage1, $source, 233, 271);

header('Content-type: image/jpg');
imagejpeg($source);
imagedestroy($source);

Som ni ser har jag försökt lägga dit imagealphablending och imagesavealpha, men gav inget bättre resultat. Hur kan jag få png bilden att vara transparent som den bör vara?

Medlem sedan apr. 2001762 inlägg
#2

Denna kodrad verkar funka mycket bättre:

imagecopy($source,$dotimage,$xpos,$ypos,0,0,$dotimageX,$dotimageY);

istället för imagecopymerge();

265 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)