PHP изменяет фиксированный размер изображения, но сохраняет ориентацию

Мне нужно изменить размер изображений в php с помощью GD до фиксированного размера, но сохранить ориентацию (портрет/пейзаж), а именно:

книжная: 375 x 500 пикселей альбомная: 500 x 375 пикселей

Все, что я пробовал, всегда игнорирует ориентацию и делает их альбомными.

Кто-нибудь может помочь?


person designvoid    schedule 31.03.2010    source источник


Ответы (3)


Проверьте ширину и высоту входящего изображения. Если ширина больше высоты, сделайте целевой размер 500 x 375, в противном случае сделайте его 375 x 500. Затем запустите код изменения размера с этими целевыми размерами.

person Scott Saunders    schedule 31.03.2010
comment
И поскольку у вас уже есть ресурс изображения gd, вы можете использовать imagesx() и imagesy() для получения ширины и высоты. - person VolkerK; 31.03.2010

Вот метод из класса изображений, который я использую, который вычисляет масштабированные размеры изображения. Он работает, помещая изображение в квадратную рамку.

Вы можете установить $box = 500, а затем передать $x и $y изображения, размер которого вы пытаетесь изменить, и оно всегда будет возвращать правильные измененные размеры, сохраняя соотношение сторон.

public static function fit_box($box = 200, $x = 100, $y = 100)
{
  $scale = min($box / $x, $box / $y, 1);
  return array(round($x * $scale, 0), round($y * $scale, 0));
}
person Giles Smith    schedule 31.03.2010
comment
Хм, вопрос не в масштабировании, а в том, как определить, имеет ли изображение портретную (высота›=ширина) или альбомную (ширина›=высота) ориентацию. - person VolkerK; 31.03.2010
comment
Я предположил, что он хотел сохранить соотношение сторон, а также ориентацию при изменении размера изображений, что и будет делать моя функция. Функция всегда будет поддерживать больший размер в 500 пикселей, сопоставляя более короткий размер без необходимости знать ориентацию. - person Giles Smith; 31.03.2010

На этот вопрос был дан правильный ответ здесь: like-desk">Как определить угол съемки фотографии и автоматически повернуть ее для отображения на веб-сайте, как это делают настольные приложения при просмотре?

Короткий ответ: вам нужно использовать функцию exif_read_data(), чтобы получить атрибут «Ориентация» фотографии, а затем вы можете использовать это значение, чтобы определить, нужно ли вам поворачивать фотографию. Ответ выше содержит пример PHP-кода, который показывает, как это сделать.

person Justin Watt    schedule 04.12.2011