58 lines
1.6 KiB
PHP
58 lines
1.6 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
|
|
namespace ImageResizer\Lib;
|
|
|
|
use ImageResizer\Models\ResizeParams;
|
|
use ImageResizer\Models\Image;
|
|
use Psr\Log\AbstractLogger;
|
|
|
|
class Resizer
|
|
{
|
|
public function __construct(
|
|
private readonly ImageDb $imageDb,
|
|
private readonly AbstractLogger $logger,
|
|
)
|
|
{}
|
|
|
|
/**
|
|
* @throws \Exception
|
|
*/
|
|
public function performResize(string $path, ResizeParams $params)
|
|
{
|
|
// Check if the image has already been processed
|
|
if ($image = $this->imageDb->findImage($path, $params)) {
|
|
$this->logger->info("Found existing image", ['path'=>$path, 'params'=>$params]);
|
|
header("Content-type: {${$image->getMime()}}");
|
|
return base64_decode($image->encode(75));
|
|
}
|
|
|
|
// Fetch the image at the given URL
|
|
$original_img = Image::fromUrl($_ENV['ROOT_DOMAIN'] . $path);
|
|
$converted = $this->createVariant($original_img, $params);
|
|
$this->logger->info("Created variant", ['path'=>$path, 'params'=>$params]);
|
|
|
|
// Store the image in the database
|
|
$this->imageDb->saveImage(
|
|
$path,
|
|
$params,
|
|
$converted
|
|
);
|
|
$this->logger->info("Saved image for $path");
|
|
|
|
header("Content-type: {$original_img->getMime()}");
|
|
return base64_decode($converted);
|
|
}
|
|
|
|
private function createVariant(Image $original, ResizeParams $params): string
|
|
{
|
|
$quality = $params->quality ?: -1;
|
|
|
|
$original->toWidth($params->width ?? intval($_ENV["DEFAULT_WIDTH"]));
|
|
|
|
return $original->encode($quality);
|
|
}
|
|
|
|
|
|
} |