Краткое описание пакета 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
        Сверху формы вставляется текущий вид изображения,
        обратите внимание, для этого не нужно никаких
        специальных интерфейсов, позовите орлова, орлов
        быстро это сделает.
                
