Commit: f05972ddbf703da35ae9bde5c89d6f55f178b939 Author: Pierre Joye <pierre....@gmail.com> Fri, 22 Mar 2013 09:21:11 +0100 Parents: 4e6d54f5a7003b73f12d86d7f5cba0a37ce40930 Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f05972ddbf703da35ae9bde5c89d6f55f178b939 Log: - fix regression bug24155.phpt and bug39366.phpt Bugs: https://bugs.php.net/24155 https://bugs.php.net/39366 Changed paths: M ext/gd/gd.c M ext/gd/libgd/gd.h M ext/gd/libgd/gd_interpolation.c Diff: diff --git a/ext/gd/gd.c b/ext/gd/gd.c index e291793..58027d7 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -2271,7 +2271,7 @@ PHP_FUNCTION(imagerotate) ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd); - im_dst = gdImageRotateGeneric(im_src, (float)degrees, color); + im_dst = gdImageRotateInterpolated(im_src, (const float)degrees, color); if (im_dst != NULL) { ZEND_REGISTER_RESOURCE(return_value, im_dst, le_gd); diff --git a/ext/gd/libgd/gd.h b/ext/gd/libgd/gd.h index 28c8562..44c7c8a 100644 --- a/ext/gd/libgd/gd.h +++ b/ext/gd/libgd/gd.h @@ -844,8 +844,7 @@ gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees, co gdImagePtr gdImageRotateBilinear(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees, const int bgColor); - - +gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor); typedef enum { GD_AFFINE_TRANSLATE = 0, diff --git a/ext/gd/libgd/gd_interpolation.c b/ext/gd/libgd/gd_interpolation.c index c44f504..0215c23 100644 --- a/ext/gd/libgd/gd_interpolation.c +++ b/ext/gd/libgd/gd_interpolation.c @@ -1729,6 +1729,7 @@ gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees, co gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees, const int bgColor) { float _angle = ((float) (-degrees / 180.0f) * (float)M_PI); + const int angle_rounded = (int)floor(degrees * 100); const int src_w = gdImageSX(src); const int src_h = gdImageSY(src); const unsigned int new_width = (unsigned int)(abs((int)(src_w * cos(_angle))) + abs((int)(src_h * sin(_angle))) + 0.5f); @@ -2194,6 +2195,16 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor) { + const int angle_rounded = (int)floor(angle * 100); + + switch (angle_rounded) { + case 9000: + return gdImageRotate90(src, 0); + case 18000: + return gdImageRotate180(src, 0); + case 27000: + return gdImageRotate270(src, 0); + } if (src == NULL || src->interpolation_id < 1 || src->interpolation_id > GD_METHOD_COUNT) { return NULL; @@ -2208,47 +2219,12 @@ gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, in return gdImageRotateBilinear(src, angle, bgcolor); break; - case GD_BICUBIC: - return gdImageRotateBicubicFixed(src, angle, bgcolor); - break; - case GD_BICUBIC_FIXED: - return gdImageRotateNearestNeighbour(src, angle, bgcolor); - break; - - case GD_WEIGHTED4: - return gdImageRotateNearestNeighbour(src, angle, bgcolor); - break; - - case GD_BSPLINE: - return gdImageRotateNearestNeighbour(src, angle, bgcolor); - break; - - case GD_BOX: - return gdImageRotateNearestNeighbour(src, angle, bgcolor); - break; - - case GD_HERMITE: - return gdImageRotateNearestNeighbour(src, angle, bgcolor); + return gdImageRotateBicubicFixed(src, angle, bgcolor); break; - case GD_HAMMING: - break; - case GD_SINC: - break; - case GD_BLACKMAN: - break; - - case GD_GAUSSIAN: - break; - case GD_QUADRATIC: - break; - case GD_MITCHELL: - break; - case GD_CATMULLROM: - break; - case GD_POWER: - break; + default: + gdImageRotateGeneric(src, angle, bgcolor); } return NULL; } -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php