Всем привет! Появилась необходимость отдавать через API размеры изображений.
Все изображения хранятся хранятся в разном формате, загружать на сервер можно тоже разные размеры.
для изображений создана таблица в БД images, где хранится информация об оригинале картинки. Ссылки на уменьшенные копии генерируются в php.
Например, к посту привязано 2 картинки, значит в БД мы найдем 2 записи (id, name, post_id, width, height)
Скрипт php знает как сгенерировать ссылку на оригинал и на уменьшенные копии по полю name, размер оригинала так же хранится рядом. Но как быть с уменьшенными копиями?
У меня получился такой выход...
Так как скрипт знает как обрезать и уменьшать изображения при загрузке - он должен использовать эти же данные при отдаче уменьшенных копий. А это значит, что если получен оригинал размером 600x400, то зная, что при загрузке создавалось изображение размером 300x200 и 100x100, мы так же даем ссылки на них и указываем эти же размеры.
Правильный ли это подход?
Мне кажется он сделан на коленке... Ведь если я поменяю через год размер для загружаемых картинок, то для старых эти размеры уже не будут соответствовать реальным.
С другой стороны, если при каждом получении данных, проверять размер всех картинок и всех уменьшенных копий функцией getimagesize, получится слишком ресурсоемко. Ведь на странице может быть до нескольких сотен изображений помноженное на количество размеров. Итого порядка 2-3 тысяч выполнений функции getimagesize
Добрый вечер.
При загрузке генерируйте все необходимые размеры. В базе храните путь к оригиналу, а пути к копиям можно уже генерировать по необходимости.
Например:
/path/to/big/photo/image.jpg
/path/to/big/photo/middle/image.jpg
/path/to/big/photo/small/image.jpg
slo_nik, Спасибо, да, я так и делаю, но вопрос в том, как и где хранить размеры вот этих изображений:
/path/to/big/photo/middle/image.jpg
/path/to/big/photo/small/image.jpg
Алексей Коновалов, а зачем? В middle средний размер, в small маленький.
Выводите изображение, в зависимости от нужного размера подставляете в ссылку или middle или small. Изображения будут браться из нужных директорий.
Можете добавлять размер изображение в имя файла.
С другой стороны, если при каждом получении данных, проверять размер всех картинок и всех уменьшенных копий функцией getimagesize, получится слишком ресурсоемко. Ведь на странице может быть до нескольких сотен изображений помноженное на количество размеров. Итого порядка 2-3 тысяч выполнений функции getimagesize
Шо мешает их кэшировать? Нет на диске тумбы - сгенерил, есть - вернул.
Спасибо за отклик... Имеете ввиду кешировать на диске или в памяти? Опять же.. .к чему привязывать размер... к ссылке? Не совсем вариант... Разве что к папке в которой хранится уменьшенная копия
Спасибо за отклик, но мне кажется все-таки "дешевле" выполнить 3 тысячи функций getimagesize чем сделать за открытие страницы 3 тысячи копий изображения ;)
Алексей Коновалов, зависит от задачи) у меня в компании более 100Gb фотографий. 90% из них - не частый доступ, а 5% дальше thumb не идёт. Я генерирую фотографии нужного размера в локальный кэш вебсервера на сутки. Так что при повторном обращении если ресайз есть в кэше то он берется оттуда