Нужно сделать правильное соотношение сторон, чтобы 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 если оригинал картинки не подходящий. Мой пример хорошо работает, но я не правильно кадрирую размеры, как сделать правильнее?