diff --git a/public/exif.jpg b/public/exif.jpg new file mode 100644 index 00000000..ab98706c Binary files /dev/null and b/public/exif.jpg differ diff --git a/src/Intervention/Image/Image.php b/src/Intervention/Image/Image.php index bda67438..d380c35a 100644 --- a/src/Intervention/Image/Image.php +++ b/src/Intervention/Image/Image.php @@ -1364,6 +1364,23 @@ class Image return $this; } + /** + * Read Exif data from the current image + * + * @param string $key + * @return mixed + */ + public function exif($key = null) + { + $data = exif_read_data($this->dirname .'/'. $this->basename, 'EXIF', false); + + if ( ! is_null($key)) { + return array_key_exists($key, $data) ? $data[$key] : null; + } + + return $data; + } + /** * Convert rgba alpha (0-1) value to gd value (0-127) * diff --git a/tests/ImageTest.php b/tests/ImageTest.php index b1cf61d5..450a036f 100644 --- a/tests/ImageTest.php +++ b/tests/ImageTest.php @@ -1397,4 +1397,25 @@ class ImageTest extends PHPUnit_Framework_Testcase $encoded = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAChklEQVRo3uXavUscQRjH8c+t2MhhcUhiKolYiDFXCIKFNkoqrYL/gyT/UV4sTZ3CgI2SIhBBsJBwWKjEYCEptLmzSpFi5ny56Hm+nLdjvt3e7t4+v52ZnWee3xTcHyMYxiAG0I8SivF8FUc4xD72sI3KfTy8cMf7y5jAOMZu+R+b2MA6th5ayCSmMXPujd+VKlaxhm/tFjKKOcyiR3s4wRcs40erN3Xd4AHzeIMpdGsf3XiBl/G4cl9CnmABb+PgfShK8aUVsYvaXYQMxlZ4rXOU0YefOL6NkLqIVzrPUBSze5WYribdKS8i6jxHb/wA1FoVstDh7tSsZQr43oqQ+Tiw80pZyBAqzYSMxi5VyrEQeCakN7/rP2QNF8zF5ss7QzFWlwmZFGbsVJiNMf8jZFr70o520BNjviCkLCSAqTETYz8VMuH+stiHpBhjPxUynqAI52PPhJXdWMJCxjCSCcvT1BnOhOQwdQYzoVCQOgOZUO1Inf5M/vOqVihl0pw/Gilmj0AEwjxSfQQ6qpmwSEmdo0yoxabOYSYUlFNnPxOq4qmzlwlr39TZzoRqxGbCIjZRqc8jGwkL2eBsYbUuzfmkGmM/FbIlmCypsRpjv1BFWRNMllQ4iTHjYqXxF54KJksKfMan+kFj0riMnQRE7MRYXdYinNVSp3Iu5B2+NhNCmFeKYuErhyxhsfHHq/yRXcEhyltBewUf3MDoqQmeXZ/gFOWBNbzHwWUnm3mIx7FlenPQMitRxJUJ7nWu7rHg2RU6OGaWYnc6aHZRKz57TfDsjgSn6KGqLjvC12nRNR57q0LqVISU/08cN+3a/XAiTHYfNXxim/HfbqppJPltTpfR0Y1nfwGRl30LQuetpgAAAABJRU5ErkJggg=='; $this->assertEquals($data, $encoded); } + + public function testExifRead() + { + // read all data + $data = Image::make('public/exif.jpg')->exif(); + $this->assertInternalType('array', $data); + $this->assertEquals(count($data), 19); + + // read key + $data = Image::make('public/exif.jpg')->exif('Artist'); + $this->assertInternalType('string', $data); + $this->assertEquals($data, 'Oliver Vogel'); + + // read image with no exif data + $data = Image::make('public/test.jpg')->exif(); + $this->assertEquals($data, null); + + // read key that doesn't exist + $data = Image::make('public/exif.jpg')->exif('xxx'); + $this->assertEquals($data, null); + } }