Browse Source

added Image::rotate()

Fabian Peter Hammerle 8 years ago
parent
commit
0fab41dcd5

+ 11 - 0
Image.php

@@ -33,6 +33,17 @@ class Image
         }
     }
 
+    /**
+     * @param float $angle
+     * @return void
+     */
+    public function rotate($angle)
+    {
+        $resource = imagerotate($this->resource, $angle, 0);
+        imagedestroy($this->resource);
+        $this->resource = $resource;
+    }
+
     /**
      * @param string $path
      * @return void

+ 21 - 0
tests/ImageTest.php

@@ -6,6 +6,27 @@ use fphammerle\helpers\Image;
 
 class ImageTest extends \PHPUnit_Framework_TestCase
 {
+    public function rotateProvider()
+    {
+        return [
+            [__DIR__ . '/data/chainring.jpg', 90, __DIR__ . '/data/chainring-rotated-left.jpg'],
+            [__DIR__ . '/data/chainring.jpg', 270, __DIR__ . '/data/chainring-rotated-right.jpg'],
+            ];
+    }
+
+    /**
+     * @dataProvider rotateProvider
+     */
+    public function testRotate($source_path, $angle, $expected_path)
+    {
+        $img = Image::fromFile($source_path);
+        $tmp_path = tempnam(sys_get_temp_dir(), 'image');
+        $img->rotate($angle);
+        $img->saveJpeg($tmp_path);
+        $this->assertFileEquals($expected_path, $tmp_path);
+        unlink($tmp_path);
+    }
+
     public function testSaveJpeg()
     {
         $img = Image::fromFile(__DIR__ . '/data/chainring.jpg');

BIN
tests/data/chainring-3008p.jpg


BIN
tests/data/chainring-rotated-left.jpg


BIN
tests/data/chainring-rotated-right.jpg


BIN
tests/data/chainring-saved.jpg


BIN
tests/data/chainring.jpg