package com.example.xmhi; import java.awt.Graphics; import java.awt.Image; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; /** * 图片裁剪的测试类 * @author Administrator * */ public class TestCutImg { private static String imgPath = "F:\\ohergal\\My Pictures\\时尚先生"; //文件路径 private static String imgName = "2007_11_20_14_04_27_66762_0_2.jpg"; //文件名 private static String outPath = "D:\\"; //输出路径 private static String outName = "test.jpg"; //输出文件名 /** * 图片裁剪 */ public void cut(){ try { //获取源图片 FileInputStream is = new FileInputStream(imgPath+File.separator+imgName); /* * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader * 声称能够解码指定格式。 参数:formatName - 包含非正式格式名称 . * 例如 "jpeg" 或 "tiff"等 。 */ Iterator<ImageReader> it = ImageIO.getImageReadersByFormatName("jpg"); ImageReader reader = it.next(); ImageInputStream iis = ImageIO.createImageInputStream(is); /* * <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。 * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader * 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。 */ reader.setInput(iis,true) ; /* * <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 * 将从其 ImageReader 实现的 getDefaultReadParam 方法中返回 * ImageReadParam 的实例。 */ ImageReadParam param = reader.getDefaultReadParam(); Rectangle rect = new Rectangle(160, 100, 400, 481); //提供一个 BufferedImage,将其用作解码像素数据的目标。 param.setSourceRegion(rect); /* * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 * 它作为一个完整的 BufferedImage 返回。 */ BufferedImage bi = reader.read(0,param); //保存新图片 ImageIO.write(bi, "jpg", new File(outPath+File.separator+outName)); } catch (FileNotFoundException e) { System.out.println("找不到图片: "+imgPath+File.separator+imgName); e.printStackTrace(); } catch (IOException e) { System.out.println("获取图片输入流错误 :"+imgPath+File.separator+imgName); e.printStackTrace(); } } /** * 图片缩放测试 */ public void reSize(){ try { // 读入文件 BufferedImage src = ImageIO.read(new File(imgPath+File.separator+imgName)); int width = src.getWidth()/2; // 得到源图宽 int height = src.getHeight()/2; // 得到源图长 Image image = src.getScaledInstance(width, height, Image.SCALE_DEFAULT); BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); Graphics g = tag.getGraphics(); g.drawImage(image, 0, 0, null); // 绘制缩小后的图 g.dispose(); ImageIO.write(tag, "JPEG", new File(outPath+File.separator+outName)); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args){ TestCutImg tci = new TestCutImg(); //tci.cut(); tci.reSize(); } }
?
转载自:?http://www.throughsoul.com/archives/682.html