В настоящее время я использую хранилище BLOB-объектов для создания миниатюр для изображений, однако мне нравится сохранять размеры миниатюр в теге img
, так как это хорошая практика, которая помогает ускорить рендеринг и делает частично загруженную страницу выглядеть немного лучше.
Как бы я рассчитал размеры миниатюры, созданной в интернет-магазине, зная только размеры исходного изображения?
Мои предыдущие попытки были не очень точными, большую часть времени они были отклонены на один или два пикселя (вероятно, из-за округления).
Я понимаю, что получение эскиза и использование API изображений для проверки размеров будет работать, но я думаю, что это неэффективно.
Вот код, который я использую для его вычисления на данный момент, однако он иногда отключается на один пиксель, из-за чего браузер немного растягивает изображение, вызывая изменения размеров артефактов и снижая производительность.
from __future__ import division
def resized_size(original_width, original_height, width, height):
original_ratio = float(original_width) / float(original_height)
resize_ratio = float(width) / float(height)
if original_ratio >= resize_ratio:
return int(width), int(round(float(width) / float(original_ratio)))
else:
return int(round(float(original_ratio) * float(height))), int(height)
Точность очень важна!