1 /** 2 * 裁剪图片 3 * @param src 源图片 4 * @param dest 裁剪后的图片 5 * @param x 裁剪范围的X坐标 6 * @param y 裁剪范围的Y坐标 7 * @param w 裁剪范围的高度 8 * @param h 裁剪范围的宽度 9 * @param destW 裁剪后图片的宽度10 * @param destH 裁剪后图片的高度11 * @throws IOException12 */13 public static void cutImage(String src, String dest, int x, int y, int w,14 int h,int destW,int destH) throws IOException {15 try{16 17 //未知问题,不知道为啥路径的最后会有/r/n18 19 src = src.replace("/r/n", "");20 dest = dest.replace("/r/n", "");21 System.out.PRintln("CutImage:src=" + src + ";dest=" + dest + ";x=" + x + ";y=" + y);22 File file = new File(src);23 if(file.exists()){24 Iterator<ImageReader> iterator = ImageIO.getImageReadersByFormatName("jpg");25 ImageReader reader = (ImageReader) iterator.next();26 InputStream in = new FileInputStream(src);27 ImageInputStream iis = ImageIO.createImageInputStream(in);28 reader.setInput(iis, true);29 ImageReadParam param = reader.getDefaultReadParam();30 Rectangle rect = new Rectangle(x, y, w, h);31 param.setSourceRegion(rect);32 BufferedImage bi = reader.read(0, param);33 if(w != destW){ //被拉伸或者缩小过34 bi.flush();35 BufferedImage newImage = new BufferedImage(destW,destH,bi.getType());36 Graphics g = newImage.getGraphics();37 g.drawImage(bi,0,0,destW,destH,null,null);38 g.dispose();39 ImageIO.write(newImage, "jpg", new File(dest));40 }else{41 ImageIO.write(bi, "jpg", new File(dest));42 }43 iis.close();44 in.close();45 //最后删除临时文件46 file.delete();47 }else{48 System.out.println("找不到要裁剪的文件:FileName=" + src);49 }50 }catch(Exception ex){51 ex.printStackTrace();52 }53 }cutImage
新闻热点
疑难解答