java ImageIO处理
avax.imageio
使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。
此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);
有的用来控制图像读取过程(ImageReader、ImageReadParam)和控制图像写入过程(ImageWriter 和 ImageWriteParam);
- 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处理相关推荐
- java imageio temp_Java ImageIO.setUseCache方法代碼示例
本文整理匯總了Java中javax.imageio.ImageIO.setUseCache方法的典型用法代碼示例.如果您正苦於以下問題:Java ImageIO.setUseCache方法的具體用法? ...
- java imageio 保存_java-ImageIO保存回原始大小
我一直在从互联网上寻找一些解决方案,但仍然找不到我的问题的答案. 我一直在工作或正在执行一个程序,该程序将从PC上获取图像文件,然后将使用Java Graphics对其进行编辑以添加一些文本/对象/等 ...
- JAVA ImageIO图片处理后变色
JAVA ImageIO图片处理后变色问题 最初使用ImagIO.Read() 从InputStream 转成BufferImage 然后进行水印添加,普通图片没问题,但是当前端通过JS剪裁传入后就出 ...
- java ImageIO.write图片上传变色及背景变黑解决
java ImageIO.write图片上传变色及背景变黑解决 public void getImage(HttpServletRequest request, HttpServletResponse ...
- java imageio删除图片_Java 提取、替换、删除PDF文档中的图片
在一篇文章里,配有与文本信息相得益彰的图片,不仅能够活跃与美化版面,同时也有利于提高文章的可读性和阅读效果,从而增强其吸引力.同时,对文档中已存在图片的处理也尤为重要.本文将通过使用Java程序来演示 ...
- java imageio 内存问题_java imageio内存泄漏
我有两个 Java应用程序都使用大量内存,并且都使用ImageIO.write().到目前为止,这是我在两者之间找到的唯一共识. 一个循环中的图像大小调整.另一个循环下载图像并将其保存到磁盘.这是相关 ...
- java import imageio_是否可以使用Java ImageIO从InputStream读取多个...
是的,可以从(单个)InputStream读取多个图像. 我认为最明显的解决方案是使用一种文件格式,该文件格式已广泛支持多种图像,例如TIFF.即使ImageIO类没有任何便利的方法,如ImageIO ...
- Java imageio底层_java - Java中的ImageIO问题 - 堆栈内存溢出
我遇到的问题是,我在JAVA的Applet Viewer中看不到ImageIO类引用的任何图片. 我正在关注在线教程,但尚未收到作者的回信-他的页面上有类似的问题他没有回答,所以我假设他正在尝试自己解 ...
- java imageio 内存问题_java中的内存泄漏ImageIO.read()
我正在使用ImageIO.read().这是由原始应用的主要方法调用的类是这样的:java中的内存泄漏ImageIO.read() import java.awt.*; import javax.sw ...
最新文章
- 以女朋友为例讲解 TCP/IP 三次握手与四次挥手
- 【考证】华为HCIP、HCIE认证考试大纲
- 选购光端机有哪些必备条件
- Open Source Web Design!
- C#实现图片的无损压缩
- 有机会多熟悉下开源框架
- [转]oracle分析函数Rank, Dense_rank, row_number
- SpringBoot时间戳与MySql数据库记录相差14小时排错
- window10怎么卸载php,window_win10怎么卸载程序?win10卸载程序教程,当win10正式版发布以后,不少 - phpStudy...
- 【英语学习】【Daily English】U10 Education L02 I'm not a pushy parent
- Oracle数据库链路
- ztz11的noip模拟赛T1:愤怒的XiaoX
- C语言:使用递归解决汉诺塔问题。
- c语言作业陌路寒暄,短学期算法与编程实习的C语言题目
- uniapp教程,uni-app教程
- React Suspense 尝鲜,处理前后端IO异步操作
- 床的标准尺寸和规格都有哪种
- java解压在线tgz文件
- IIS Nginx Apache Tomcat 中间件漏洞
- 17、内容页面 - 小程序端开发 - 微擎小程序模块应用开发