]> granicus.if.org Git - php/commitdiff
fix generic rotation and 90 degrees & multiples rotation, take #2
authorPierre Joye <pierre.php@gmail.com>
Sun, 24 Mar 2013 15:52:20 +0000 (16:52 +0100)
committerPierre Joye <pierre.php@gmail.com>
Sun, 24 Mar 2013 15:52:20 +0000 (16:52 +0100)
ext/gd/libgd/gd_interpolation.c

index ab3e988a48117412212ed28a62b529ee5b570e7a..15b541571567a3fafec0a14f65724fe0b4725dd9 100644 (file)
@@ -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;
 }