/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.server.utils;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.PixelGrabber;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
/**
*
* @author Administrator
*/
public class ImageHandler {
private Utility utility = new Utility();
double newImageWidth = 0;
double newImageHeight = 0;
public ImageHandler() {
utility = new Utility();
}
public void saveImage(Image image, String fileName) {
try {
ImageIO.write(getBufferedImage(image), "jpg", new File(fileName + ".jpg"));
} catch (IOException ex) {
Logger.getLogger(ImageHandler.class.getName()).log(Level.SEVERE, null, ex);
}
}
public BufferedImage getBufferedImage(Image image) {
if (image instanceof BufferedImage) {
return (BufferedImage) image;
}
// This code ensures that all the pixels in the image are loaded
image = new ImageIcon(image).getImage();
// Determine if the image has transparent pixels; for this method's
boolean hasAlpha = hasAlpha(image);
// Create a buffered image with a format that's compatible with the screen
BufferedImage bimage = null;
// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
// try {
// // Determine the type of transparency of the new buffered image
// int transparency = Transparency.OPAQUE;
// if (hasAlpha) {
// transparency = Transparency.BITMASK;
// }
//
// // Create the buffered image
// GraphicsDevice gs = ge.getDefaultScreenDevice();
// GraphicsConfiguration gc = gs.getDefaultConfiguration();
// bimage = gc.createCompatibleImage(
// image.getWidth(null), image.getHeight(null), transparency);
// } catch (HeadlessException e) {
// // The system does not have a screen
// }
if (bimage == null) {
// Create a buffered image using the default color model
int type = BufferedImage.TYPE_INT_RGB;
// if (hasAlpha) {
// type = BufferedImage.TYPE_INT_ARGB;
// }
bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type);
}
// Copy image to buffered image
Graphics g = bimage.createGraphics();
// Paint the image onto the buffered image
g.drawImage(image, 0, 0, null);
g.dispose();
return bimage;
}
boolean hasAlpha(Image image) {
// If buffered image, the color model is readily available
if (image instanceof BufferedImage) {
BufferedImage bimage = (BufferedImage) image;
return bimage.getColorModel().hasAlpha();
}
// Use a pixel grabber to retrieve the image's color model;
// grabbing a single pixel is usually sufficient
PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false);
try {
pg.grabPixels();
} catch (InterruptedException e) {
}
// Get the image's color model
ColorModel cm = pg.getColorModel();
return cm.hasAlpha();
}
public void saveImage(ImageIcon image, String ipAddress) {
File imageDir = createImageDir(ipAddress);
String time = utility.getTime();
saveImage(image.getImage(), imageDir.getPath() + File.separator + time);
}
private File createImageDir(String ipAddress) {
String date = utility.getCurrentDate("dd-mm-yyyy");
File saveImageDir = new File(SettingsConstatnts.IMG_DIR + File.separator +
ipAddress + File.separator + date);
if (saveImageDir.exists()) {
return saveImageDir;
} else {
saveImageDir.mkdirs();
return saveImageDir;
}
}
public ImageIcon getScaledImage(Image image, int imgWidth, int imgHeight, int labelWidth, int labelHeight) {
getScalingFactor(imgWidth, imgHeight, labelWidth, labelHeight);
if (newImageWidth != 0 && newImageHeight != 0) {
image = image.getScaledInstance(
(int) newImageWidth, (int) newImageHeight, Image.SCALE_SMOOTH);
}
return new ImageIcon(image);
}
private void getScalingFactor(int imgWidth, int imgHeight, int labelWidth,
int labelHeight) {
int selectedSide = 0;
int difference = 0;
if (imgWidth > labelWidth || imgHeight > labelHeight) {
if (imgWidth > imgHeight) {
selectedSide = imgWidth;
difference = imgWidth - labelWidth;
float percentage = ((float) difference / (float) imgWidth) * 100;
newImageHeight = imgHeight - (imgHeight * (percentage / 100));
newImageWidth = imgWidth - difference;
} else {
selectedSide = imgHeight;
difference = imgHeight - labelHeight;
float percentage = ((float) difference / (float) imgHeight) * 100;
newImageWidth = imgWidth - (imgWidth * (percentage / 100));
newImageHeight = imgHeight - difference;
}
}
}
}