Skip to content

Commit 3c29f52

Browse files
committed
Merge pull request #21 from hanovruslan/reader-interface
Added proper reader interface
2 parents 73f0d27 + f8685a0 commit 3c29f52

15 files changed

+230
-209
lines changed

README.md

+4-31
Original file line numberDiff line numberDiff line change
@@ -7,47 +7,20 @@ PHPExif serves as a wrapper around some native or CLI tools which access this EX
77
## Supported tools
88

99
* Native PHP functionality (exif_read_data, iptcparse)
10-
* [Exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/) adapter (wrapper for the exiftool binary)
10+
* [Exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool‎) adapter (wrapper for the exiftool binary)
1111

1212
## Installation (composer)
1313

1414
```json
15-
"miljar/php-exif": "0.*"
15+
"miljar/php-exif": "~0.2"
1616
```
1717

1818

1919
## Usage
2020

21-
### Using factory method
21+
[Before v0.2.2](Resources/doc/usage_0.2.1.md)
2222

23-
```php
24-
<?php
25-
// reader with Native adapter
26-
$reader = \PHPExif\Reader::factory(\PHPExif\Reader::TYPE_NATIVE);
27-
28-
// reader with Exiftool adapter
29-
//$reader = \PHPExif\Reader::factory(\PHPExif\Reader::TYPE_EXIFTOOL);
30-
31-
$exif = $reader->getExifFromFile('/path/to/file');
32-
33-
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
34-
```
35-
36-
### Using custom options
37-
38-
```php
39-
<?php
40-
$adapter = new \PHPExif\Reader\Adapter\Exiftool(
41-
array(
42-
'toolPath' => '/path/to/exiftool',
43-
)
44-
);
45-
$reader = new \PHPExif\Reader($adapter);
46-
47-
$exif = $reader->getExifFromFile('/path/to/file');
48-
49-
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
50-
```
23+
[v0.2.2+](Resources/doc/usage.md)
5124

5225
## Contributing
5326

Resources/doc/usage.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Usage ##
2+
3+
### Using factory method
4+
5+
```php
6+
<?php
7+
// reader with Native adapter
8+
$reader = \PHPExif\Reader\Reader::factory(\PHPExif\Reader\Reader::TYPE_NATIVE);
9+
10+
// reader with Exiftool adapter
11+
//$reader = \PHPExif\Reader\Reader::factory(\PHPExif\Reader\Reader::TYPE_EXIFTOOL);
12+
13+
$exif = $reader->read('/path/to/file');
14+
15+
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
16+
```
17+
18+
### Using custom options
19+
20+
```php
21+
<?php
22+
$adapter = new \PHPExif\Adapter\Exiftool(
23+
array(
24+
'toolPath' => '/path/to/exiftool',
25+
)
26+
);
27+
$reader = new \PHPExif\Reader\Reader($adapter);
28+
29+
$exif = $reader->read('/path/to/file');
30+
31+
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
32+
```

Resources/doc/usage_0.2.1.md

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## Usage ##
2+
3+
### Using factory method
4+
5+
```php
6+
<?php
7+
// reader with Native adapter
8+
$reader = \PHPExif\Reader::factory(\PHPExif\Reader::TYPE_NATIVE);
9+
10+
// reader with Exiftool adapter
11+
//$reader = \PHPExif\Reader::factory(\PHPExif\Reader::TYPE_EXIFTOOL);
12+
13+
$exif = $reader->getExifFromFile('/path/to/file');
14+
15+
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
16+
```
17+
18+
### Using custom options
19+
20+
```php
21+
<?php
22+
$adapter = new \PHPExif\Reader\Adapter\Exiftool(
23+
array(
24+
'toolPath' => '/path/to/exiftool',
25+
)
26+
);
27+
$reader = new \PHPExif\Reader($adapter);
28+
29+
$exif = $reader->getExifFromFile('/path/to/file');
30+
31+
echo 'Title: ' . $exif->getTitle() . PHP_EOL;
32+
```

lib/PHPExif/Reader/AdapterAbstract.php lib/PHPExif/Adapter/AdapterAbstract.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif\Reader;
12+
namespace PHPExif\Adapter;
1313

1414
/**
1515
* PHP Exif Reader Adapter Abstract

lib/PHPExif/Reader/AdapterInterface.php lib/PHPExif/Adapter/AdapterInterface.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif\Reader;
12+
namespace PHPExif\Adapter;
1313

1414
/**
1515
* PHP Exif Reader Adapter

lib/PHPExif/Reader/Adapter/Exiftool.php lib/PHPExif/Adapter/Exiftool.php

+5-6
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif\Reader\Adapter;
12+
namespace PHPExif\Adapter;
1313

14-
use PHPExif\Reader\AdapterAbstract;
1514
use PHPExif\Exif;
16-
use \InvalidArgumentException;
17-
use \RuntimeException;
18-
use \DateTime;
15+
use InvalidArgumentException;
16+
use RuntimeException;
17+
use DateTime;
1918

2019
/**
2120
* PHP Exif Exiftool Reader Adapter
@@ -45,7 +44,7 @@ class Exiftool extends AdapterAbstract
4544
* Setter for the exiftool binary path
4645
*
4746
* @param string $path The path to the exiftool binary
48-
* @return \PHPExif\Reader\Adapter\Exiftool Current instance
47+
* @return \PHPExif\Adapter\Exiftool Current instance
4948
* @throws \InvalidArgumentException When path is invalid
5049
*/
5150
public function setToolPath($path)

lib/PHPExif/Reader/Adapter/Native.php lib/PHPExif/Adapter/Native.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif\Reader\Adapter;
12+
namespace PHPExif\Adapter;
1313

