Лучшие практики для изображений с Codeigniter: создание больших пальцев или изменение размера на лету - PullRequest
0 голосов
/ 29 апреля 2010

Я знаю, что с CI было много написано о создании эскизов и тому подобном, но я хотел объяснить, что я сделал, и посмотреть, какой совет по наилучшей практике я смог найти. Вот моя история ...

В настоящее время у меня есть сайт, который позволяет пользователям загружать коллекции фотографий в проекты, которые они создали после первого создания учетной записи. После создания учетной записи сайт генерирует папки для пользователей следующим образом для каждого из пяти предварительно определенных проектов:

/ студентов / имя пользователя / project_num / изображения / превью /

(Это означает, что в предварительно созданной папке студентов, имя пользователя, имя_проекта, папки с изображениями и превью создаются рекурсивно пять раз.)

Когда пользователь загружает изображения в проект, у меня есть контроллер галереи, который загружает полные изображения в папку изображений для project_num, а затем создает уменьшенный эскиз, который сохраняет его соотношение. Пока все хорошо.

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

(Чтобы было понятно, путь таков: нажмите на миниатюру—> загрузите масштабированное полноразмерное (среднее) изображение через ajax в область отображения над большими пальцами—> нажмите на изображение среднего размера—> загрузите полноразмерное изображение через лайтбокс или что-то в этом роде.)

У меня все работает до этого момента, за исключением того, что, как можно себе представить, изменение размеров полноразмерных изображений с помощью css не поддерживает соотношение сторон для больших пальцев, а это значит, что мне нужно найти лучший способ изменить их размер.

Размышляя об этом, я подумал, что у меня есть два варианта:

  1. Я могу изменить размер изображения на лету, когда пользователь нажимает на миниатюру, чтобы загрузить изображение среднего размера через ajax. (У меня есть метод 'get_image ($ url)' в моем контроллере галереи, который просто загружает представление с тегом изображения и источником изображения, передаваемым на него, и т. Д.) Я подумал, что, возможно, я мог бы сначала отправить его в мою модель галереи, изменить размер это там на лету, и отправьте его на просмотр. Проблема, с которой я сталкиваюсь, состоит в том, что изменение размера на лету и отображение его дает мне необработанные данные изображения (я извиняюсь, я не знаю, что это правильный термин). Я пытался использовать data_uris для форматирования необработанных данных во что-то эхо, но безуспешно. Возможен ли этот метод?

  2. Второй вариант, который я рассмотрел, заключался в создании второго эскиза среднего размера, когда пользователь загружает изображение с параметром keep_ratio, установленным в значение true. Этот метод несколько менее идеален, учитывая, что при предоставлении пользователю возможности удалить свои проекты мне нужно будет отсканировать дополнительный набор изображений для удаления. Определенно, не такая уж и большая сделка, но я решил, что чего-то такого можно избежать, создав изображение среднего размера на лету.

Надеюсь, я был ясен в своих объяснениях, если долго скучал! Мне очень любопытно посмотреть, какие предложения есть у людей о том, как лучше всего с этим справиться.

Большое спасибо за чтение, и любые предложения очень ценятся!

Стив К.

1 Ответ

1 голос
/ 01 мая 2010

Вы не хотите делать что-то настолько сложное в вычислительном отношении, как изменение размера изображения более одного раза для каждого изображения. Это слишком дорого.

Когда ваш посетитель загрузит изображение, просто измените его размер дважды. Сделайте большой и средний палец. Вероятно, я бы также вел учет всех загруженных изображений в таблице базы данных где-то с project_id и user_id в качестве внешних ключей. Они избавят вас от необходимости «сканировать», чтобы удалить изображения. Вы знаете, где они.

...