1 <?php
2 
3 
4 namespace splitbrain\slika;
5 
6 /**
7  * Factory to process an image using an available Adapter
8  */
9 class Slika
10 {
11     /** rotate an image counter clock wise */
12     const ROTATE_CCW = 8;
13     /** rotate an image clock wise */
14     const ROTATE_CW = 6;
15     /** rotate on it's head */
16     const ROTATE_TOPDOWN = 3;
17 
18     /** these can be overwritten using the options array in run() */
19     const DEFAULT_OPTIONS = [
20         'quality' => 92,
21         'imconvert' => '/usr/bin/convert',
22     ];
23 
24     /**
25      * This is a factory only, thus the constructor is private
26      */
27     private function __construct()
28     {
29         // there is no constructor.
30     }
31 
32     /**
33      * Start processing the image
34      *
35      * @param string $imagePath
36      * @param array $options
37      * @return Adapter
38      * @throws Exception
39      */
40     public static function run($imagePath, $options = [])
41     {
42         $options = array_merge(self::DEFAULT_OPTIONS, $options);
43 
44         if (is_executable($options['imconvert'])) {
45             return new ImageMagickAdapter($imagePath, $options);
46         }
47 
48         if (function_exists('gd_info')) {
49             return new GdAdapter($imagePath, $options);
50         }
51 
52         throw new Exception('No suitable Adapter found');
53     }
54 
55 }
56