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