diff options
author | Christoph M. Becker <cmbecker69@gmx.de> | 2016-09-15 13:18:54 +0200 |
---|---|---|
committer | Christoph M. Becker <cmbecker69@gmx.de> | 2016-09-15 13:24:43 +0200 |
commit | ba2b50d097569381f98b306c932e240cd50cbb3d (patch) | |
tree | 7c7421feab9d2427444867379f4ef6324332ed6d | |
parent | 04b166a6c56315e84a9d40c751f29b81f84a10c1 (diff) | |
download | php-git-ba2b50d097569381f98b306c932e240cd50cbb3d.tar.gz |
Port optimization from external libgd
The functionality is identical, but we save two function calls for partially
transparent pixels.
-rw-r--r-- | ext/gd/libgd/gdft.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/ext/gd/libgd/gdft.c b/ext/gd/libgd/gdft.c index 6de314e971..f91fcf738c 100644 --- a/ext/gd/libgd/gdft.c +++ b/ext/gd/libgd/gdft.c @@ -626,6 +626,7 @@ static char * gdft_draw_bitmap (gdCache_head_t *tc_cache, gdImage * im, int fg, { unsigned char *pixel = NULL; int *tpixel = NULL; + int opixel; int x, y, row, col, pc, pcr; tweencolor_t *tc_elem; @@ -683,7 +684,13 @@ static char * gdft_draw_bitmap (gdCache_head_t *tc_cache, gdImage * im, int fg, } } else { if (im->alphaBlendingFlag) { - *tpixel = gdAlphaBlend(*tpixel, (level << 24) + (fg & 0xFFFFFF)); + opixel = *tpixel; + if (gdTrueColorGetAlpha(opixel) != gdAlphaTransparent) { + *tpixel = gdAlphaBlend (opixel, + (level << 24) + (fg & 0xFFFFFF)); + } else { + *tpixel = (level << 24) + (fg & 0xFFFFFF); + } } else { *tpixel = (level << 24) + (fg & 0xFFFFFF); } |