59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 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", ['path'=>$path, 'params'=>$params]);
 | 
						|
 | 
						|
        header("Content-type: {$original_img->getMime()}");
 | 
						|
        return base64_decode($converted);
 | 
						|
    }
 | 
						|
 | 
						|
    private function createVariant(Image $original, ResizeParams $params): string
 | 
						|
    {
 | 
						|
        $quality = $params->quality ?: -1;
 | 
						|
        $this->logger->info("Resizing image", ['params'=>$params]);
 | 
						|
 | 
						|
        $original->toWidth($params->width ?? intval($_ENV["DEFAULT_WIDTH"]));
 | 
						|
 | 
						|
        return $original->encode($quality);
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
} |