blob: a095ca4a87fa131f9079887c007484d9aeeca5a0 [file] [log] [blame]
<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document>
<properties>
<title>Building</title>
<author email="dev@commons.apache.org">Commons Documentation Team</author>
</properties>
<body>
<!-- ================================================== -->
<section name="Justification">
<p>
Why another image library? There are so many already.
</p>
<p>
Apache Commons Imaging is Pure Java. Consequently it's slow, but perfectly portable.
</p>
<p>
It is designed to be very easy to use. See the Sample Usage section.
</p>
<p>
This library supports some variations and encodings missed by all or most other libaries.
</p>
<p>
Most other libraries offer little or incomplete support for ICC Profiles.
Commons Imaging can extract and (simply) parse embedded ICC Profiles.
Moreover, it applies the ICC profile by default, coverting read images to sRGB.
This means images are color-corrected by default.
see: <a href="http://en.wikipedia.org/wiki/International_Color_Consortium">http://en.wikipedia.org/wiki/International_Color_Consortium</a>,
<a href="http://en.wikipedia.org/wiki/SRGB">http://en.wikipedia.org/wiki/SRGB</a>
</p>
<p>
Commons Imaging also lets you read in image info (ie. width, height or colorspace) and metadata without
"reading" the entire image. It presents image info and metadata in a format-neutral manner.
It also gives easy, structured access to format-specific info.
</p>
<p>
This library was written with an eye to correctness and code clarity rather than efficiency.
Hopefully it is easy to use, easy to extend and can be used to explore images + image formats,
rather than just read images for display.
</p>
<p>
This library is Free Software/Open Source. It is available under the
<a href="../license.html">Apache Software License</a>.
</p>
<p>
Ultimately, other libraries didn't quite fill my requirements, though there are many good ones out there.
What could be interesting is to get a free, portable, feature complete library that ISN'T pure Java
- ie. one that uses JNI, at least for JPEG, anyhow. The obvious solution would be a JNI wrapper
around libtiff, libjpeg, libpng, libgif/libungif, etc. imageloader uses this approach, but
is unfinished.
see: <a href="http://www.libtiff.org/">http://www.libtiff.org/</a>,
<a href="http://en.wikipedia.org/wiki/Libjpeg">http://en.wikipedia.org/wiki/Libjpeg</a>,
<a href="http://www.libpng.org/">http://www.libpng.org/</a>,
<a href="http://sourceforge.net/projects/libungif/">http://sourceforge.net/projects/libungif/</a>
</p>
<p>
Commons Imaging also includes a number of useful functions such as guess an image's format by examining its "magic numbers" (header info).
</p>
<p>
Commons Imaging aims to be transparent. There are no hidden buffers to dispose, no blocking calls, no native memory to free.
</p>
<p>
The ColorConversions class offers methods to convert between the following color spaces: CIE-L*CH�, CIE-L*ab, CIE-L*uv,
CMY, CMYK, HSL, HSV, Hunter-Lab, RGB, XYZ and Yxy (algorithms courtesy of EasyRGB's).
see: <a href="http://www.easyrgb.com/">http://www.easyrgb.com/</a>
</p>
</section>
</body>
</document>