CImageHandler - работа с изображениями

Выкладываем свои наработки
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

Вынес документацию на гуглкод http://code.google.com/p/yii-components ... ageHandler
Постепенно все мои компоненты будут переезжать туда
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: CImageHandler - работа с изображениями

Сообщение Troy »

лучше гитхаб тогда
Skiller
Сообщения: 627
Зарегистрирован: 2011.11.27, 00:21

Re: CImageHandler - работа с изображениями

Сообщение Skiller »

Полезная вещь,как-нибудь побробую :) единственное еще что смутило, это метод с кучей параметров, уж очень трудно будет их запомнить даже с учетом IDE и прочего, замените на массив или объект что-ли)
это

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

public function text($text, $fontFile, $size=12, $color=array(0, 0, 0), $corner=self::CORNER_LEFT_TOP, $offsetX=0, $offsetY=0, $angle=0)
 
на

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

public function text(CImageText $text); //все параметры вынесети в объект
 
тогда будет проще потом задавать если что и модернизировать как либо на свой вкус :)

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

$ih->text(new CImageText(array(
    'corner' => CImageText::CORNER_LEFT_TOP, //etc...
))); //все параметры вынесети в объект
 
P.S. и сделайте под 5.3 с namespace :)
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

Обновил компонент. Изменения:
1. Перезагрузка картинки из памяти вместо харда
2. Сохранение полупрозрачности работало не всегда. Исправлено.
3. Исправлено некорректное изменение размеров изображения в resizeCanvas
4. Добавлен метод grayscale для создания черно-белых изображений

Всем большое спасибо за критику и поддержку! Отдельное спасибо HotAlex и Sc@M.

Заливку бекграунда делать не стал, так как существует хотя и не элегантный, но очень простой воркераунд:

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

Yii::app()->ih->load($_SERVER['DOCUMENT_ROOT'] . '/upload/test.png')
     ->resizeCanvas(Yii::app()->ih->width,Yii::app()->ih->height,array(0, 255, 0))
     ->show();
Также не добавлял поддержку старых версий PHP и GD (как у Sc@M), поскольку Yii и так требует PHP 5.

Ссылки на документацию и загрузки в первом посте.

В планах на будущее:
1. кэширование (пока в наибольшем приоритете)
2. "амбилайт" превюшки
3. обертка над ImageMagic, с возможностью переключения между GD и ImageMagic (хотя не уверен что есть такая необходимость)
Troy писал(а):лучше гитхаб тогда
Пока гуглкод, потом возможно переедем.
Skiller писал(а):Полезная вещь,как-нибудь побробую :) единственное еще что смутило, это метод с кучей параметров, уж очень трудно будет их запомнить даже с учетом IDE и прочего, замените на массив или объект что-ли)
Спасибо! Идея хорошая, подумаю как лучше реализовать.
Skiller писал(а):P.S. и сделайте под 5.3 с namespace :)
Это уже после выхода Yii2 :)
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: CImageHandler - работа с изображениями

Сообщение Troy »

С гитхабом было бы намного проще помогать, я бы за оберетку над имагиком бы взялся.
Mirocow
Сообщения: 52
Зарегистрирован: 2011.12.05, 20:01
Контактная информация:

Re: CImageHandler - работа с изображениями

Сообщение Mirocow »

присоеденяюсь к просьбе о переносе в репозиторий, хоть git хоть mercurial
Ищу работу: viewtopic.php?f=31&t=50584
GitHub: https://github.com/mirocow

Стоимость работ: от $30 час

тел/vbr/wsp: +7 (925) 514-63-53
skype/tlgrm: Mirocow
email: mr.mirocow@gmail.com

PHP Senior Developer aka Mirocow
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: CImageHandler - работа с изображениями

Сообщение Troy »

На гитхабе каждый второй имеет свой аккаунт, было бы всяко проще помогать.
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

хорошо, в течении недели переедем на гитхаб. от помощи не откажусь, конечно
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

Код мигрировал на гитхаб https://github.com/tokolist/yii-components
Обновил ссылки в первом посте
Страница с гуглкода в скором времени будет удалена
paramonov
Сообщения: 1
Зарегистрирован: 2012.07.17, 14:52

Re: CImageHandler - работа с изображениями

Сообщение paramonov »

