Как изменить размер картинки налету и сохранить её в папку?
В проекте для файлов у меня есть сущность File. Для некоторых файлов, а именно картинок, нужна уменьшенная копия, поэтому я создал еще одно поле для неё. НО спустя некоторое время возникла потребность добавить еще одну копию картинки другого размера, но загрязнять базу данными лишними полями нет желания.
Недавно работая с CMS, я обратил внимание, что миниатюры создаются и сохраняются без участия базы данных. Немного поразмыслив, я понял принцип действия. Когда пользователь посещает страницу, на которой должна быть миниатюра, сервер берет изображение, уменьшает его и сохраняет в папку cache для быстрого вызова при следующих запросах.
Предполагаю, что у Symfony (3.0) уже есть бандл для удобной манипуляции изображениями из Twig. Посоветуйте, пожалуйста, стабильный пучек.
В принципе несложно создать TWIG фильтр. Но не хочется тратить время на создание велосипеда и неизвестно с какими трудностями еще придется столкнуться.
а как сделать путь к картинке с водяными знаками сложнее?
Я добавил на картинку водяной знак, LiipImagineBundle сохраняет её в папку кеша повторяя структуру каталогов. Следовательно не трудно будет получить оригинал картинки, удалив из пути папку кеша.
Например
Фотка с ВЗ была сохранена и получить доступ к ней можно по ссылке: localhost:8000/media/cache/complex_plan/static/pho...
Чтобы получить доступ к оригиналу достаточно удалить /media/cache/complex_plan: localhost:8000/static/photo.jpg
BoShurik: как раз и не понимаю, что он разрешает. Как я понял (методом исключения) это подогрев кэша и удаление кэш-картинок тех фотографий которых уже нет в файловой системе, но боюсь ошибиться.
BoShurik: ясно. А возможно ли сделать warmup в LiipImagineBundle. Я на картинки добавил оптимизацию, теперь они на сайте первый раз очень долго загружаются. И это не радует.
Это уже не изменение картинки на лету и тут вам этот бандл по сути и не нужен. Можете использовать "imagine/Imagine" напрямую, либо реализовать изменение размеров, как сделано в бандле: https://github.com/liip/LiipImagineBundle/blob/1.0...
BoShurik: здравствуйте, а, подскажите, как "imagine/Imagine" использовать напрямую? Решил все таки сделать создание миниатюр и обработку картинок сразу после их загрузки на сервер, а не в момент их просмотра. Возможно ли используя готовые фильтры в imagine отредактировать картинку и сохранить в произвольное место?
А вообще сомнительное желание. В случае смены дизайна придется перегенерировать все картинки. Не то чтобы это сложно, но в случае с фильтрами вообще не придется ничего делать. А лучший код - это не написанный код :)
BoShurik: не так. Дизайн не меняется и фильтры тоже. Сейчас на сервере уже не хватает места, поэтому я хочу картинки загруженные пользователями удалить и в будущем сохранять только картинки с наложенными фильтрами. В моем случае это: изменение размера, водные знаки и оптимизация.