|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2003-05-26 04:24 UTC] i dot a at signalsystem-bz dot it
I had under php 4.3.1 some code to blend in transparency a logo over some pictures before displaying them - all was working perfectly.
When i installed php 4.3.2rc4, i noticed that the same code stopped working - where first was blending 2 images, now is acting this way:
- with high transparency value in imagecopymerge, the 2nd image covers totally the destination one and the transparent color is drawed all grey
- with low transparency value in imagecopymerge, the 2nd image transparent color becomes very dark-black and covers the destination image
the code i'm using is below:
if (isset($_REQUEST['img'])) $img=$_REQUEST['img']; else $img='';
$b = imagecreatefromjpeg($img);
$bx = imagesx($b);
$by = imagesy($b);
ImageAlphaBlending($b, true);
$logoImage = ImageCreateFromPNG('logo.png');
$logoW = ImageSX($logoImage);
$logoH = ImageSY($logoImage);
if ($logoW > $bx or $logoH > $by)
{
$x1 = $bx;
$y1 = $bx*$logoH/$logoW;
if ($x1 > $bx or $y1 > $by)
{
$y1 = $by;
$x1 = $by*$logoW/$logoH;
}
$b1 = imagecreatetruecolor($x1,$y1);
imagecopyresampled($b1,$logoImage,0,0,0,0,$x1,$y1,$logoW,$logoH);
imageDestroy($logoImage);
$logoImage = $b1;
$logoW = $x1;
$logoH = $y1;
}
ImageCopyMerge($b,$logoImage,($bx - $logoW)/2,($by - $logoH)/2,0,0,$logoW,$logoH,14);
imagejpeg($b,"blend.jpg",90);
imageDestroy($b);
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Nov 02 07:00:01 2025 UTC |
I was going to file this as a new bug, but thought i'd rather add it here, since it's the same basic problem: After upgrading to 4.3.2, the imagecopymerge function is broken. Reverting to 4.3.1 removes the error. My configure line: (unchanged since 4.3.1) './configure' '--with-mysql' '--prefix=/mysrv/php' '--enable-ftp' '--with-apxs=/mysrv/apache/sbin/apxs' '--with-config-file-path=/mysrv/php-conf' '--disable-pear' '--enable-track-vars' '--with-gd' '--with-jpeg-dir=/usr/local' '--with-png-dir=/usr/local' '--with-zlib-dir=/usr/local' '--disable-cli' '--with-t1lib=/usr/local' Summary of script function: - Takes one image A from file (JPEG 24bit). - generates another image B with same dimensions, 24 bit, and fills it with 50 percent gray - (left out: gets a set of imagemap coordinates from a database and draws them as black outline, white area inside the image B) - merges image B on top of image A with 40 percent transparency - returns the result. Effect of error: No blending occurs with 4.3.2. Only image B is returned, albeit "weaker" or "stronger" depending on the transparency setting in imagecopymerge(). Leaving out the imagecopymerge() command returns the original image A, as expected. Moving the coordinates results in a black background being visible (should be image A). My unqualified guess: Looks as if imagecopymerge() takes a black image instead of image A. Side notes: replacing imagecopymerge with imagecopymergegray actually returns the both images overlaid, but with palette image color mixup effects. Example source code (requires a jpeg image "test.jpg" of arbitrary size to test) -- begin code -- $uim = imagecreatefromjpeg("test.jpg") or die ("Cannot Initialize new GD image stream"); imagealphablending ($uim, TRUE ); # leaving this out changes nothing #### fill overlay with gray $im = imagecreatetruecolor( imagesx($uim) , imagesy($uim) ); # Overlay-Bild $migra=imagecolorallocate ($im, 128,128,128); imagefilledrectangle ( $im , 0,0 , imagesx($im)-1 , imagesy($im)-1 , $migra ); # database drawin left out here imagecopymerge ( $uim, $im, 0, 0, 0, 0, imagesx($uim), imagesy($uim), 40); header ("Content-type: image/jpeg"); imagejpeg ($uim ,'', 75); imagedestroy($uim); imagedestroy($im); -- end code --