А я вот битый час понять не могу в чём причина неудачи? Натыкаясь на этот компонент сервер возвращает 500 ошибку и больше ничего. Тот же $photo->saveAs(путь к файлу) - прекрасно работает, а Yii::app()->ih упорно не хочет обрабатывать картинку и ничего в ответ не говорит, только в случае неверного указания пути к файлу он выдаёт исключение, мол, нет такого файла :(

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

                    
foreach($model->photo as $photo)
{
    $atype = explode('/', $photo->type);
    $type = $atype[1];
                        
    Yii::app()->ih
        ->load($photo->tempName)
        ->thumb('150', '113')
        ->save($dir . '/thumb/'. md5_file($photo->tempName) . '.' . $type)
        ->reload()
        ->thumb('600', '450')
        ->save($dir . '/'. md5_file($photo->tempName) . '.' . $type);
} 
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

paramonov Сложно сказать из-за чего может возникать эта ошибка, но 500 это ошибка сервера и вероятней всего что-то не так с настройками сервера (точней сказать не смогу, предполагаю что-то с библиотекой GD).

Хочу еще обратится к сообществу с просьбой о совете об организации кэширования. У меня есть несколько возможных вариантов, пока не знаю на каком лучше остановится:
1. htaccess проверяет существование файла и если файл не существует, то он создается скриптом
2. компонент сначала создает сценарий (массив с операциями, которые должны быть выполнены над картинкой) без обработки изображения, а при вызове save() выполняется проверка существования файла и если не существует, то сценарий выполняется
3. то же что и пункт 2, но вместо проверки существования файла проверяется его дата модификации и сравнивается с картинкой-оригиналом

Первых два пункта требуют также от разработчика позаботится об удалении кэшированных фалов в случае изменения картинки-оригинала (хотя можно подумать как добавить такой функционал в компонент).
Самый производительный на мой взгляд первый вариант.
borwen
Сообщения: 15
Зарегистрирован: 2012.08.03, 15:17

Re: CImageHandler - работа с изображениями

Сообщение borwen »

Спасибо! Хорошая работа! ;)
Правда заметил что imagecopy иногда чудит в вотермарке: При попытки копирования прозрачной пнг-шки на гифы вместо копирования получается только чёрный прямоугольник. Но это уже траблы гд.
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

borwen писал(а):Спасибо! Хорошая работа! ;)
Правда заметил что imagecopy иногда чудит в вотермарке: При попытки копирования прозрачной пнг-шки на гифы вместо копирования получается только чёрный прямоугольник. Но это уже траблы гд.
Спасибо! Я думаю это можно будет как-нибудь исправить, попробую воссоздать проблему.


Добавил также ридми на английском и русском языках.
zhuk99
Сообщения: 20
Зарегистрирован: 2012.03.25, 15:00

Re: CImageHandler - работа с изображениями

Сообщение zhuk99 »

Добрый день. Пользуюсь вашим расширением. был очень доволен, но решил перед выкатыванием в продакшен потестить на больших фотках и уперся в лимит по объему памяти для процесса php. При работе с изображением 4500 на 3000 пикселей объемом 6600 Кбайт jpg он выжирает по 150-200 метров.

Мой вопрос такой: вы, как человек разработавший код, видите ли возможным оптимизировать расход памяти, или там просто gd такая прожорливая и мне нет смысла перебирать ваш код?

Еще раз респект за расширение и успехов в дальнейших работах.
Аватара пользователя
Troy
Сообщения: 235
Зарегистрирован: 2011.02.03, 21:04

Re: CImageHandler - работа с изображениями

Сообщение Troy »

zhuk99 писал(а):Добрый день. Пользуюсь вашим расширением. был очень доволен, но решил перед выкатыванием в продакшен потестить на больших фотках и уперся в лимит по объему памяти для процесса php. При работе с изображением 4500 на 3000 пикселей объемом 6600 Кбайт jpg он выжирает по 150-200 метров.

Мой вопрос такой: вы, как человек разработавший код, видите ли возможным оптимизировать расход памяти, или там просто gd такая прожорливая и мне нет смысла перебирать ваш код?

Еще раз респект за расширение и успехов в дальнейших работах.
Процентов 80 точно отжирает Gd, как не больше.
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

Да, это GD. Несколько недель назад хранение оригинального изображения было перенесено с диска в память для оптимизации скорости выполнения, поэтому если для Вас расход памяти важен, можно использовать предыдущую версию.


Думаю есть смысл добавить опцию, переключающую хранение оригинала на диск или память.
Денис
Сообщения: 2
Зарегистрирован: 2012.08.28, 14:55

Re: CImageHandler - работа с изображениями

Сообщение Денис »

Привет, к PNG с прозрачным фоном при сохранении подставляет фон. В чем проблема?
Аватара пользователя
Tokolist
Сообщения: 113
Зарегистрирован: 2010.03.01, 22:03

Re: CImageHandler - работа с изображениями

Сообщение Tokolist »

Вы используете последнюю версию?
Денис
Сообщения: 2
Зарегистрирован: 2012.08.28, 14:55

Re: CImageHandler - работа с изображениями

Сообщение Денис »

Да, оказывается не последнюю пользовал, спасибо!
wa1demar
Сообщения: 5
Зарегистрирован: 2012.10.07, 14:10

Re: CImageHandler - работа с изображениями

Сообщение wa1demar »

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

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

Yii::app()->ih
            ->load($_SERVER['DOCUMENT_ROOT'] . '/uploads/image.jpg')
            ->crop(20, 20, 200, 200)
            ->save(); 
записал его в behaviors() но мне теперь при открытии страницы выводит Invalid image file.

еще такой вопрос, если мне нужно чтобы имя генерировалось по хешу даты, если я пропишу

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

Yii::app()->ih
            ->load($_SERVER['DOCUMENT_ROOT'] . '/uploads/'.md5(time()).'.jpg')
            ->crop(20, 20, 200, 200)
            ->save(); 
оно в базу какое имя сохранит?
Ответить