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