vendor/imagine/imagine/src/Factory/ClassFactory.php line 80

  1. <?php
  2. namespace Imagine\Factory;
  3. use Imagine\Exception\InvalidArgumentException;
  4. use Imagine\Exception\RuntimeException;
  5. use Imagine\File\Loader;
  6. use Imagine\Image\Box;
  7. use Imagine\Image\ImageInterface;
  8. use Imagine\Image\Metadata\DefaultMetadataReader;
  9. use Imagine\Image\Metadata\ExifMetadataReader;
  10. use Imagine\Image\Metadata\MetadataBag;
  11. use Imagine\Image\Palette\Color\ColorInterface;
  12. use Imagine\Image\Palette\PaletteInterface;
  13. /**
  14.  * The default implementation of Imagine\Factory\ClassFactoryInterface.
  15.  */
  16. class ClassFactory implements ClassFactoryInterface
  17. {
  18.     /**
  19.      * @var array|null
  20.      */
  21.     private static $gdInfo;
  22.     /**
  23.      * {@inheritdoc}
  24.      *
  25.      * @see \Imagine\Factory\ClassFactoryInterface::createMetadataReader()
  26.      */
  27.     public function createMetadataReader()
  28.     {
  29.         return $this->finalize(ExifMetadataReader::isSupported() ? new ExifMetadataReader() : new DefaultMetadataReader());
  30.     }
  31.     /**
  32.      * {@inheritdoc}
  33.      *
  34.      * @see \Imagine\Factory\ClassFactoryInterface::createBox()
  35.      */
  36.     public function createBox($width$height)
  37.     {
  38.         return $this->finalize(new Box($width$height));
  39.     }
  40.     /**
  41.      * {@inheritdoc}
  42.      *
  43.      * @see \Imagine\Factory\ClassFactoryInterface::createFileLoader()
  44.      */
  45.     public function createFileLoader($path)
  46.     {
  47.         return $this->finalize(new Loader($path));
  48.     }
  49.     /**
  50.      * {@inheritdoc}
  51.      *
  52.      * @see \Imagine\Factory\ClassFactoryInterface::createDrawer()
  53.      */
  54.     public function createDrawer($handle$resource)
  55.     {
  56.         switch ($handle) {
  57.             case self::HANDLE_GD:
  58.                 return $this->finalize(new \Imagine\Gd\Drawer($resource));
  59.             case self::HANDLE_GMAGICK:
  60.                 return $this->finalize(new \Imagine\Gmagick\Drawer($resource));
  61.             case self::HANDLE_IMAGICK:
  62.                 return $this->finalize(new \Imagine\Imagick\Drawer($resource));
  63.             default:
  64.                 throw new InvalidArgumentException(sprintf('Unrecognized handle %s in %s'$handle__FUNCTION__));
  65.         }
  66.     }
  67.     /**
  68.      * {@inheritdoc}
  69.      *
  70.      * @see \Imagine\Factory\ClassFactoryInterface::createLayers()
  71.      */
  72.     public function createLayers($handleImageInterface $image$initialKey null)
  73.     {
  74.         switch ($handle) {
  75.             case self::HANDLE_GD:
  76.                 return $this->finalize(new \Imagine\Gd\Layers($image$image->palette(), $image->getGdResource(), (int) $initialKey));
  77.             case self::HANDLE_GMAGICK:
  78.                 return $this->finalize(new \Imagine\Gmagick\Layers($image$image->palette(), $image->getGmagick(), (int) $initialKey));
  79.             case self::HANDLE_IMAGICK:
  80.                 return $this->finalize(new \Imagine\Imagick\Layers($image$image->palette(), $image->getImagick(), (int) $initialKey));
  81.             default:
  82.                 throw new InvalidArgumentException(sprintf('Unrecognized handle %s in %s'$handle__FUNCTION__));
  83.         }
  84.     }
  85.     /**
  86.      * {@inheritdoc}
  87.      *
  88.      * @see \Imagine\Factory\ClassFactoryInterface::createEffects()
  89.      */
  90.     public function createEffects($handle$resource)
  91.     {
  92.         switch ($handle) {
  93.             case self::HANDLE_GD:
  94.                 return $this->finalize(new \Imagine\Gd\Effects($resource));
  95.             case self::HANDLE_GMAGICK:
  96.                 return $this->finalize(new \Imagine\Gmagick\Effects($resource));
  97.             case self::HANDLE_IMAGICK:
  98.                 return $this->finalize(new \Imagine\Imagick\Effects($resource));
  99.             default:
  100.                 throw new InvalidArgumentException(sprintf('Unrecognized handle %s in %s'$handle__FUNCTION__));
  101.         }
  102.     }
  103.     /**
  104.      * {@inheritdoc}
  105.      *
  106.      * @see \Imagine\Factory\ClassFactoryInterface::createImage()
  107.      */
  108.     public function createImage($handle$resourcePaletteInterface $paletteMetadataBag $metadata)
  109.     {
  110.         switch ($handle) {
  111.             case self::HANDLE_GD:
  112.                 return $this->finalize(new \Imagine\Gd\Image($resource$palette$metadata));
  113.             case self::HANDLE_GMAGICK:
  114.                 return $this->finalize(new \Imagine\Gmagick\Image($resource$palette$metadata));
  115.             case self::HANDLE_IMAGICK:
  116.                 return $this->finalize(new \Imagine\Imagick\Image($resource$palette$metadata));
  117.             default:
  118.                 throw new InvalidArgumentException(sprintf('Unrecognized handle %s in %s'$handle__FUNCTION__));
  119.         }
  120.     }
  121.     /**
  122.      * {@inheritdoc}
  123.      *
  124.      * @see \Imagine\Factory\ClassFactoryInterface::createFont()
  125.      */
  126.     public function createFont($handle$file$sizeColorInterface $color)
  127.     {
  128.         switch ($handle) {
  129.             case self::HANDLE_GD:
  130.                 $gdInfo = static::getGDInfo();
  131.                 if (!$gdInfo['FreeType Support']) {
  132.                     throw new RuntimeException('GD is not compiled with FreeType support');
  133.                 }
  134.                 return $this->finalize(new \Imagine\Gd\Font($file$size$color));
  135.             case self::HANDLE_GMAGICK:
  136.                 $gmagick = new \Gmagick();
  137.                 $gmagick->newimage(11'transparent');
  138.                 return $this->finalize(new \Imagine\Gmagick\Font($gmagick$file$size$color));
  139.             case self::HANDLE_IMAGICK:
  140.                 return $this->finalize(new \Imagine\Imagick\Font(new \Imagick(), $file$size$color));
  141.             default:
  142.                 throw new InvalidArgumentException(sprintf('Unrecognized handle %s in %s'$handle__FUNCTION__));
  143.         }
  144.     }
  145.     /**
  146.      * Finalize the newly created object.
  147.      *
  148.      * @param object $object
  149.      *
  150.      * @return object
  151.      */
  152.     protected function finalize($object)
  153.     {
  154.         if ($object instanceof ClassFactoryAwareInterface) {
  155.             $object->setClassFactory($this);
  156.         }
  157.         return $object;
  158.     }
  159.     /**
  160.      * @return array
  161.      */
  162.     protected static function getGDInfo()
  163.     {
  164.         if (self::$gdInfo === null) {
  165.             if (!function_exists('gd_info')) {
  166.                 throw new RuntimeException('GD is not installed');
  167.             }
  168.             self::$gdInfo gd_info();
  169.         }
  170.         return self::$gdInfo;
  171.     }
  172. }