@rusgayfer

Как сделать правильное соотношение сторон через ImageMagick?

Нужно сделать правильное соотношение сторон, чтобы Instagram принимал загрузку фотографии в пост.

Документация фейсбука говорит следующее:

Требования к фото

Максимальный размер файла: 8 МБ.
Соотношение сторон: в диапазоне от 4:5 до 1,91:1.
Минимальная ширина: 320 (при необходимости увеличивается до минимальной).
Максимальная ширина: 1 440 (при необходимости уменьшается до максимальной).
Высота: зависит от ширины и соотношения сторон.
Форматы: JPEG.


Мой код:

$photo_original = 'https://sun9-57.userapi.com/impg/c4h_LxUAm3LtkUQrTxjLn63uWYvrEf2qZ4rBHg/47dyzCaV5D4.jpg?size=960x960&quality=96&sign=ec216b9dd8224b8b02670d6e8f0f9fac&type=album';

   $bg = new Imagick($photo_original);
      
   if($bg->getImageWidth() < 320 && $bg->getImageHeight() <= 168) {
      $bg->adaptiveResizeImage(320,168);
   }
   elseif($bg->getImageWidth() > 320 && $bg->getImageHeight() < 168) {
      $bg->adaptiveResizeImage($bg->getImageWidth(), $bg->getImageWidth()/1.9);
   }
   elseif($bg->getImageWidth() < 320 && $bg->getImageHeight() > 168) {
      $bg->adaptiveResizeImage($bg->getImageHeight()*1.9, $bg->getImageHeight());
   } else {
      $bg->adaptiveResizeImage($bg->getImageWidth(), $bg->getImageWidth()/1.9);
   }

   $bg->blurImage(0, 6);
           
   $img_url = new Imagick($photo_original);
   $img_url->optimizeImageLayers(); // Оптимизируем изображение

   $deltaX = $bg->getImageWidth() - $img_url->getImageWidth();
   $deltaY = $bg->getImageHeight() - $img_url->getImageHeight();
            
   $bg->compositeImage($img_url, Imagick::COMPOSITE_ATOP, $deltaX / 2, $deltaY / 2); // Накладываем на фон по центру

   header("Content-Type: image/jpeg");
   echo $bg->getImageBlob();


Мне нужно сделать кадрирование изображений под Instagram если оригинал картинки не подходящий. Мой пример хорошо работает, но я не правильно кадрирую размеры, как сделать правильнее?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы