AbstractDriver.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace Intervention\Image;
  3. abstract class AbstractDriver
  4. {
  5. /**
  6. * Decoder instance to init images from
  7. *
  8. * @var \Intervention\Image\AbstractDecoder
  9. */
  10. public $decoder;
  11. /**
  12. * Image encoder instance
  13. *
  14. * @var \Intervention\Image\AbstractEncoder
  15. */
  16. public $encoder;
  17. /**
  18. * Creates new image instance
  19. *
  20. * @param int $width
  21. * @param int $height
  22. * @param string $background
  23. * @return \Intervention\Image\Image
  24. */
  25. abstract public function newImage($width, $height, $background);
  26. /**
  27. * Reads given string into color object
  28. *
  29. * @param string $value
  30. * @return AbstractColor
  31. */
  32. abstract public function parseColor($value);
  33. /**
  34. * Checks if core module installation is available
  35. *
  36. * @return boolean
  37. */
  38. abstract protected function coreAvailable();
  39. /**
  40. * Returns clone of given core
  41. *
  42. * @return mixed
  43. */
  44. public function cloneCore($core)
  45. {
  46. return clone $core;
  47. }
  48. /**
  49. * Initiates new image from given input
  50. *
  51. * @param mixed $data
  52. * @return \Intervention\Image\Image
  53. */
  54. public function init($data)
  55. {
  56. return $this->decoder->init($data);
  57. }
  58. /**
  59. * Encodes given image
  60. *
  61. * @param Image $image
  62. * @param string $format
  63. * @param int $quality
  64. * @return \Intervention\Image\Image
  65. */
  66. public function encode($image, $format, $quality)
  67. {
  68. return $this->encoder->process($image, $format, $quality);
  69. }
  70. /**
  71. * Executes named command on given image
  72. *
  73. * @param Image $image
  74. * @param string $name
  75. * @param array $arguments
  76. * @return \Intervention\Image\Commands\AbstractCommand
  77. */
  78. public function executeCommand($image, $name, $arguments)
  79. {
  80. $commandName = $this->getCommandClassName($name);
  81. $command = new $commandName($arguments);
  82. $command->execute($image);
  83. return $command;
  84. }
  85. /**
  86. * Returns classname of given command name
  87. *
  88. * @param string $name
  89. * @return string
  90. */
  91. private function getCommandClassName($name)
  92. {
  93. $name = mb_convert_case($name[0], MB_CASE_UPPER, 'utf-8') . mb_substr($name, 1, mb_strlen($name));
  94. $drivername = $this->getDriverName();
  95. $classnameLocal = sprintf('\Intervention\Image\%s\Commands\%sCommand', $drivername, ucfirst($name));
  96. $classnameGlobal = sprintf('\Intervention\Image\Commands\%sCommand', ucfirst($name));
  97. if (class_exists($classnameLocal)) {
  98. return $classnameLocal;
  99. } elseif (class_exists($classnameGlobal)) {
  100. return $classnameGlobal;
  101. }
  102. throw new \Intervention\Image\Exception\NotSupportedException(
  103. "Command ({$name}) is not available for driver ({$drivername})."
  104. );
  105. }
  106. /**
  107. * Returns name of current driver instance
  108. *
  109. * @return string
  110. */
  111. public function getDriverName()
  112. {
  113. $reflect = new \ReflectionClass($this);
  114. $namespace = $reflect->getNamespaceName();
  115. return substr(strrchr($namespace, "\\"), 1);
  116. }
  117. }