java 剪切 图片 BufferedImage
一:对于磁盘上的图片;
/**
* 函 数 名: 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相关推荐
- java 剪切图片点坐标_详细介绍java根据坐标截取图片的实例代码
这篇文章主要介绍了java 根据坐标截取图片实例代码的相关资料,需要的朋友可以参考下 java 根据坐标截取图片 实例代码:代码中有不是注释,很好看懂!package com.json.test; i ...
- java 的图片BufferedImage方式缩小后有严重色差/严重偏红怎么办
今天遇到的两个问题: 图片本如图1所示, java处理后,变成了图2所示,严重失真,偏红,怎么办? 以上直接上关键代码: 原来处理的代码: import java.awt.Graphics2D; im ...
- Java剪切图片为圆形,并使边缘透明。
剪切图片为圆形,并使边缘透明. 将图片剪切为圆形并使边缘透明 效果图: 看起来朦胧的 但是放进面板之后色彩与原图一致 public static void k() {BufferedImage bi1 ...
- java打印图片到页面_在Java中打印BufferedImage的正确方法
这是我的一个Java项目中的一个.此代码将在打印机页面上缩放和打印一个图像. 你这样称呼它: printButton.addActionListener(new ActionListener() { ...
- java截取图片-设置方位+设置大小
java截取图片-设置方位+设置大小 package com.onegrid.darj.test; import java.awt.Rectangle; import java.awt.image ...
- java读取图片缩略方法_java 图片缩略图的两种方法
最近网上看到两种不同的java图片缩略图的绘制方案 第一种,使用Graphics().drawImage按照一定的比例重新绘制图像. Java代码 package com.image.suoluetu ...
- JAVA绘制图片原理_java开发_图片截取工具实现原理
先来看看效果: 测试一: 原图: 效果图: 测试二: 原图: 效果图: 代码部分: /** * */ package com.b510; import java.awt.rectangle; impo ...
- Java BufferImage图片处理(获取宽高、图片截取、转换灰度图)
Java BufferImage图片处理(获取宽高.截取.转换灰度图) 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Java读取图片为byte[]数组,或者BufferedImage及互相转 ...
- redis java 存储图片_Redis 存储图片 [base64/url/path]vs[object]
一.base64图片编解码 基本流程:从网络获取下载一张图片.然后base64编码,再base64解码,存到本地E盘根文件夹下. import java.awt.image.BufferedImage ...
最新文章
- CPU 的一些基本知识总结
- 腾讯云发布微瓴开放平台LinkBase,助力智慧建筑产业生态全面升级
- 国内首本Android开发图书之双剑
- 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)
- ios/mac command
- 【ABAP系列】SAP ABAP模块-任意report作为附件以邮件形式发送
- TortoiseGit 修改密码
- php后门 佛像,35张活的再久,也未必见过的照片,图2是佛像通过CT扫描后内部照...
- python如何获取javascript动态产生的数据
- linux目录数据块,如何在Linux上列出文件的数据块?
- 80套传统简历模板.zip
- java电脑控制对方手机_电脑控制大师手机专家多控系统-Total Control电脑控制手机助手下载V7.0.0官方电脑端32位/64位最新版-西西软件下载...
- python cv2 绘制不规则形状的最小外接矩形、最大内接矩形、最大内接圆、最小外接圆、拟合椭圆
- TypeException: Could not resolve type alias******
- Java基础(一)之公共基础
- 计算机网络体系结构-虚拟专用网
- 涨姿势 , JavaScript 玩转多线程编程~
- Python自动化测试系列[v1.0.0][JS完成任务]
- matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
- 详解one—hot编码(独热编码)