diff options
| -rw-r--r-- | NEWS | 1 | ||||
| -rw-r--r-- | ext/gd/libgd/gd.c | 26 |
2 files changed, 27 insertions, 0 deletions
@@ -11,6 +11,7 @@ PHP NEWS . Make sure PHP_SELF is filtered in Apache 1 sapi. . Fixed bug #39358 (INSTALL_HEADERS contains incorrect reference to php_filter.h). +- Added optimization for imageline with horizontal and vertial lines (Pierre) - Fixed bug #39366 (imagerotate does not use alpha with angle > 45°) (Pierre) - Fixed bug #39273 (imagecopyresized may ignore alpha channel) (Pierre) - Fixed bug #39364 (Removed warning on empty haystack inside mb_strstr()). diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index bd6c984614..1d8de43615 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -1019,6 +1019,7 @@ void gdImageAABlend (gdImagePtr im) /* Bresenham as presented in Foley & Van Dam */ void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color) { + int t; int dx, dy, incr1, incr2, d, x, y, xend, yend, xdirflag, ydirflag; int wid; int w, wstart; @@ -1029,6 +1030,31 @@ void gdImageLine (gdImagePtr im, int x1, int y1, int x2, int y2, int color) return; } + /* Vertical */ + if (x1==x2) { + if (y2 < y1) { + t = y2; + y2 = y1; + y1 = t; + } + + for (;y1 <= y2; y1++) { + gdImageSetPixel(im, x1,y1, color); + } + return; + } else if (y1==y2) { /* Horizontal */ + if (x2 < x1) { + t = x2; + x2 = x1; + x1 = t; + } + + for (;x1 <= x2; x1++) { + gdImageSetPixel(im, x1,y1, color); + } + return; + } + /* gdAntiAliased passed as color: set anti-aliased line (AAL) global vars. */ if (color == gdAntiAliased) { im->AAL_x1 = x1; |
