Вход Регистрация
Файл: system/vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php
Строк: 150
<?php

namespace InterventionImageGd;

use 
InterventionImageExceptionNotReadableException;
use 
InterventionImageExceptionNotSupportedException;
use 
InterventionImageImage;

class 
Decoder extends InterventionImageAbstractDecoder
{
    
/**
     * Initiates new image from path in filesystem
     *
     * @param  string $path
     * @return InterventionImageImage
     */
    
public function initFromPath($path)
    {
        if ( ! 
file_exists($path)) {
            throw new 
NotReadableException(
                
"Unable to find file ({$path})."
            
);
        }

        
// get mime type of file
        
$mime finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path);

        
// define core
        
switch (strtolower($mime)) {
            case 
'image/png':
            case 
'image/x-png':
                
$core = @imagecreatefrompng($path);
                break;

            case 
'image/jpg':
            case 
'image/jpeg':
            case 
'image/pjpeg':
                
$core = @imagecreatefromjpeg($path);
                if (!
$core) {
                    
$core= @imagecreatefromstring(file_get_contents($path));
                }
                break;

            case 
'image/gif':
                
$core = @imagecreatefromgif($path);
                break;

            case 
'image/webp':
            case 
'image/x-webp':
                if ( ! 
function_exists('imagecreatefromwebp')) {
                    throw new 
NotReadableException(
                        
"Unsupported image type. GD/PHP installation does not support WebP format."
                    
);
                }
                
$core = @imagecreatefromwebp($path);
                break;

            default:
                throw new 
NotReadableException(
                    
"Unsupported image type. GD driver is only able to decode JPG, PNG, GIF or WebP files."
                
);
        }

        if (empty(
$core)) {
            throw new 
NotReadableException(
                
"Unable to decode image from file ({$path})."
            
);
        }

        
$this->gdResourceToTruecolor($core);

        
// build image
        
$image $this->initFromGdResource($core);
        
$image->mime $mime;
        
$image->setFileInfoFromPath($path);

        return 
$image;
    }

    
/**
     * Initiates new image from GD resource
     *
     * @param  Resource $resource
     * @return InterventionImageImage
     */
    
public function initFromGdResource($resource)
    {
        return new 
Image(new Driver$resource);
    }

    
/**
     * Initiates new image from Imagick object
     *
     * @param  Imagick $object
     * @return InterventionImageImage
     */
    
public function initFromImagick(Imagick $object)
    {
        throw new 
NotSupportedException(
            
"Gd driver is unable to init from Imagick object."
        
);
    }

    
/**
     * Initiates new image from binary data
     *
     * @param  string $data
     * @return InterventionImageImage
     */
    
public function initFromBinary($binary)
    {
        
$resource = @imagecreatefromstring($binary);

        if (
$resource === false) {
             throw new 
NotReadableException(
                
"Unable to init from given binary data."
            
);
        }

        
$image $this->initFromGdResource($resource);
        
$image->mime finfo_buffer(finfo_open(FILEINFO_MIME_TYPE), $binary);

        return 
$image;
    }

    
/**
     * Transform GD resource into Truecolor version
     *
     * @param  resource $resource
     * @return bool
     */
    
public function gdResourceToTruecolor(&$resource)
    {
        
$width imagesx($resource);
        
$height imagesy($resource);

        
// new canvas
        
$canvas imagecreatetruecolor($width$height);

        
// fill with transparent color
        
imagealphablending($canvasfalse);
        
$transparent imagecolorallocatealpha($canvas255255255127);
        
imagefilledrectangle($canvas00$width$height$transparent);
        
imagecolortransparent($canvas$transparent);
        
imagealphablending($canvastrue);

        
// copy original
        
imagecopy($canvas$resource0000$width$height);
        
imagedestroy($resource);

        
$resource $canvas;

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