Соразмерные миниатюры

Oct 17, 2008 16:05


Чаще всего картинки для галерей обрезают до центрального квадрата или масштабируют по большей стороне. Я хочу рассказать ещё об одном способе, основная идея которого - миниатюры с одинаковой площадью. Сразу оговорюсь, что есть одно ограничение: сильно вытянутые картинки всё-таки придётся масштабировать по большей стороне, и их площадь будет меньше остальных.

Демо: http://skripnik.com/gallery/

Итак, допустим, что:
  • w_src и h_src - ширина и высота исходной картинки
  • square - сторона квадрата, в который нужно её вписать
  • ratio - пропорции картинки, то есть w_src / h_src
  • ratio_max - максимальные пропорции, после которых картинка масштабируется по большей стороне (я беру 1,6)
  • w_thumb и h_thumb - ширина и высота миниатюры

Алгоритм в этом случае таков:

if (ratio > ratio_max) { w_thumb = square h_thumb = w_thumb / ratio } elseif (ratio < 1 / ratio_max) { h_thumb = square w_thumb = h_thumb * ratio } else { w_thumb = sqrt(square * square / ratio_max * ratio)) h_thumb = w_thumb / ratio }

Хочу обратить внимание на две вещи:
  1. Масштабирование теряет смысл, когда площадь миниатюры получается больше площади исходной картинки.
  2. Получившиеся значения w_thumb и h_thumb будут, скорее всего, дробными.
Previous post Next post
Up