From 500fa6c3a934ac9d9f0a5c1ded5c00ad1709187f Mon Sep 17 00:00:00 2001 From: Derek Jones Date: Mon, 12 May 2008 15:08:35 +0000 Subject: changed overlay_watermark() to check for an alpha value before applying the image to help support PNG-24s with alpha transparency http://codeigniter.com/bug_tracker/bug/4506/ --- system/libraries/Image_lib.php | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'system') diff --git a/system/libraries/Image_lib.php b/system/libraries/Image_lib.php index 0750b6454..4017afb13 100644 --- a/system/libraries/Image_lib.php +++ b/system/libraries/Image_lib.php @@ -943,10 +943,23 @@ class CI_Image_lib { { @imagealphablending($src_img, TRUE); } - - // Set RGB values for text and shadow - imagecolortransparent($wm_img, imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp)); - imagecopymerge($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height, $this->wm_opacity); + + // Set RGB values for text and shadow + $rgba = imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp); + $alpha = ($rgba & 0x7F000000) >> 24; + + // make a best guess as to whether we're dealing with an image with alpha transparency or no/binary transparency + if ($alpha > 0) + { + // copy the image directly, the image's alpha transparency being the sole determinant of blending + imagecopy($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height); + } + else + { + // set our RGB value from above to be transparent and merge the images with the specified opacity + imagecolortransparent($wm_img, imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp)); + imagecopymerge($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height, $this->wm_opacity); + } // Output the image if ($this->dynamic_output == TRUE) @@ -1533,6 +1546,6 @@ class CI_Image_lib { } // END Image_lib Class - -/* End of file Image_lib.php */ + +/* End of file Image_lib.php */ /* Location: ./system/libraries/Image_lib.php */ \ No newline at end of file -- cgit v1.2.3-24-g4f1b