package image;
import java.awt.Canvas;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.color.ColorSpace;
import java.awt.image.AreaAveragingScaleFilter;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.FilteredImageSource;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import tools.FileTypeUtil;
import tools.FileUtil;
/**
* 图片的先关操作
* @author Administrator
*
*/
public class ImageOp {
private static Component component = new Canvas();
public static void main(String args[]){
String filename="E:\\1.png";
//new ImageOp().createImage(filename,"E:/out.jpg");
new ImageOp().getCulipPicture(filename,2,2,100,100);
}
public void createImage(String filename,String resultName){
try {
BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filename));
createZoomSizeImage(bufferedImage,0.3,resultName);
getGrayPicture(bufferedImage);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 扩大缩小图片
* @param image
* @param zoomRatio
* @param resultName
* @return
*/
public static BufferedImage createZoomSizeImage(BufferedImage image,double zoomRatio,String resultName)
{
int width = new Double(image.getWidth(null) * zoomRatio).intValue();
int height = new Double(image.getHeight(null) * zoomRatio).intValue();
AreaAveragingScaleFilter areaAveragingScaleFilter = new AreaAveragingScaleFilter(width,height);
FilteredImageSource filteredImageSource = new FilteredImageSource(image.getSource(),areaAveragingScaleFilter);
BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);
Graphics graphics = bufferedImage.createGraphics();
graphics.drawImage(component.createImage(filteredImageSource),0,0,null);
try {
ImageIO.write(bufferedImage, "jpg", new File(resultName));
} catch (IOException e) {
e.printStackTrace();
}
return bufferedImage;
}
/**
* 变灰图片
* @param originalImage
* @return
*/
public BufferedImage getGrayPicture(BufferedImage originalImage)
{
BufferedImage grayPicture;
int imageWidth = originalImage.getWidth();
int imageHeight = originalImage.getHeight();
grayPicture = new BufferedImage(imageWidth, imageHeight,
BufferedImage.TYPE_3BYTE_BGR);
ColorConvertOp cco = new ColorConvertOp(ColorSpace
.getInstance(ColorSpace.CS_GRAY), null);
cco.filter(originalImage, grayPicture);
try {
ImageIO.write(grayPicture, "jpg", new File("E:\\out1.jpg"));
} catch (IOException e) {
e.printStackTrace();
}
return grayPicture;
}
public BufferedImage getCulipPicture(String filename,int x,int y,int width,int height){
String imgType = FileUtil.getExtName(filename);
if(!"".equals(imgType)){
InputStream is=null;
ImageInputStream iis=null;
try {
is = new FileInputStream(filename);
Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName(imgType);
ImageReader reader = it.next();
iis = ImageIO.createImageInputStream(is);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
Point p = new Point();
p.setLocation(x, y);
Dimension d = new Dimension();
d.setSize(width, height);
Rectangle rect = new Rectangle(p, d);
param.setSourceRegion(rect);
BufferedImage bi = reader.read(0, param);
ImageIO.write(bi, imgType, new File("E:\\out2.jpg"));
is.close();
iis.close();
return bi;
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
}
}