Модели, изображения, превью

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Ответить
maxyc
Сообщения: 124
Зарегистрирован: 2010.01.13, 09:11

Модели, изображения, превью

Сообщение maxyc »

Перебрал кучи бехевиоров, кучи модулей и посмотрел что люди воротят. Мой склад ума решил сделать (как ему кажется) проще и понятней.

есть модель File (id, original_name, size, height, width, type[image/*])

Есть модель новости, модель пользователя. у них есть привязка BELONGS_TO к модели File.

Абстрактный код:

Код: Выделить всё

News::model()->find(...)->image
User::model()->find(...)->avatar
Так как image||avatar - это конкретный объект - мы можем обратиться ко всем полям, это вес, размеры и прочее.
У модели File есть так же магический метод getPreview($pattern);

Код: Выделить всё

News::model()->find(...)->image->getPreview('news.small')
User::model()->find(...)->avatar->getPreview('user.blog.avatar.small') 
$pattern - изначально заданные шаблоны размеров в конфиге:

Код: Выделить всё

"params"=>array(
'Imagine'=>array(
            'templates'=>array(
                'user.small.extra'=>array(
                    'width'=>30,
                    'height'=>30,
                    'quality'=>100
                ),
                'user.small.blog'=>array(
                    'width'=>75,
                    'height'=>75,
                    'quality'=>100
                ),
                'user.small'=>array(
                    'width'=>175,
                    'height'=>175,
                    'quality'=>100
                ),

                'blog.small'=>array(
                    'width'=>175,
                    'height'=>175,
                    'quality'=>100
                ),
                'blog.medium'=>array(
                    'width'=>320,
                    'height'=>240,
                    'quality'=>100
                ),
            )
        ),
) 
в методе File::getPreview можно использовать какой угодно обработчик картинок. В моем случае это Imagine

Вобщем вот модель
http://pastebin.com/KbmxM8Q4

на кривость кода не особо обращайте внимания. она далека от завершения. пока я занят другим функционалом. но к концу месяца дойдут руки прривести порядок и здесь

подскажите, со своей точки зрения. чем мой подход плох?

// todo
1. в upload принудительно добавлю регенерацию изображения, дабы лишить возможности встроить код в картинки.
2. модель FILE служит не только для изображений. это единый мост между файлами и записями CMS
3. в модель принудительно так же для каждого размера будет генерироваться картинка копия с ватермаркс, nginx будет для внешних сайтов (типа гуглокартинок и т.п.) подставлять ссылку на сайт
4
5
6
...
dws.Vad
Сообщения: 10
Зарегистрирован: 2013.11.06, 10:46

Re: Модели, изображения, превью

Сообщение dws.Vad »

Я вас правильно понял - вы собираетесь на лету - резать картинку, менять качество, и лепить к ней водяной знак? Прежде чем отдать картинку бедному клиенту, терпеливо ждущему, пока вы закончите?
И так будет с каждой картинкой?
Каждый раз, когда она потребуется клиенту?
maxyc
Сообщения: 124
Зарегистрирован: 2010.01.13, 09:11

Re: Модели, изображения, превью

Сообщение maxyc »

нет. только в первый раз, когда запрос на картинку идет впервые, она сгенерится. отдаваться будет nginx'ом.
для особенно нагруженных, можно будет при заливке картинки кроном пробегаться и генерить превью заранее по списку шаблонов в конфиге
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: Модели, изображения, превью

Сообщение asisdes »

А вы еще не закончили?!
Я бы опробывал код
Изображение
maxyc
Сообщения: 124
Зарегистрирован: 2010.01.13, 09:11

Re: Модели, изображения, превью

Сообщение maxyc »

asisdes писал(а):А вы еще не закончили?!
Я бы опробывал код
хм. а я за неимением спроса и не стал ничего доделывать. у меня работет прекрасно и ладно.
Ответить