Mercurial > hg > digilib-old
diff common/src/main/java/digilib/image/DocuImage.java @ 903:7779b37d1d05
refactored into maven modules per servlet type.
can build servlet-api 2.3 and 3.0 via profile now!
author | robcast |
---|---|
date | Tue, 26 Apr 2011 20:24:31 +0200 |
parents | servlet/src/main/java/digilib/image/DocuImage.java@ba1eb2d821a2 |
children | 28d007673346 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/src/main/java/digilib/image/DocuImage.java Tue Apr 26 20:24:31 2011 +0200 @@ -0,0 +1,264 @@ +/* DocuImage -- General image interface class + + Digital Image Library servlet components + + Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the + Free Software Foundation; either version 2 of the License, or (at your + option) any later version. + + Please read license.txt for the full details. A copy of the GPL + may be found at http://www.gnu.org/copyleft/lgpl.html + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*/ + +package digilib.image; + +import java.awt.Rectangle; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Iterator; + +import javax.servlet.ServletException; + +import digilib.io.FileOpException; +import digilib.io.ImageInput; +import digilib.util.ImageSize; + +/** The basic class for the representation of a digilib image. + * + * The actual image object is hidden in the class, only methods for loading, + * manipulation, and saving are exported. This strategy enables implementations + * using different toolkits that rely on different image base classes (like + * JIMI, Java2D and JAI). + */ +public interface DocuImage { + + /** Loads an image file into the Object. + * + * @param ii Image File. + * @throws FileOpException Exception thrown if any error occurs. + */ + public void loadImage(ImageInput ii) throws FileOpException; + + /** This DocuImage supports the loadSubImage operation. + * + * @return boolean + */ + public boolean isSubimageSupported(); + + /** Load only a subsampled region of the image file. + * + * @param ii + * @param region + * @param subsample + * @throws FileOpException + */ + public void loadSubimage(ImageInput ii, Rectangle region, int subsample) + throws FileOpException; + + /** Writes the current image to an OutputStream. + * + * The image is encoded to the mime-type <code>mt</code> and sent to the output + * stream <code>ostream</code>. + * + * Currently only mime-types "image/jpeg" and "image/png" are supported. + * + * @param mt mime-type of the image to be sent. + * @param ostream OutputStream where the image is sent. + * @throws ServletException Exception thrown on sending data. + * @throws ImageOpException Exception in other cases. + */ + public void writeImage(String mt, OutputStream ostream) + throws ServletException, ImageOpException; + + /** The width of the current image in pixel. + * + * @return Image width in pixels. + */ + public int getWidth(); + + /** The height of the current image in pixel. + * + * @return Image height in pixels. + */ + public int getHeight(); + + /** The size of the current image in pixel. + * + * @return + */ + public ImageSize getSize(); + + /** The mime-type of the image, i.e. the mime-type of the input that was read. + * + * @return String the mime-type of this image. + */ + public String getMimetype(); + + /** Crops the current image. + * + * Cuts out a region of the size <code>width</code> x <code>height</code> at + * the offset <code>xoff</code>, <code>yoff</code> from the current image + * and replaces the current image with the result. + * + * @param xoff X offset of crop region + * @param yoff Y offset of crop region + * @param width width of crop region + * @param height height of crop region + * @throws ImageOpException + */ + public void crop(int xoff, int yoff, int width, int height) + throws ImageOpException; + + /** Scales the current image. + * + * Replaces the current image with an image scaled by the factor + * <code>scale</code>. + * + * @param scale scaling factor + * @throws ImageOpException + */ + public void scale(double scaleX, double scaleY) throws ImageOpException; + + /** Crops and scales the current image. + * + * The current image is cropped to a rectangle of <code>width</code>, + * <code>height</code> at position <code>x_off</code>, <code>y_off</code>. The + * resulting image is scaled by the factor <code>scale</code> using the + * interpolation quality <code>qual</code> (0=worst). + * + * @param x_off x offset of the crop rectangle in pixel. + * @param y_off y offset of the crop rectangle in pixel. + * @param width width of the crop rectangle in pixel. + * @param height height of the crop rectangle in pixel. + * @param scale scaling factor. + * @param qual interpolation quality (0=worst). + * @throws ImageOpException exception thrown on any error. + */ + public void cropAndScale( + int x_off, + int y_off, + int width, + int height, + double scale, + int qual) + throws ImageOpException; + + /** Rotates the current image. + * + * Replaces the current image with a rotated image. The image is rotated + * around the center by the <code>angle</code> + * given in degrees [0, 360] clockwise. + * Image size and aspect ratio are likely to change. + * + * @param angle rotation angle in degree + */ + public void rotate(double angle) throws ImageOpException; + + /** Mirrors the current image. + * + * Replaces the current image with a mirrored image. The mirror axis goes + * through the center of the image and is rotated by <code>angle</code> + * degrees. Currently only horizontal and vertical mirroring (0 and 90 + * degree) are supported. + * + * @param angle angle of mirror axis + * @throws ImageOpException + */ + public void mirror(double angle) throws ImageOpException; + + /** Enhances brightness and contrast of the current image. + * + * Replaces the current image with a brightness and contrast enhanced image. + * Contrast is enhanced by multiplying the pixel value with the constant + * <code>mult</code>. Brightness is enhanced by adding the constant + * <code>add</code> to the pixel value. Operation: p1 = (p0*mult)+add. + * + * @param mult multiplicative constant for contrast enhancement + * @param add additive constant for brightness enhancement + * @throws ImageOpException + */ + public void enhance(float mult, float add) throws ImageOpException; + + /** Manipulates the colors of the current image. + * + * Replaces the current image with a color modified image. + * For the red, green and blue color channels all pixel values are multiplied + * by the constant + * <code>m</code> and added to the constant + * <code>a</code>. Operation: p1 = (p0*m)+a. + * + * @param rgbm multiplicative constants for red, green, blue + * @param rgba additive constant for red, green, blue + * @throws ImageOpException + */ + public void enhanceRGB(float[] rgbm, float[] rgba) + throws ImageOpException; + + + /** Operations for colorOps. + * + * GRAYSCALE: cast color image to grayscale + * NTSC_GRAY: convert color image to grayscale using NTSC formula + * INVERT: invert colors (every channel separately) + * MAP_GRAY_BGR: false color image from grayscale (0: blue, 128: green, 255: red) + * + */ + public enum ColorOp {GRAYSCALE, NTSC_GRAY, INVERT, MAP_GRAY_BGR}; + + /** Changes the colors of the current image. + * + * Changes the colors of the current image. Operations are instances of ColorOp: + * + * GRAYSCALE: cast color image to grayscale + * NTSC_GRAY: convert color image to grayscale using NTSC formula + * INVERT: invert colors (every channel separately) + * MAP_GRAY_BGR: false color image from grayscale (0: blue, 128: green, 255: red) + * + * @throws ImageOpException + */ + public void colorOp(ColorOp op) throws ImageOpException; + + /** + * Returns the interpolation quality. + * @return int + */ + public int getQuality(); + + /** + * Sets the interpolation quality. + * @param quality The quality to set + */ + public void setQuality(int quality); + + /** Frees all resources bound to the DocuImage. + * + * Things that should be freed are image objects and open files. + * + */ + public void dispose(); + + /** + * Check image size and type and store in ImageInput ii + */ + public ImageInput identify(ImageInput ii) throws IOException; + + /** + * Returns a list of supported image formats + */ + public Iterator<String> getSupportedFormats(); + + /** + * returns the underlying image as java.awt.Image (if possible, or null) + * @return + */ + public java.awt.Image getAwtImage(); + +}