<?php
namespace Troika\MainBundle\Helper;
use Imagick;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ImageHelper
{
public const ImagickCOLOR_OPACITY = 18;
public static function preview($img, $widthO = 285, $heightO = 180, $name)
{
try {
$imgFile = $_SERVER['DOCUMENT_ROOT'] . $img;
$imageSize = @getimagesize($imgFile);
if (!is_array($imageSize)) {
throw new NotFoundHttpException('Файл изображения не найден');
}
$image = new Imagick($imgFile);
$height = $image->getImageHeight();
$width = $image->getImageWidth();
if ($width > $height) {
$ratio = $widthO / $heightO - $width / $height;
if ($ratio > 0) {
$heightRatio = $height - $width * $heightO / $widthO;
$image->cropImage($width, $height - $heightRatio, 0, ($heightRatio / 2));
} else {
$widthRatio = $width - $height * $widthO / $heightO;
$image->cropImage($width - $widthRatio, $height, ($widthRatio / 2), 0);
}
$image->resizeImage($widthO, $heightO, self::ImagickCOLOR_OPACITY, true);
$thumbnail = $image->getImageBlob();
} else {
$nWidth = $width * ($heightO / $height);
$image->resizeImage(
(int)($width * ($heightO / $height)),
(int)$heightO,
self::ImagickCOLOR_OPACITY,
true
); //Imagick::COLOR_OPACITY
$imagePod = new Imagick();
$imagePod->newImage($widthO, $heightO, new \ImagickPixel('transparent'));
$imagePod->setImageFormat('png');
$imagePod->setImageVirtualPixelMethod(\Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$imagePod->compositeImage($image, \Imagick::COMPOSITE_PLUS, ($widthO - $nWidth) / 2, 0);
$thumbnail = $imagePod->getImageBlob();
header("Content-Type: image/png");
echo $thumbnail;
return;
}
if (!$name) {
$image->writeImage($_SERVER['DOCUMENT_ROOT'] . '/cache' . $img);
touch($_SERVER['DOCUMENT_ROOT'] . '/cache' . $img);
} else {
$image->writeImage($_SERVER['DOCUMENT_ROOT'] . '/cache' . $name);
touch($_SERVER['DOCUMENT_ROOT'] . '/cache' . $name);
}
header("Content-Type: image/jpeg");
echo $thumbnail;
} catch (\Exception $e) {
throw new NotFoundHttpException('Изображение не найдено',$e);
}
}
public static function watermark($img)
{
try {
if (class_exists('Imagick')) {
$image = new Imagick($_SERVER['DOCUMENT_ROOT'] . $img);
$wm = new Imagick($_SERVER['DOCUMENT_ROOT'] . '/troika.png');
$widthRatio = $image->getImageWidth() / 1096;
$height = $wm->getImageHeight() * $widthRatio;
//$wm->adaptiveResizeImage($image->getImageWidth(), $height, false);
$wm->scaleImage($image->getImageWidth(), $height, false);
$image->setImageVirtualPixelMethod(\Imagick::VIRTUALPIXELMETHOD_TRANSPARENT);
$image->compositeImage(
$wm,
\Imagick::COMPOSITE_PLUS,
($image->getImageWidth() - $wm->getImageWidth()) / 2,
($image->getImageHeight() - $wm->getImageHeight()) / 2
);
$image->writeImage($_SERVER['DOCUMENT_ROOT'] . $img);
}
} catch (\Exception $e) {
return;
}
}
}