bundles/dieschittigs/iconic/src/Controller/ImageAssetsController.php line 48

Open in your IDE?
  1. <?php
  2. namespace DieSchittigs\IconicWorld\Controller;
  3. use Symfony\Component\Routing\Annotation\Route;
  4. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  5. use Symfony\Component\HttpFoundation\Response;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Contao\CoreBundle\Framework\ContaoFramework;
  8. use Contao\DirectoryEntryModel;
  9. use Contao\File;
  10. use Contao\Image;
  11. use Symfony\Component\HttpFoundation\BinaryFileResponse;
  12. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  13. use Contao\FilesModel;
  14. use Contao\Database;
  15. use lsolesen\pel\PelJpeg;
  16. use lsolesen\pel\PelDataWindow;
  17. use lsolesen\pel\PelExif;
  18. use lsolesen\pel\PelTiff;
  19. use lsolesen\pel\PelIfd;
  20. use lsolesen\pel\PelTag;
  21. use lsolesen\pel\PelEntryAscii;
  22. use lsolesen\pel\PelEntryShort;
  23. use StringUtil;
  24. /**
  25. * @Route("/iconic-assets", name="ImageAssetsController:class", defaults={"_scope" = "frontend", "_token_check" = false})
  26. */
  27. class ImageAssetsController
  28. {
  29. /**
  30. * @return Response
  31. *
  32. * @Route("/{size}/{filename}", requirements={"filename"=".+"})
  33. */
  34. public function image(Request $request, $size, $filename)
  35. {
  36. $filename = pathinfo($filename)['filename'];
  37. $path = self::generateImage($filename, $size, true);
  38. return new BinaryFileResponse(TL_ROOT . $path, 200, ['Cache-Control' => 'private, max-age=31536000'], false);
  39. }
  40. public static function generateImage($uuid, $size, $override = false)
  41. {
  42. $fileModel = FilesModel::findByUuid($uuid);
  43. if (!$fileModel) {
  44. throw new NotFoundHttpException();
  45. }
  46. $completeOriginalPath = $fileModel->path;
  47. $target = '/assets/images/directories/' . $size . '/' . $uuid . '.' . $fileModel->extension;
  48. $original = new File($completeOriginalPath);
  49. $image = new Image($original);
  50. $imageSize = $original->imageSize;
  51. $wide = $imageSize[0] >= $imageSize[1];
  52. $function = $wide ? 'setTargetHeight' : 'setTargetWidth';
  53. switch ($size) {
  54. case 'lg':
  55. $size = $wide ? 1920 : 1200;
  56. $image->setTargetWidth($size);
  57. break;
  58. case 'md':
  59. $image->$function(600)
  60. ->setResizeMode('proportional');
  61. break;
  62. default: // 'sm'
  63. $image->$function(330)
  64. ->setResizeMode('proportional');
  65. break;
  66. }
  67. $image->setTargetPath($target)
  68. ->executeResize();
  69. return $target;
  70. }
  71. }