Java 图像截取 缩放

来源:互联网 发布:民生证券交易软件下载 编辑:程序博客网 时间:2024/04/29 22:12
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();    }}

0 0
原创粉丝点击