80 lines
2.5 KiB
PHP
80 lines
2.5 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace dominion\file;
|
||
|
|
||
|
use Yii;
|
||
|
use Imagine\Image\Palette\RGB;
|
||
|
use Imagine\Image\ManipulatorInterface;
|
||
|
use Imagine\Image\Point;
|
||
|
use Imagine\Image\ImageInterface;
|
||
|
|
||
|
|
||
|
class Image extends \yii\imagine\Image
|
||
|
{
|
||
|
|
||
|
public static function thumbnail($image, $width, $height, $mode = ManipulatorInterface::THUMBNAIL_OUTBOUND)
|
||
|
{
|
||
|
$img = self::ensureImageInterfaceInstance($image);
|
||
|
/** @var BoxInterface $sourceBox */
|
||
|
$sourceBox = $img->getSize();
|
||
|
$thumbnailBox = static::getThumbnailBox($sourceBox, $width, $height);
|
||
|
|
||
|
$img = $img->thumbnail($thumbnailBox, $mode);
|
||
|
|
||
|
$size = $img->getSize();
|
||
|
|
||
|
$palette = new RGB();
|
||
|
$color = $palette->color(static::$thumbnailBackgroundColor, static::$thumbnailBackgroundAlpha);
|
||
|
|
||
|
// create empty image to preserve aspect ratio of thumbnail
|
||
|
$thumb = static::getImagine()->create($thumbnailBox, $color);
|
||
|
|
||
|
// calculate points
|
||
|
$startX = 0;
|
||
|
$startY = 0;
|
||
|
if ($size->getWidth() < $width) {
|
||
|
$startX = ceil(($width - $size->getWidth()) / 2);
|
||
|
}
|
||
|
if ($size->getHeight() < $height) {
|
||
|
$startY = ceil(($height - $size->getHeight()) / 2);
|
||
|
}
|
||
|
|
||
|
$thumb->paste($img, new Point($startX, $startY));
|
||
|
|
||
|
return $thumb;
|
||
|
}
|
||
|
|
||
|
public static function thumbnailFileTemplate($image, $width, $height, $fileTemplate, $mode = ImageInterface::THUMBNAIL_INSET)
|
||
|
{
|
||
|
$newWidth = $width - $fileTemplate['border_right'] - $fileTemplate['border_left'];
|
||
|
$newHeight = $height - $fileTemplate['border_top'] - $fileTemplate['border_bottom'];
|
||
|
|
||
|
$img = self::ensureImageInterfaceInstance($image);
|
||
|
/** @var BoxInterface $sourceBox */
|
||
|
$sourceBox = $img->getSize();
|
||
|
$thumbnailBox = static::getThumbnailBox($sourceBox, $newWidth, $newHeight);
|
||
|
|
||
|
$img = $img->thumbnail($thumbnailBox, $mode);
|
||
|
$size = $img->getSize();
|
||
|
|
||
|
// calculate points
|
||
|
$startX = 0;
|
||
|
$startY = 0;
|
||
|
if ($size->getWidth() < $newWidth) {
|
||
|
$startX = ceil(($newWidth - $size->getWidth()) / 2);
|
||
|
}
|
||
|
if ($size->getHeight() < $newHeight) {
|
||
|
$startY = ceil(($newHeight - $size->getHeight()) / 2);
|
||
|
}
|
||
|
$startX += $fileTemplate['border_right'];
|
||
|
$startY += $fileTemplate['border_top'];
|
||
|
|
||
|
// create empty image to preserve aspect ratio of thumbnail
|
||
|
$thumb = static::getImagine()->open($fileTemplate['filePatch']);
|
||
|
$thumb->paste($img, new Point($startX, $startY));
|
||
|
|
||
|
return $thumb;
|
||
|
}
|
||
|
|
||
|
}
|