2010-01-04 100 views
2

我只是不知道为什么这样?PHP透明图像分层问题

<?php 

    $image = imagecreatefromjpeg($_GET['u']); 
    imagealphablending($image, true); 
    imagesavealpha($image,true); 
    $overlay = imagecreatefrompng("overlay.png"); 
    imagealphablending($overlay, true); 
    imagesavealpha($overlay,true); 
    $finalImage = imagecreate(85,85); 
    imagealphablending($finalImage, true); 
    imagesavealpha($finalImage,true); 

    $trans = imagecolorallocate($finalImage,255,0,0); 
    imagecolortransparent($finalImage,$trans); 
    imagefill($finalImage, 0, 0, $trans); 

    imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75); 
    imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85); 
    imageDestroy($image); 
    imageDestroy($overlay); 


    // Content type 
    header('Content-type: image/png'); 
    imagepng($finalImage); 
    imagedestroy($finalImage); 

>

产生以下:

alt text http://alanjack.co.uk/travel/0rotatedImage.php%20(1).png

在做imagecopy的一个或其他产生健康结果:

  imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75); 
    //imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85); 
    //ImageDestroy($image); 
    //ImageDestroy($overlay); 

捐赠:

alt text http://alanjack.co.uk/travel/1rotatedImage.php%20(1).png

  //imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75); 
    imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85); 
    //ImageDestroy($image); 
    //ImageDestroy($overlay); 

,并提供:

alt text http://alanjack.co.uk/travel/2rotatedImage.php%20(1).png

难道是某种调色板不一致或某事 - 事做一个是一个PNG和另一个JPEG?

Grrrrrrrr ...艾伦生气......艾伦想要SMASH !!!

回答

2

试试这个代码,而不是:

<?php 

$image = imagecreatefromjpeg($_GET['u']); 
imagesavealpha($image, true); 
imagealphablending($image, true); 

$overlay = imagecreatefrompng("overlay.png"); 
imagesavealpha($overlay, true); 
imagealphablending($overlay, true); 

$finalImage = imagecreatetruecolor(85,85); 
imagefill($finalImage, 0, 0, IMG_COLOR_TRANSPARENT); 
imagesavealpha($finalImage, true); 
imagealphablending($finalImage, true); 

/* 
$trans = imagecolorallocatealpha($finalImage, 255, 0, 0, 127); 
imagecolortransparent($finalImage, $trans); 
imagefill($finalImage, 0, 0, $trans); 
*/ 

imagecopy($finalImage, $image, 5, 5, 0, 0, 75, 75); 
imagecopy($finalImage, $overlay, 0, 0, 0, 0, 85, 85); 
//imageDestroy($image); 
//imageDestroy($overlay); 

// Content type 
header('Content-type: image/png'); 
imagepng($finalImage); 
//imagedestroy($finalImage); 

?> 

它是否解决问题了吗?

+0

对我来说绝对是一种享受。谢谢 – 2012-08-08 08:35:57

0

当我将imagecreate()更改为imagecreatetruecolor()时,灰色矩形消失了,所以我认为这毕竟是调色板问题!

谢谢反正家伙。