package com.poi.fux.nw.carlosweb.schadensabwicklung;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
/**
* Hilfklasse fïür das Bearbeiten von Bildern
* @author rad
*
*/
public class ImageUtil {
/**
* liefert aus einem BufferedImage ein JPEG ByteArray
* @param img
* @return
* @throws ImageFormatException
* @throws IOException
*/
public static byte[] bufferedImageToByteArray(BufferedImage img, String format) throws IOException{
ByteArrayOutputStream os = new ByteArrayOutputStream();
//JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//encoder.encode(img);
ImageIO.write(img, format, os);
return os.toByteArray();
}
/**
*ändert die Größe eines Bildes durch Angabe der neuen Breite
* @param image
* @param width
* @return
*/
public static BufferedImage resizeImage(BufferedImage image, int width){
float factor = ((float)image.getWidth()/(float)width);
int height = (int)(image.getHeight()/factor);
image.flush();
Image thumb = image.getScaledInstance(width, height, Image.SCALE_AREA_AVERAGING);
return getBufferedImage(thumb, width, height);
}
/**
* Wandelt ein Image in ein Buffered Image um
* @param image
* @return
*/
public static BufferedImage getBufferedImage(Image image) {
int w = image.getWidth(null);
int h = image.getHeight(null);
return getBufferedImage(image, w, h);
}
/**
* Wandelt ein Image in ein Buffered Image um
* @param image
* @return
*/
public static BufferedImage getBufferedImage(Image image, int witdh, int height) {
BufferedImage result = new BufferedImage(witdh, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g = result.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return result;
}
/**
* vielleicht wird das mal interssant, falls es Qualit�ts oder Performace Probleme gibt
* @param img
* @param targetWidth
* @param hint
* @param higherQuality
* @return
*/
public static BufferedImage getScaledInstance(BufferedImage img, int targetWidth, Object hint, boolean higherQuality){
float factor = ((float)img.getWidth()/(float)targetWidth);
int targetHeight = (int)(img.getHeight()/factor);
int type = BufferedImage.TYPE_INT_RGB;
BufferedImage ret = (BufferedImage)img;
int w, h;
if (higherQuality) {
// Use multi-step technique: start with original size, then
// scale down in multiple passes with drawImage()
// until the target size is reached
w = img.getWidth();
h = img.getHeight();
} else {
// Use one-step technique: scale directly from original
// size to target size with a single drawImage() call
w = targetWidth;
h = targetHeight;
}
do {
if (higherQuality && w > targetWidth) {
w /= 2;
if (w < targetWidth) {
w = targetWidth;
}
}
if (higherQuality && h > targetHeight) {
h /= 2;
if (h < targetHeight) {
h = targetHeight;
}
}
BufferedImage tmp = new BufferedImage(w, h, type);
Graphics2D g2 = tmp.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2.drawImage(ret, 0, 0, w, h, null);
g2.dispose();
ret = tmp;
} while (w != targetWidth || h != targetHeight);
return ret;
}
}