From: Pierre Joye Date: Sun, 24 Mar 2013 15:52:20 +0000 (+0100) Subject: fix generic rotation and 90 degrees & multiples rotation, take #2 X-Git-Tag: php-5.5.0beta2~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=be3e2bb295d58297ce7e8a3ee05cbf2112eb0138;p=php fix generic rotation and 90 degrees & multiples rotation, take #2 --- diff --git a/ext/gd/libgd/gd_interpolation.c b/ext/gd/libgd/gd_interpolation.c index ab3e988a48..15b5415715 100644 --- a/ext/gd/libgd/gd_interpolation.c +++ b/ext/gd/libgd/gd_interpolation.c @@ -2177,6 +2177,17 @@ 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); + + /* no interpolation needed here */ + 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; @@ -2191,47 +2202,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: + return gdImageRotateGeneric(src, angle, bgcolor); } return NULL; }