java图片截取组件ImageIO
引用:http://blog.csdn.net/cdl2008sky/article/details/7775681
javax.imageio
使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。
此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);
有的用来控制图像读取过程(ImageReader、ImageReadParam)和控制图像写入过程(ImageWriter 和 ImageWriteParam);
详细 JavaImageIO处理图像的封装例子 http://www.gzhost.net/Artdetail-1609-649.html
- package com.mapbar.graphics;
- import java.awt.Graphics;
- import java.awt.Image;
- import java.awt.Rectangle;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.Arrays;
- import java.util.Iterator;
- import javax.imageio.ImageIO;
- import javax.imageio.ImageReadParam;
- import javax.imageio.ImageReader;
- import javax.imageio.metadata.IIOMetadata;
- import javax.imageio.stream.ImageInputStream;
- import com.sun.image.codec.jpeg.JPEGCodec;
- import com.sun.image.codec.jpeg.JPEGImageEncoder;
- /**
- *
- * Class ImageIOTest.java
- *
- * Description javax.imageio 操作
- *
- * Company mapbar
- *
- * author Chenll E-mail: Chenll@mapbar.com
- *
- * Version 1.0
- *
- * Date 2012-7-23 上午11:16:17
- */
- public class ImageIOTest {
- /**
- * Java Image I/O API 支持的读入,写出普通的格式,如果需要开发其它格式,还需要第三方插件,eg JIMI, JMagic
- */
- public void formatImageNames() {
- String[] imageFormats = ImageIO.getReaderFormatNames();
- // [jpg, BMP, bmp, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
- System.out.println(Arrays.asList(imageFormats));
- String[] imageFormats1 = ImageIO.getWriterFormatNames();
- // [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
- System.out.println(Arrays.asList(imageFormats1));
- }
- /**
- * Image I/O高级操作 ImageReader ImageWriter 通过ImageReader
- * 可以获取图片信息而不用把整张图片数据都读入内存。
- *
- * @throws IOException
- */
- public void imageReaderOp() throws IOException {
- Iterator<ImageReader> readers = ImageIO
- .getImageReadersByFormatName("JPG");
- ImageReader reader = readers.next();
- // 构造输入源
- File bigFile = new File("E:\\big.JPG");
- ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
- // 输入源和ImageReader关联
- reader.setInput(iis, true);
- // 获取第一张图片的高度,试图解码文件的必要部分,去获取图片的宽度,而不用读取任何一个象素
- int imageIndex = 0;
- int width = reader.getWidth(imageIndex);
- }
- /**
- * 控制图片操作,ImageReadParam 可以让程序更好的控制内存,比如指定一个感兴趣的区域
- *
- * @throws IOException
- */
- public void imageReadParamOp() throws IOException {
- int imageIndex = 0;
- Iterator<ImageReader> readers = ImageIO
- .getImageReadersByFormatName("JPG");
- ImageReader reader = readers.next();
- File bigFile = new File("E:\\big.JPG");
- ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
- reader.setInput(iis, true);
- ImageReadParam irp = reader.getDefaultReadParam();
- int halfWidth = reader.getWidth(imageIndex) / 2;
- int halfHeight = reader.getHeight(imageIndex) / 2;
- Rectangle rect = new Rectangle(0, 0, halfWidth, halfHeight);
- irp.setSourceRegion(rect);
- BufferedImage bi = reader.read(imageIndex, irp);
- ImageIO.write(bi, "JPG", new File("E:\\big_half.JPG"));
- }
- /**
- * 图片元信息
- *
- * @throws IOException
- */
- public void ImageMetadata() throws IOException {
- int imageIndex = 0;
- Iterator<ImageReader> readers = ImageIO
- .getImageReadersByFormatName("JPG");
- ImageReader reader = readers.next();
- File bigFile = new File("E:\\big.JPG");
- ImageInputStream iis = ImageIO.createImageInputStream(bigFile);
- reader.setInput(iis, true);
- IIOMetadata metadata = reader.getImageMetadata(imageIndex);
- }
- /**
- * 生成缩略图
- *
- * @throws IOException
- */
- public void generateSmall() throws IOException {
- File bigFile = new File("E:\\big.JPG");
- Image image = ImageIO.read(bigFile);
- int width = image.getWidth(null); // 3264
- int height = image.getHeight(null); // 2448
- BufferedImage buffi = new BufferedImage(width / 2, height / 2,
- BufferedImage.TYPE_INT_RGB);
- Graphics g = buffi.getGraphics();
- g.drawImage(image, 0, 0, width / 2, height / 2, null);
- g.dispose();
- ImageIO.write(buffi, "JPG", new File("E:\\small.JPG"));// width:1632 height:1224
- }
- public static void main(String[] args) throws IOException {
- ImageIOTest iot = new ImageIOTest();
- iot.generateSmall();
- iot.formatImageNames();
- iot.imageReaderOp();
- iot.imageReadParamOp();
- iot.ImageMetadata();
- }
- }
java图片截取组件ImageIO的更多相关文章
- 功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)
功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析 SimpleCropView是github上第一个第三方开源的图片修剪截取利器,功能强大,设计良好.我个人 ...
- Java 图片处理——如何生成高清晰度而占有磁盘小的缩略图
现在的web项目,图片越来越多,图片大小也越来越大,随便就能达到1M,2M,甚至更大.用户上传的图片,一般是无法直接使用的.一般要生成两三种对应的缩略图,分别适配不同的终端,不同的场景.比如PC,手机 ...
- Java 图片提取RGB数组 RGBOfCharMaps (整理)
package demo; /** * Java 图片提取RGB数组 RGBOfCharMaps (整理) * 声明: * 和ImageCombining配合使用的工具,这里是提取图片的R.G.B生成 ...
- Java 图片转换为字符图 CharMaps (整理)
/* * Java 图片转换成字符图 CharMaps (整理) * * 2016-1-2 深圳 南山平山村 曾剑锋 * * @(#)CharMaps.java 2014/1/16 * 1.这个一 ...
- simpleImageTool又纯java图片水印、缩放工具
simpleImageTool又一个简单.好用的图片格式转换.缩放水印叠加等功能的纯Java图片工具库. simpleImageTool的由来,近期需要用到图片处理,通过网上的图片流直接进行缩放水印叠 ...
- java图片处理开源框架
java图片处理开源框架 以前一直不明白,java开源框架什么意思,搜集资料得出以下结论 其实java框架可以理解为一个工具或者一个插件,将一个公用的.常用的技术封装起来,处理一些基础的.繁琐的问题. ...
- Java图片加文字水印
Java图片加文字水印 import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.I ...
- 微信小程序 画布drawImage实现图片截取
大多数图片都大小不一,选择框的尺寸也是宽高相等的,就会有图片被压缩 解决方法: 1.可以使用画布对图片先进行截取,保存截取图片(用户自己选取,或者指定图片中心区域截取),但是对于多张图片手动截取,会影 ...
- java图片操作--生成与原图对称的图片
java图片操作--生成与原图对称的图片 package com.pay.common.util; import java.awt.image.BufferedImage; import java.i ...
随机推荐
- 1个比较简单的使用java反射机制获取前台数据进行数据封装的例子
//利用反射机制 和 从request获取所有参数的形式来构建查询对象 CustomerChooseSearchParma searchObject = new CustomerChooseSearc ...
- 微信小程序-简易计算器
代码地址如下:http://www.demodashi.com/demo/14210.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 深入了解MyBatis参数
参考1 参考2 参考3
- springmvc json结合
获取json数据 名字一样就获取了 user @RequestMapping("/addUser") public String addUser(User user,Htt ...
- HDUOJ-----4510 小Q系列故事——为什么时光不能倒流
小Q系列故事——为什么时光不能倒流 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- you need to know those webs !
J2me开发网 http://www.j2medev.com/bbs/index.asp J2me社区 http://www.j2meforums.com/forum/ csdn http://www ...
- JMeter学习笔记--JMeter常用测试元件
JMeter测试计划有一个被称为“函数测试模式”的选项,如果被选择,它会使Jmeter记录来自服务器返回的每个取样的数据.如果你在测试监听器中选择一个文件,这个数据将被写入文件.如果你尝试一个较小的测 ...
- 【转载】Gradle构建多模块项目
本文转载自:https://yq.aliyun.com/articles/25589写的非常好! 改动如下: 1. 增加了一些[补充说明]. 2. 将执行命令使用较为显眼的博客园样式. 3. 将输出结 ...
- NRF24L01使用外部中断读取数据的问题
NRF24L01读取数据不能使用中断的方式,原因如下: 首先NRF24L01中断触发时,IRQ引脚会一直保持低电平直到状态寄存器中的中断标志被重新清零. stm32的外部中断触发方式只有上升沿或者下降 ...
- Mybatis(四):MyBatis核心组件介绍原理解析和源码解读
Mybatis核心成员 Configuration MyBatis所有的配置信息都保存在Configuration对象之中,配置文件中的大部分配置都会存储到该类中 SqlSession ...