ng.app.photo
2008-01-28 01:07Пакет разработан для поддержки возможности редактирования фотографий на стороне сервера. Каждая фотография - это обычный IImage, в форму редактирования которого добавлена возможность изменения применения нескольких параметров изображения: размер, поворот, отражение относительно осей, изменение формата и применение нескольких заранее заготовленных фильтров (BLUR, EMBOSS). Все преобразования выполняются над текущим изображением при помощи подпрограмм библиотеки PIL.
Продукт
| Название: | |
| ng.app.photo | |
| Выложен на PyPI | |
| Репозиторий |
Краткое описание пакета ng.app.photo
Пакет разработан для поддержки возможности редактирования фотографий на стороне сервера. Каждая фотография - это обычный IImage, в меню редактирования которого добавлена возможность применения несколький зарание заготовленных интсрументов-преобразований, в том числе
- Масштабирование до указанного размера,
- Повороты на 90 градусов,
- Преобразование формата,
Все преобразования выполняются над текущим изображением при помоощи подпрограмм библиотеки PIL.
Способ реализации
Основой продукта является класс Photo, который унаследован от Image и Contained и предоставляет все виды и формы которые есть у Image.
Определяется схема IPhotoEdit, поля которой являются фиктивными и схема IPhotoParam, поля которой существуют в классе Photo. Для класса посредством директивы form создается вид, отображающий поля схемы IPhotoEdit.
setData
При сохранении вида, вызывается метод setData класса, определенного в директиве form. Этот метод проверяет разницу между переданными в схеме значениями полей IPhotoEdit и фактическими значениями полей (0 градусов, 300пикселов ширину, формат RGB. PNG и т.п). После чего выполняются преобразования вызовом соответствующих функций PIL. Значения полей схемы IPhotoEdit, унаследованные от IPhotoParam, сохраняются, остальные нет.
getData
При отображении вида вызывается метод getData класса, определенного в директиве form. Этот метод набирает значения полей схемы IPhotoEdit , унаследованные от IPhotoParam, их класса, а для оставльных полей передает значчения по умолчанию.
Особое внимание придется уделить полям height width - для заполнения их значениями следует использовать вызов getImageSize(), определенный в интерфейсе IImage.
Реализация работы с IPhotoTool
IPhotoTool - это интерфейс инструмента преобразования изображения. Инструмент - это именованный адаптер IPhoto к IPhotoTool. Интерфейс IPhotoTool предоставляет метод do() вызов которого выполняет преобразование изображения "In Place".
Интерфейсы
IPhotoParam
- format
- Формат изображения (см. описание на PIL)
- mime
- MIME-типа изображения (см. описание на PIL)
IPhotoEdit
Интерфейс унаследован от IPhotoParam и служит для управнлия преобразованием рисунка и содержит следующие поля:
- storeratio
- Сохранять соотношение сторон
- rotation
- На сколько градусов повернуть (всегда сохраняется значение 0)
- rotations :: select of (90, 180, 270)
- Если выбрано значение не None, то используется значение из этого поля.
- hmirror
- Вертикальное отражение (всегда сохраняется значение False)
- vmirror
- Горизонтальное отражение (всегда сохраняется значение False)
- filters : tuple of select of text_line
- Фильтры, список которых составляют адаптеры IPhoto к IPhotoTool, именованные адаптеры.
- width
- Ширина изображения
- height
- Высота изображения
IPhotoTool
Интерфейс служит для управления преобразованием рисунка и содержит один метод do(), смысл которого - выполнить преобразование.
Виды
- upload
- Стандартный интерфейс заливки изображения, делать его не надо, используется унаследованный;
- photoedit
- Форма, обслуживающая интерфейс IPhotoEdit Сверху формы вставляется текущий вид изображения, обратите внимание, для этого не нужно никаких специальных интерфейсов, позовите орлова, орлов быстро это сделает.


