Вход Регистрация
Файл: concrete5.7.5.6/concrete/vendor/imagine/imagine/lib/Imagine/Imagick/Imagine.php
Строк: 171
<?php

/*
 * This file is part of the Imagine package.
 *
 * (c) Bulat Shakirzyanov <mallluhuct@gmail.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace ImagineImagick;

use 
ImagineExceptionNotSupportedException;
use 
ImagineImageAbstractImagine;
use 
ImagineImageBoxInterface;
use 
ImagineImageMetadataMetadataBag;
use 
ImagineImagePaletteColorColorInterface;
use 
ImagineExceptionInvalidArgumentException;
use 
ImagineExceptionRuntimeException;
use 
ImagineImagePaletteCMYK;
use 
ImagineImagePaletteRGB;
use 
ImagineImagePaletteGrayscale;

/**
 * Imagine implementation using the Imagick PHP extension
 */
final class Imagine extends AbstractImagine
{
    
/**
     * @throws RuntimeException
     */
    
public function __construct()
    {
        if (!
class_exists('Imagick')) {
            throw new 
RuntimeException('Imagick not installed');
        }

        if (
version_compare('6.2.9'$this->getVersion(new Imagick())) > 0) {
            throw new 
RuntimeException('ImageMagick version 6.2.9 or higher is required');
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function open($path)
    {
        
$path $this->checkPath($path);

        try {
            
$imagick = new Imagick($path);
            
$image = new Image($imagick$this->createPalette($imagick), $this->getMetadataReader()->readFile($path));
        } catch (
Exception $e) {
            throw new 
RuntimeException(sprintf('Unable to open image %s'$path), $e->getCode(), $e);
        }

        return 
$image;
    }

    
/**
     * {@inheritdoc}
     */
    
public function create(BoxInterface $sizeColorInterface $color null)
    {
        
$width  $size->getWidth();
        
$height $size->getHeight();

        
$palette null !== $color $color->getPalette() : new RGB();
        
$color null !== $color $color $palette->color('fff');

        try {
            
$pixel = new ImagickPixel((string) $color);
            
$pixel->setColorValue(Imagick::COLOR_ALPHA$color->getAlpha() / 100);

            
$imagick = new Imagick();
            
$imagick->newImage($width$height$pixel);
            
$imagick->setImageMatte(true);
            
$imagick->setImageBackgroundColor($pixel);

            if (
version_compare('6.3.1'$this->getVersion($imagick)) < 0) {
                
$imagick->setImageOpacity($pixel->getColorValue(Imagick::COLOR_ALPHA));
            }

            
$pixel->clear();
            
$pixel->destroy();

            return new 
Image($imagick$palette, new MetadataBag());
        } catch (
ImagickException $e) {
            throw new 
RuntimeException('Could not create empty image'$e->getCode(), $e);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function load($string)
    {
        try {
            
$imagick = new Imagick();

            
$imagick->readImageBlob($string);
            
$imagick->setImageMatte(true);

            return new 
Image($imagick$this->createPalette($imagick), $this->getMetadataReader()->readData($string));
        } catch (
ImagickException $e) {
            throw new 
RuntimeException('Could not load image from string'$e->getCode(), $e);
        }
    }

    
/**
     * {@inheritdoc}
     */
    
public function read($resource)
    {
        if (!
is_resource($resource)) {
            throw new 
InvalidArgumentException('Variable does not contain a stream resource');
        }

        try {
            
$imagick = new Imagick();
            
$imagick->readImageFile($resource);
        } catch (
ImagickException $e) {
            throw new 
RuntimeException('Could not read image from resource'$e->getCode(), $e);
        }

        return new 
Image($imagick$this->createPalette($imagick), $this->getMetadataReader()->readStream($resource));
    }

    
/**
     * {@inheritdoc}
     */
    
public function font($file$sizeColorInterface $color)
    {
        return new 
Font(new Imagick(), $file$size$color);
    }

    
/**
     * Returns the palette corresponding to an Imagick resource colorspace
     *
     * @param Imagick $imagick
     *
     * @return CMYK|Grayscale|RGB
     *
     * @throws NotSupportedException
     */
    
private function createPalette(Imagick $imagick)
    {
        switch (
$imagick->getImageColorspace()) {
            case 
Imagick::COLORSPACE_RGB:
            case 
Imagick::COLORSPACE_SRGB:
                return new 
RGB();
            case 
Imagick::COLORSPACE_CMYK:
                return new 
CMYK();
            case 
Imagick::COLORSPACE_GRAY:
                return new 
Grayscale();
            default:
                throw new 
NotSupportedException('Only RGB and CMYK colorspace are currently supported');
        }
    }

    
/**
     * Returns ImageMagick version
     *
     * @param Imagick $imagick
     *
     * @return string
     */
    
private function getVersion(Imagick $imagick)
    {
        
$v $imagick->getVersion();
        list(
$version) = sscanf($v['versionString'], 'ImageMagick %s %04d-%02d-%02d %s %s');

        return 
$version;
    }
}
Онлайн: 0
Реклама