14-
use PHPExif\Reader\AdapterAbstract;
1514
use PHPExif\Exif;
16-
use \DateTime;
15+
use DateTime;
1716

1817
/**
1918
* PHP Exif Native Reader Adapter

lib/PHPExif/Reader/NoAdapterException.php lib/PHPExif/Adapter/NoAdapterException.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif\Reader;
12+
namespace PHPExif\Adapter;
1313

14-
use \Exception;
14+
use Exception;
1515

1616
/**
1717
* PHP Exif Reader Adapter
@@ -23,5 +23,5 @@
2323
*/
2424
class NoAdapterException extends Exception
2525
{
26-
26+
//empty
2727
}

lib/PHPExif/Reader.php lib/PHPExif/Reader/Reader.php

+25-28
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
* @package Reader
1010
*/
1111

12-
namespace PHPExif;
12+
namespace PHPExif\Reader;
1313

14-
use PHPExif\Reader\AdapterInterface;
15-
use PHPExif\Reader\NoAdapterException;
14+
use PHPExif\Adapter\AdapterInterface;
15+
use PHPExif\Adapter\NoAdapterException;
16+
use PHPExif\Adapter\Exiftool as ExiftoolAdapter;
17+
use PHPExif\Adapter\Native as NativeAdapter;
1618

1719
/**
1820
* PHP Exif Reader
@@ -23,47 +25,32 @@
2325
* @package Reader
2426
* @
2527
*/
26-
class Reader
28+
class Reader implements ReaderInterface
2729
{
2830
const TYPE_NATIVE = 'native';
2931
const TYPE_EXIFTOOL = 'exiftool';
3032

3133
/**
3234
* The current adapter
3335
*
34-
* @var \PHPExif\Reader\AdapterInterface
36+
* @var \PHPExif\Adapter\AdapterInterface
3537
*/
3638
protected $adapter;
3739

3840
/**
3941
* Reader constructor
4042
*
41-
* @param \PHPExif\Reader\AdapterInterface $adapter
43+
* @param \PHPExif\Adapter\AdapterInterface $adapter
4244
*/
43-
public function __construct(AdapterInterface $adapter = null)
44-
{
45-
if (!is_null($adapter)) {
46-
$this->setAdapter($adapter);
47-
}
48-
}
49-
50-
/**
51-
* Setter for the reader adapter
52-
*
53-
* @param \PHPExif\Reader\AdapterInterface $adapter
54-
* @return \PHPExif\Reader Current instance for chaining
55-
*/
56-
public function setAdapter(AdapterInterface $adapter)
45+
public function __construct(AdapterInterface $adapter)
5746
{
5847
$this->adapter = $adapter;
59-
60-
return $this;
6148
}
6249

6350
/**
6451
* Getter for the reader adapter
6552
*
66-
* @return \PHPExif\Reader\AdapterInterface
53+
* @return \PHPExif\Adapter\AdapterInterface
6754
* @throws NoAdapterException When no adapter is set
6855
*/
6956
public function getAdapter()
@@ -79,20 +66,19 @@ public function getAdapter()
7966
* Factory for the reader
8067
*
8168
* @param string $type
82-
* @return \PHPExif\Reader
69+
* @return $this
8370
* @throws \InvalidArgumentException When given type is invalid
8471
*/
8572
public static function factory($type)
8673
{
8774
$classname = get_called_class();
88-
8975
$adapter = null;
9076
switch ($type) {
9177
case self::TYPE_NATIVE:
92-
$adapter = new Reader\Adapter\Native();
78+
$adapter = new NativeAdapter();
9379
break;
9480
case self::TYPE_EXIFTOOL:
95-
$adapter = new Reader\Adapter\Exiftool();
81+
$adapter = new ExiftoolAdapter();
9682
break;
9783
default:
9884
throw new \InvalidArgumentException(
@@ -109,8 +95,19 @@ public static function factory($type)
10995
* @param string $file
11096
* @return \PHPExif\Exif Instance of Exif object with data
11197
*/
112-
public function getExifFromFile($file)
98+
public function read($file)
11399
{
114100
return $this->getAdapter()->getExifFromFile($file);
115101
}
102+
103+
/**
104+
* alias to read method
105+
*
106+
* @param string $file
107+
* @return \PHPExif\Exif Instance of Exif object with data
108+
*/
109+
public function getExifFromFile($file)
110+
{
111+
return $this->read($file);
112+
}
116113
}
+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace PHPExif\Reader;
4+
5+
interface ReaderInterface
6+
{
7+
/**
8+
* Reads & parses the EXIF data from given file
9+
*
10+
* @param string $file
11+
* @return \PHPExif\Exif Instance of Exif object with data
12+
*/
13+
public function read($file);
14+
}

tests/PHPExif/ExifTest.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
class ExifTest extends \PHPUnit_Framework_TestCase
34
{
45
/**
@@ -406,8 +407,8 @@ public function testAdapterConsistency()
406407
PHPEXIF_TEST_ROOT . '/files/dsc_5794.jpg'
407408
);
408409

409-
$adapter_exiftool = new \PHPExif\Reader\Adapter\Exiftool();
410-
$adapter_native = new \PHPExif\Reader\Adapter\Native();
410+
$adapter_exiftool = new \PHPExif\Adapter\Exiftool();
411+
$adapter_native = new \PHPExif\Adapter\Native();
411412

412413
foreach ($testfiles as $file) {
413414
$result_exiftool = $adapter_exiftool->getExifFromFile($file);

0 commit comments

Comments
 (0)