]> granicus.if.org Git - php/commitdiff
Fix #66882: imagerotate by -90 degrees truncates image by 1px
authorChristoph M. Becker <cmb@php.net>
Mon, 13 Jul 2015 20:14:13 +0000 (22:14 +0200)
committerChristoph M. Becker <cmb@php.net>
Mon, 13 Jul 2015 20:14:13 +0000 (22:14 +0200)
Contrary to the external libgd, the bundled libgd doesn't use optimized
rotation algorithms for negative square angles. We fix that now.

There are other improvements in gdImageRotateInterpolated() in the external
libgd. I'll leave them out for now, in the hope that we'll be able to rejoin
the two libraries rather soon.

ext/gd/libgd/gd_interpolation.c
ext/gd/tests/bug66882.phpt [new file with mode: 0644]

index e2c9f0530640d342ac3762fd08afefc72a23ca54..94c4968d29ba775bf31e4b265913c558274feb82 100644 (file)
@@ -2178,10 +2178,13 @@ gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, in
 
        /* no interpolation needed here */
        switch (angle_rounded) {
-               case 9000:
+               case -27000:
+               case   9000:
                        return gdImageRotate90(src, 0);
-               case 18000:
+               case -18000:
+               case  18000:
                        return gdImageRotate180(src, 0);
+               case -9000:
                case 27000:
                        return gdImageRotate270(src, 0);
        }
diff --git a/ext/gd/tests/bug66882.phpt b/ext/gd/tests/bug66882.phpt
new file mode 100644 (file)
index 0000000..6dfbdfe
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+Bug #66882 (imagerotate by -90 degrees truncates image by 1px)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagerotate(imagecreate(10, 10), -90, 0);
+var_dump(imagesy($im), imagesx($im));
+?>
+--EXPECT--
+int(10)
+int(10)