<?php
namespace DieSchittigs\IconicWorld\Controller;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Contao\CoreBundle\Framework\ContaoFramework;
use Contao\DirectoryEntryModel;
use Contao\File;
use Contao\Image;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Contao\FilesModel;
use Contao\Database;
use lsolesen\pel\PelJpeg;
use lsolesen\pel\PelDataWindow;
use lsolesen\pel\PelExif;
use lsolesen\pel\PelTiff;
use lsolesen\pel\PelIfd;
use lsolesen\pel\PelTag;
use lsolesen\pel\PelEntryAscii;
use lsolesen\pel\PelEntryShort;
use StringUtil;
/**
* @Route("/iconic-assets", name="ImageAssetsController:class", defaults={"_scope" = "frontend", "_token_check" = false})
*/
class ImageAssetsController
{
/**
* @return Response
*
* @Route("/{size}/{filename}", requirements={"filename"=".+"})
*/
public function image(Request $request, $size, $filename)
{
$filename = pathinfo($filename)['filename'];
$path = self::generateImage($filename, $size, true);
return new BinaryFileResponse(TL_ROOT . $path, 200, ['Cache-Control' => 'private, max-age=31536000'], false);
}
public static function generateImage($uuid, $size, $override = false)
{
$fileModel = FilesModel::findByUuid($uuid);
if (!$fileModel) {
throw new NotFoundHttpException();
}
$completeOriginalPath = $fileModel->path;
$target = '/assets/images/directories/' . $size . '/' . $uuid . '.' . $fileModel->extension;
$original = new File($completeOriginalPath);
$image = new Image($original);
$imageSize = $original->imageSize;
$wide = $imageSize[0] >= $imageSize[1];
$function = $wide ? 'setTargetHeight' : 'setTargetWidth';
switch ($size) {
case 'lg':
$size = $wide ? 1920 : 1200;
$image->setTargetWidth($size);
break;
case 'md':
$image->$function(600)
->setResizeMode('proportional');
break;
default: // 'sm'
$image->$function(330)
->setResizeMode('proportional');
break;
}
$image->setTargetPath($target)
->executeResize();
return $target;
}
}