Файл: gapps/vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php
Строк: 147
<?php
namespace InterventionImageGd;
use InterventionImageImage;
class Decoder extends InterventionImageAbstractDecoder
{
/**
* Initiates new image from path in filesystem
*
* @param string $path
* @return InterventionImageImage
*/
public function initFromPath($path)
{
$info = @getimagesize($path);
if ($info === false) {
throw new InterventionImageExceptionNotReadableException(
"Unable to read image from file ({$path})."
);
}
// define core
switch ($info[2]) {
case IMAGETYPE_PNG:
$core = @imagecreatefrompng($path);
break;
case IMAGETYPE_JPEG:
$core = @imagecreatefromjpeg($path);
break;
case IMAGETYPE_GIF:
$core = @imagecreatefromgif($path);
break;
default:
throw new InterventionImageExceptionNotReadableException(
"Unable to read image type. GD driver is only able to decode JPG, PNG or GIF files."
);
}
if ($core === false) {
throw new InterventionImageExceptionNotReadableException(
"Unable to read image from file ({$path})."
);
}
$this->gdResourceToTruecolor($core);
// build image
$image = $this->initFromGdResource($core);
$image->mime = $info['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 InterventionImageExceptionNotSupportedException(
"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 InterventionImageExceptionNotReadableException(
"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($canvas, false);
$transparent = imagecolorallocatealpha($canvas, 255, 255, 255, 127);
imagefilledrectangle($canvas, 0, 0, $width, $height, $transparent);
imagecolortransparent($canvas, $transparent);
imagealphablending($canvas, true);
// copy original
imagecopy($canvas, $resource, 0, 0, 0, 0, $width, $height);
imagedestroy($resource);
$resource = $canvas;
return true;
}
}