Skip to content

Commit be3e2bb

Browse files
committed
fix generic rotation and 90 degrees & multiples rotation, take #2
1 parent 585f71f commit be3e2bb

File tree

1 file changed

+14
-38
lines changed

1 file changed

+14
-38
lines changed

ext/gd/libgd/gd_interpolation.c

Lines changed: 14 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2177,6 +2177,17 @@ gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const
21772177

21782178
gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor)
21792179
{
2180+
const int angle_rounded = (int)floor(angle * 100);
2181+
2182+
/* no interpolation needed here */
2183+
switch (angle_rounded) {
2184+
case 9000:
2185+
return gdImageRotate90(src, 0);
2186+
case 18000:
2187+
return gdImageRotate180(src, 0);
2188+
case 27000:
2189+
return gdImageRotate270(src, 0);
2190+
}
21802191

21812192
if (src == NULL || src->interpolation_id < 1 || src->interpolation_id > GD_METHOD_COUNT) {
21822193
return NULL;
@@ -2191,47 +2202,12 @@ gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, in
21912202
return gdImageRotateBilinear(src, angle, bgcolor);
21922203
break;
21932204

2194-
case GD_BICUBIC:
2195-
return gdImageRotateBicubicFixed(src, angle, bgcolor);
2196-
break;
2197-
21982205
case GD_BICUBIC_FIXED:
2199-
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
2200-
break;
2201-
2202-
case GD_WEIGHTED4:
2203-
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
2204-
break;
2205-
2206-
case GD_BSPLINE:
2207-
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
2208-
break;
2209-
2210-
case GD_BOX:
2211-
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
2212-
break;
2213-
2214-
case GD_HERMITE:
2215-
return gdImageRotateNearestNeighbour(src, angle, bgcolor);
2206+
return gdImageRotateBicubicFixed(src, angle, bgcolor);
22162207
break;
22172208

2218-
case GD_HAMMING:
2219-
break;
2220-
case GD_SINC:
2221-
break;
2222-
case GD_BLACKMAN:
2223-
break;
2224-
2225-
case GD_GAUSSIAN:
2226-
break;
2227-
case GD_QUADRATIC:
2228-
break;
2229-
case GD_MITCHELL:
2230-
break;
2231-
case GD_CATMULLROM:
2232-
break;
2233-
case GD_POWER:
2234-
break;
2209+
default:
2210+
return gdImageRotateGeneric(src, angle, bgcolor);
22352211
}
22362212
return NULL;
22372213
}

0 commit comments

Comments
 (0)