diff options
Diffstat (limited to 'system')
-rw-r--r-- | system/libraries/Image_lib.php | 25 |
1 files changed, 19 insertions, 6 deletions
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 |