mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-03 21:29:28 +00:00
219 lines
7.4 KiB
Plaintext
219 lines
7.4 KiB
Plaintext
eZ publish Enterprise Component: ImageConversion, Design
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Introduction
|
|
============
|
|
|
|
Purpose of ImageConversion package
|
|
----------------------------------
|
|
|
|
The ImageConversion package will be utilized to convert existing images
|
|
in different ways:
|
|
|
|
- Conversion between MIME types (e.g. image/BMP -> image/JPEG,...)
|
|
- Resizing image files (e.g. scaling, cropping,...)
|
|
- Filtering image content (e.g. change of color pallet, add noise,...)
|
|
|
|
Current implementation
|
|
----------------------
|
|
|
|
Currently the described functionality is implemented utilizing the following
|
|
classes, inside the library lib/ezimage/:
|
|
|
|
eZImageManager
|
|
Controller for the other classes utilized in this library. Handles
|
|
configuration, dispatches the necessary action to the different classes.
|
|
|
|
eZImageHandler
|
|
Baseclass for image handlers. Provides common methods between image
|
|
handlers and defines a common API.
|
|
|
|
eZImageGDHandler
|
|
Image handler implementation for ext/GD2. Extends eZImageHandler.
|
|
|
|
eZImageShellHandler
|
|
Image handler implementation for Image Magick. Extends eZImageHandler.
|
|
|
|
General notes
|
|
-------------
|
|
|
|
The idea behind the design chosen for this class is definitly the right one,
|
|
but it could have been much more modulized to gain a more clean code layout
|
|
and more flexibillities. Beside that, the user interface seems pretty unclear
|
|
and needs some general revision.
|
|
|
|
Requirenments
|
|
=============
|
|
|
|
Design goals
|
|
------------
|
|
|
|
Several goals have to be kept in mind while re-designing the implemented
|
|
functionality:
|
|
|
|
- Do not reduce possibilities, but enhance them.
|
|
- Create a more clean user interface and enhance usabillity.
|
|
- Raise flexibillity regarding backends and filter definition.
|
|
- Keep the code fast.
|
|
|
|
Detailed requirenments
|
|
----------------------
|
|
|
|
The ImageConversion component allows to deal with quite complex image
|
|
conversions in an easy to use ways. Beside that it handles automatic
|
|
conversions, if necessary, like converting incoming image formats to a range
|
|
of range of wanted output formats. This paragraph tries to summarize, what
|
|
exactly has to be done by ImageConversion:
|
|
|
|
Conversion between image formats
|
|
In general, ImageConversion should be able to convert images between MIME
|
|
types utilizing it's backends. Conversions must be globally defineable to
|
|
allow forcing of conversions (like for GIF -> PNG). Since some image
|
|
formats have special cases, in which a conversion is not possible (like
|
|
animated GIF), it must be possible to define exceptions for conversion.
|
|
Beside the global conversion, it has to be possible, to convert images
|
|
explicitly. Format conversions can ba parameterized (like the compression
|
|
factor for JPEG, the colorpallet for GIF,...). The conversions possible
|
|
depend on the image handlers available.
|
|
|
|
|
|
Filtering of image contents
|
|
Filtering of images can have a lot of incarnation in this case:
|
|
|
|
Geometry manipulation
|
|
down/up only, keep/change ratio, with/height only,...
|
|
|
|
|
|
Attribute manipulation (was: colorspace)
|
|
transform color space, change quality,...
|
|
|
|
|
|
Content manipulation
|
|
adding noise, swirrling, adding borders...
|
|
|
|
|
|
Which filters are available depends highly on the available image
|
|
handlers, their version and maybe other factors in respect to them (PHP
|
|
version,...).
|
|
|
|
Every filter can have a variaty of options and settings to influence its
|
|
behaviour. Options and settings maybe completly different between filters.
|
|
|
|
|
|
Definition of image formats
|
|
To reduce the overhead of manually defining, which filters have to be
|
|
applied to an image to achieve a certain goal (like "create a
|
|
thumbnail", "create a preview", "make it look like an old photo",...), the
|
|
definition of different image formats should be allowed. A format
|
|
definition can include all of the above stated transformations.
|
|
|
|
Beside that, it has to be possible to define, that a format is based on
|
|
another format (like a thumbnail should be created from a preview, to
|
|
reduce conversion ammount). If a format references another format, this
|
|
reference format will be created first (if it does not exist) and
|
|
conversion to the target format will take place afterwards. This allows to
|
|
define a tree of format conversions. Every node of the tree should be
|
|
saved for later utilization.
|
|
|
|
Currently, this formats are called aliases.
|
|
|
|
Design
|
|
======
|
|
|
|
ezcImageConverter
|
|
-----------------
|
|
|
|
The main class of the component is the ezcImageConverter, which dispatches the
|
|
actions performed on images, holds the ezcImageHandler's (which actually perform
|
|
the actions) and manages / defines the ezcImageTransformations which hold
|
|
conversions and filters.
|
|
|
|
Since 1 filter/conversion can be performed by several ezcImageHandler's, the
|
|
manager has a preference list, to determine, which ezcImageHandler to take for
|
|
a conversion.
|
|
|
|
ezcImageHandler
|
|
---------------
|
|
|
|
This interface defines how the abstraction class for an image handler looks
|
|
like. ezcImageHandler's utilize a given backend to perform conversion and
|
|
filtering (using ezcImageFilter's). A ezcImageHandler knows by hisself, which
|
|
filters he implements. The manager will ask it for supported filters to get an
|
|
overview, which filters exist.
|
|
|
|
To avoid reopening an image file for every operation the ezcImageHandler has
|
|
load()/save() methods. An image must be saved before another ezcImageHandler
|
|
can perform his actions on it.
|
|
|
|
ezcImageFilters
|
|
---------------
|
|
|
|
[[[------UPDATE NEEDED HERE!--------]]]
|
|
|
|
This class implements a storage container for filters to keep them better
|
|
consistant than an array could do. Filters are created by the ezcImageManager
|
|
or directly through a ezcImageHandler. An ezcImageFilter knows, to which
|
|
handler he belongs and dispatches itself to the right handler, when applied.
|
|
|
|
ezcImageTransformation
|
|
----------------------
|
|
|
|
ezcImageTransformation's abstract image types to allow the easy combination of
|
|
conversions between MIME types and filters which are necessary to get a desired image type.
|
|
For conversions only the target MIME type is necessary.
|
|
|
|
ezcImageTransformation's will be created on the fly, when the user requests them and not
|
|
during startup of the manager. A created ezcImageTransformation will be cached in the
|
|
manager for possible later use. Same applies to the filters utilized by the
|
|
ezcImageTransformation.
|
|
|
|
Example 1
|
|
^^^^^^^^^
|
|
|
|
====================== =======================
|
|
Transformation: Preview
|
|
MIME: image/JPEG
|
|
|
|
image/PNG
|
|
Filters: scale 400x400
|
|
====================== =======================
|
|
|
|
Example 2
|
|
^^^^^^^^^
|
|
|
|
====================== =======================
|
|
Transformation: Thumbnail
|
|
MIME: image/JPEG
|
|
|
|
image/PNG
|
|
Filters: scale 100x100
|
|
|
|
colorspace grey
|
|
====================== =======================
|
|
|
|
Will scale down the image to 100x100 pixels and convert it to greyscale.
|
|
|
|
Example 3
|
|
^^^^^^^^^
|
|
|
|
====================== =======================
|
|
Transformation: OldPhotos
|
|
MIME: image/JPEG
|
|
Filters: colorspace grey
|
|
|
|
border 3
|
|
====================== =======================
|
|
|
|
Will convert the inserted image to image/JPEG, reduce the colorspace to
|
|
greyscale and add a border of 3 pixel.
|
|
|
|
^L
|
|
..
|
|
Local Variables:
|
|
mode: rst
|
|
indent-tabs-mode: nil
|
|
sentence-end-double-space: t
|
|
fill-column: 79
|
|
End:
|
|
vim: et syn=rst tw=79 wrap
|