import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; 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; /** * @author PSY * @createTime 2015-7-18 下午06:30:54 */ public class ImageUtil { /* * 根據尺寸圖片居中裁剪 */ public static String cutCenterImage(String src,String dest,int w,int h) throws IOException{ Iterator iterator = ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader = (ImageReader)iterator.next(); InputStream in=new FileInputStream(src); ImageInputStream iis = ImageIO.createImageInputStream(in); // 剪裁圖片的時候有多是由png生成的jpeg致使格式錯誤只能是經過最原始的流文件的信息 if(iis.readLine().toLowerCase().contains("png")){ dest = dest.replace(".jpeg", ".png"); iterator = ImageIO.getImageReadersByFormatName("png"); reader = (ImageReader)iterator.next(); in=new FileInputStream(src); iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); int imageIndex = 0; Rectangle rect = new Rectangle((reader.getWidth(imageIndex)-w)/2, (reader.getHeight(imageIndex)-h)/2, w, h); param.setSourceRegion(rect); BufferedImage bi = reader.read(0,param); ImageIO.write(bi, "png", new File(dest)); }else{ iterator = ImageIO.getImageReadersByFormatName("jpeg"); reader = (ImageReader)iterator.next(); in=new FileInputStream(src); iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); int imageIndex = 0; Rectangle rect = new Rectangle((reader.getWidth(imageIndex)-w)/2, (reader.getHeight(imageIndex)-h)/2, w, h); param.setSourceRegion(rect); BufferedImage bi = reader.read(0,param); ImageIO.write(bi, "jpeg", new File(dest)); } return dest; } /* * 圖片裁剪二分之一 */ public static void cutHalfImage(String src,String dest) throws IOException{ Iterator iterator = ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader = (ImageReader)iterator.next(); InputStream in=new FileInputStream(src); ImageInputStream iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); int imageIndex = 0; int width = reader.getWidth(imageIndex)/2; int height = reader.getHeight(imageIndex)/2; Rectangle rect = new Rectangle(width/2, height/2, width, height); param.setSourceRegion(rect); BufferedImage bi = reader.read(0,param); ImageIO.write(bi, "jpeg", new File(dest)); } /* * 圖片裁剪通用接口 */ public static void cutImage(String src,String dest,int x,int y,int w,int h) throws IOException{ Iterator iterator = ImageIO.getImageReadersByFormatName("jpeg"); ImageReader reader = (ImageReader)iterator.next(); InputStream in=new FileInputStream(src); ImageInputStream iis = ImageIO.createImageInputStream(in); reader.setInput(iis, true); ImageReadParam param = reader.getDefaultReadParam(); Rectangle rect = new Rectangle(x, y, w,h); param.setSourceRegion(rect); BufferedImage bi = reader.read(0,param); ImageIO.write(bi, "jpeg", new File(dest)); } /* * 圖片縮放 */ public static void zoomImage(String src,String dest,int w,int h) throws Exception { double wr=0,hr=0; File srcFile = new File(src); File destFile = new File(dest); BufferedImage bufImg = ImageIO.read(srcFile); Image Itemp = bufImg.getScaledInstance(w, h, bufImg.SCALE_SMOOTH); wr=w*1.0/bufImg.getWidth(); hr=h*1.0 / bufImg.getHeight(); AffineTransformOp ato = new AffineTransformOp(AffineTransform.getScaleInstance(wr, hr), null); Itemp = ato.filter(bufImg, null); try { ImageIO.write((BufferedImage) Itemp,dest.substring(dest.lastIndexOf(".")+1), destFile); } catch (Exception ex) { ex.printStackTrace(); } } }