一:对于磁盘上的图片;

/**
     * 函 数 名: cut<br>
     * 功能描述:对图片裁剪,并把裁剪完蛋新图片保存 。 <br>
     * 创 建 人: 王国庆<br>
     * 日 期: 2013-2-22<br>
     * 输入输出:
     * 
     * @param lastdir
     *            后缀
     * @param srcpath
     *            图片地址
     * @param x
     *            开始剪切的x坐标
     * @param y
     *            开始剪切的y坐标
     * @param width
     *            需要剪切的宽
     * @param height
     *            需啊剪切的高
     * @param subpath
     *            保存图片地址
     * @throws IOException
     * <br>
     */
    public void cut(String lastdir, String srcpath, int x, int y, int width,
            int height, String subpath) throws IOException {

FileInputStream is = null;
        ImageInputStream iis = null;

try {
            // 读取图片文件
            is = new FileInputStream(srcpath);
            /*
             * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
             * 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
             */
            Iterator<ImageReader> it = ImageIO
                    .getImageReadersByFormatName(lastdir);
            ImageReader reader = it.next();
            // 获取图片流
            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 指定了坐标空间中的一个区域,通过 Rectangle 对象
             * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
             */
            Rectangle rect = new Rectangle(x, y, width, height);
            // 提供一个 BufferedImage,将其用作解码像素数据的目标。
            param.setSourceRegion(rect);
            /*
             * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
             * BufferedImage 返回。
             */
            BufferedImage bi = reader.read(0, param);

// 保存新图片
            ImageIO.write(bi, lastdir, new File(subpath));
        } finally {
            if (is != null)
                is.close();
            if (iis != null)
                iis.close();
        }

}

二:对于内存中的图片:例如new Bufferimage 对象,并没有保存到磁盘

