ImageUtils.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Service\File\Utils;
  4. use App\Entity\Core\File;
  5. use Liip\ImagineBundle\Imagine\Data\DataManager;
  6. use Liip\ImagineBundle\Imagine\Filter\FilterManager;
  7. class ImageUtils
  8. {
  9. protected const FILTER_CROP = 'crop_filter';
  10. public function __construct(
  11. private DataManager $dataManager,
  12. private FilterManager $filterManager
  13. ){}
  14. /**
  15. * Permet de cropper et retourner une image
  16. * @param File $file : File contenant la définition de l'image
  17. * @return string : Image en Base64
  18. */
  19. public function cropImage(File $file): string{
  20. //On récupère l'image via le dataloader d'imagine liip (dataloader stream qui s'appuie sur gaufrette)
  21. $binary = $this->dataManager->find(self::FILTER_CROP, $file->getPath());
  22. //Si on a une config, on créer l'image
  23. if(!empty($file->getConfig())){
  24. //On applique le filtre crop et on retourne l'image
  25. $binary = $this->filterManager->applyFilter($binary, self::FILTER_CROP, $this->getCroppingConfig($file->getConfig()));
  26. }
  27. return $binary->getContent();
  28. }
  29. /**
  30. * Définit et retourne le tableau de config servant à cropper
  31. * @param string $config : Configuration du File
  32. * @return array[] : tableau de configuration
  33. */
  34. private function getCroppingConfig(string $config): array{
  35. $config = json_decode($config, true);
  36. return [
  37. 'filters' => [
  38. 'crop' => [
  39. 'size' => [intval($config['width']), intval($config['height'])],
  40. 'start' => [intval($config['x']), intval($config['y'])]
  41. ]
  42. ]
  43. ];
  44. }
  45. }