/**
     * 函 数 名: cut<br>
     * 功能描述: <br>
     * 创 建 人: 王国庆<br>
     * 日 期: 2013-2-22<br>
     * 输入输出:
     * 
     * @param image
     *            内存中的图片 BufferedImage对象
     * @param x
     *            开始剪切的x坐标
     * @param y
     *            开始剪切的y坐标
     * @param width
     *            剪切的宽度
     * @param height
     *            剪切的高度
     * @return<br>
     */
    private BufferedImage cut(BufferedImage image, int x, int y, int width,
            int height) {

try {

/*
             * 返回包含所有当前已注册 ImageReader 的 Iterator,这些 ImageReader 声称能够解码指定格式。
             * 参数:formatName - 包含非正式格式名称 .(例如 "jpeg" 或 "tiff")等 。
             */
            Iterator<ImageReader> it = ImageIO
                    .getImageReadersByFormatName("jpg");
/**因为是内存中的图片对象,所以没有后缀,就给一个jpg后缀,我给png后缀出错,不知是不是我的BufferedImage对象不对*/
            ImageReader reader = it.next();
            // 获取图片流

ImageInputStream iis = ImageIO
                    .createImageInputStream(new ByteArrayInputStream(
                            bufferedImageToByteArray(image)));

/*
             * <p>iis:读取源.true:只向前搜索 </p>.将它标记为 ‘只向前搜索’。
             * 此设置意味着包含在输入源中的图像将只按顺序读取,可能允许 reader 避免缓存包含与以前已经读取的图像关联的数据的那些输入部分。
             */
            reader.setInput(iis, true);
            /*
             * <p>描述如何对流进行解码的类<p>.用于指定如何在输入时从 Java Image I/O
             * 框架的上下文中的流转换一幅图像或一组图像。用于特定图像格式的插件 将从其 ImageReader 实现的
             * getDefaultReadParam 方法中返回 ImageReadParam 的实例。
             */
            ImageReadParam param = reader.getDefaultReadParam();
            /*
             * 图片裁剪区域。Rectangle 指定了坐标空间中的一个区域,通过 Rectangle 对象
             * 的左上顶点的坐标(x,y)、宽度和高度可以定义这个区域。
             */
            Rectangle rect = new Rectangle(x, y, width, height);
            // 提供一个 BufferedImage,将其用作解码像素数据的目标。
            param.setSourceRegion(rect);
            /*
             * 使用所提供的 ImageReadParam 读取通过索引 imageIndex 指定的对象,并将 它作为一个完整的
             * BufferedImage 返回。
             */
            BufferedImage bi = reader.read(0, param);

iis.close();

return bi;

} catch (ImageFormatException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

/**在二中,我的 image 对象是这样创建的 BufferedImage marImage = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);*/

java 剪切 图片 BufferedImage相关推荐

  1. java 剪切图片点坐标_详细介绍java根据坐标截取图片的实例代码

    这篇文章主要介绍了java 根据坐标截取图片实例代码的相关资料,需要的朋友可以参考下 java 根据坐标截取图片 实例代码:代码中有不是注释,很好看懂!package com.json.test; i ...

  2. java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办

    今天遇到的两个问题: 图片本如图1所示, java处理后,变成了图2所示,严重失真,偏红,怎么办? 以上直接上关键代码: 原来处理的代码: import java.awt.Graphics2D; im ...

  3. Java剪切图片为圆形,并使边缘透明。

    剪切图片为圆形,并使边缘透明. 将图片剪切为圆形并使边缘透明 效果图: 看起来朦胧的 但是放进面板之后色彩与原图一致 public static void k() {BufferedImage bi1 ...

  4. java打印图片到页面_在Java中打印BufferedImage的正确方法

    这是我的一个Java项目中的一个.此代码将在打印机页面上缩放和打印一个图像. 你这样称呼它: printButton.addActionListener(new ActionListener() { ...

  5. java截取图片-设置方位+设置大小

    java截取图片-设置方位+设置大小 package com.onegrid.darj.test; import java.awt.Rectangle;   import java.awt.image ...

  6. java读取图片缩略方法_java 图片缩略图的两种方法

    最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. Java代码 package com.image.suoluetu ...

  7. JAVA绘制图片原理_java开发_图片截取工具实现原理

    先来看看效果: 测试一: 原图: 效果图: 测试二: 原图: 效果图: 代码部分: /** * */ package com.b510; import java.awt.rectangle; impo ...

  8. Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)

    Java BufferImage图片处理(获取宽高.截取.转换灰度图) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Java读取图片为byte[]数组,或者BufferedImage及互相转 ...

  9. redis java 存储图片_Redis 存储图片 [base64/url/path]vs[object]

    一.base64图片编解码 基本流程:从网络获取下载一张图片.然后base64编码,再base64解码,存到本地E盘根文件夹下. import java.awt.image.BufferedImage ...

最新文章

  1. CPU 的一些基本知识总结
  2. 腾讯云发布微瓴开放平台LinkBase,助力智慧建筑产业生态全面升级
  3. 国内首本Android开发图书之双剑
  4. 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)
  5. ios/mac command
  6. 【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送
  7. TortoiseGit 修改密码
  8. php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...
  9. python如何获取javascript动态产生的数据
  10. linux目录数据块,如何在Linux上列出文件的数据块?
  11. 80套传统简历模板.zip
  12. java电脑控制对方手机_电脑控制大师手机专家多控系统-Total Control电脑控制手机助手下载V7.0.0官方电脑端32位/64位最新版-西西软件下载...
  13. python cv2 绘制不规则形状的最小外接矩形、最大内接矩形、最大内接圆、最小外接圆、拟合椭圆
  14. TypeException: Could not resolve type alias******
  15. Java基础(一)之公共基础
  16. 计算机网络体系结构-虚拟专用网
  17. 涨姿势 , JavaScript 玩转多线程编程~
  18. Python自动化测试系列[v1.0.0][JS完成任务]
  19. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  20. 详解one—hot编码(独热编码)

热门文章

  1. 锵锵三人行:AWS,下个路口见
  2. 用flask和html制作个人相册页面,Python编程flask使用页面模版的方法
  3. YOLO目标检测之IOU计算及其衍变体
  4. (三)腾讯云开发工程师TCA题库(题目含详细解析)
  5. (附源码)springboot实验室预约管理系统 毕业设计 261141
  6. java8新特性(2)-Lambda表达式
  7. Spark Sql 聚合
  8. 声源定位matlab模拟,毕业论文-基于MATLAB的声源定位系统.doc
  9. java读取.html文件并获取数据
  10. java程序模拟红篮球概率事件