博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java图片截取组件ImageIO
阅读量:7078 次
发布时间:2019-06-28

本文共 3885 字,大约阅读时间需要 12 分钟。

引用:

javax.imageio

使用 ImageIO 类的静态方法可以执行许多常见的图像 I/O 操作。   
此包包含一些基本类和接口,有的用来描述图像文件内容(包括元数据和缩略图)(IIOImage);

有的用来控制图像读取过程(ImageReader、ImageReadParam)和控制图像写入过程(ImageWriter 和 ImageWriteParam);

详细 ImageIO处理图像的封装例子     

 

[java]   
 
    1. package com.mapbar.graphics;  
    2.   
    3. import java.awt.Graphics;  
    4. import java.awt.Image;  
    5. import java.awt.Rectangle;  
    6. import java.awt.image.BufferedImage;  
    7. import java.io.File;  
    8. import java.io.FileOutputStream;  
    9. import java.io.IOException;  
    10. import java.util.Arrays;  
    11. import java.util.Iterator;  
    12.   
    13. import javax.imageio.ImageIO;  
    14. import javax.imageio.ImageReadParam;  
    15. import javax.imageio.ImageReader;  
    16. import javax.imageio.metadata.IIOMetadata;  
    17. import javax.imageio.stream.ImageInputStream;  
    18.   
    19. import com.sun.image.codec.jpeg.JPEGCodec;  
    20. import com.sun.image.codec.jpeg.JPEGImageEncoder;  
    21.   
    22. /** 
    23.  *  
    24.  * Class ImageIOTest.java 
    25.  *  
    26.  * Description javax.imageio 操作 
    27.  *  
    28.  * Company mapbar 
    29.  *  
    30.  * author Chenll E-mail: Chenll@mapbar.com 
    31.  *  
    32.  * Version 1.0 
    33.  *  
    34.  * Date 2012-7-23 上午11:16:17 
    35.  */  
    36. public class ImageIOTest {  
    37.   
    38.     /** 
    39.      * Java Image I/O API 支持的读入,写出普通的格式,如果需要开发其它格式,还需要第三方插件,eg JIMI, JMagic 
    40.      */  
    41.     public void formatImageNames() {  
    42.   
    43.         String[] imageFormats = ImageIO.getReaderFormatNames();  
    44.         // [jpg, BMP, bmp, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]  
    45.         System.out.println(Arrays.asList(imageFormats));  
    46.   
    47.         String[] imageFormats1 = ImageIO.getWriterFormatNames();  
    48.         // [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]  
    49.         System.out.println(Arrays.asList(imageFormats1));  
    50.   
    51.     }  
    52.   
    53.     /** 
    54.      * Image I/O高级操作 ImageReader ImageWriter 通过ImageReader 
    55.      * 可以获取图片信息而不用把整张图片数据都读入内存。 
    56.      *  
    57.      * @throws IOException 
    58.      */  
    59.     public void imageReaderOp() throws IOException {  
    60.         Iterator<ImageReader> readers = ImageIO  
    61.                 .getImageReadersByFormatName("JPG");  
    62.         ImageReader reader = readers.next();  
    63.         // 构造输入源  
    64.         File bigFile = new File("E:\\big.JPG");  
    65.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
    66.         // 输入源和ImageReader关联  
    67.         reader.setInput(iis, true);  
    68.         // 获取第一张图片的高度,试图解码文件的必要部分,去获取图片的宽度,而不用读取任何一个象素  
    69.         int imageIndex = 0;  
    70.         int width = reader.getWidth(imageIndex);  
    71.     }  
    72.   
    73.     /** 
    74.      * 控制图片操作,ImageReadParam 可以让程序更好的控制内存,比如指定一个感兴趣的区域 
    75.      *  
    76.      * @throws IOException 
    77.      */  
    78.     public void imageReadParamOp() throws IOException {  
    79.         int imageIndex = 0;  
    80.         Iterator<ImageReader> readers = ImageIO  
    81.                 .getImageReadersByFormatName("JPG");  
    82.         ImageReader reader = readers.next();  
    83.         File bigFile = new File("E:\\big.JPG");  
    84.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
    85.         reader.setInput(iis, true);  
    86.         ImageReadParam irp = reader.getDefaultReadParam();  
    87.         int halfWidth = reader.getWidth(imageIndex) / 2;  
    88.         int halfHeight = reader.getHeight(imageIndex) / 2;  
    89.         Rectangle rect = new Rectangle(0, 0, halfWidth, halfHeight);  
    90.         irp.setSourceRegion(rect);  
    91.         BufferedImage bi = reader.read(imageIndex, irp);  
    92.         ImageIO.write(bi, "JPG", new File("E:\\big_half.JPG"));  
    93.     }  
    94.   
    95.     /** 
    96.      * 图片元信息 
    97.      *  
    98.      * @throws IOException 
    99.      */  
    100.     public void ImageMetadata() throws IOException {  
    101.         int imageIndex = 0;  
    102.         Iterator<ImageReader> readers = ImageIO  
    103.                 .getImageReadersByFormatName("JPG");  
    104.         ImageReader reader = readers.next();  
    105.         File bigFile = new File("E:\\big.JPG");  
    106.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
    107.         reader.setInput(iis, true);  
    108.         IIOMetadata metadata = reader.getImageMetadata(imageIndex);  
    109.     }  
    110.   
    111.     /** 
    112.      * 生成缩略图 
    113.      *  
    114.      * @throws IOException 
    115.      */  
    116.     public void generateSmall() throws IOException {  
    117.         File bigFile = new File("E:\\big.JPG");  
    118.         Image image = ImageIO.read(bigFile);  
    119.         int width = image.getWidth(null); // 3264  
    120.         int height = image.getHeight(null); // 2448  
    121.         BufferedImage buffi = new BufferedImage(width / 2, height / 2,  
    122.                 BufferedImage.TYPE_INT_RGB);  
    123.         Graphics g = buffi.getGraphics();  
    124.         g.drawImage(image, 0, 0, width / 2, height / 2, null);  
    125.         g.dispose();  
    126.         ImageIO.write(buffi, "JPG", new File("E:\\small.JPG"));// width:1632 height:1224  
    127.     }  
    128.   
    129.     public static void main(String[] args) throws IOException {  
    130.         ImageIOTest iot = new ImageIOTest();  
    131.         iot.generateSmall();  
    132.         iot.formatImageNames();  
    133.         iot.imageReaderOp();  
    134.         iot.imageReadParamOp();  
    135.         iot.ImageMetadata();  
    136.     }  
    137.   
    138. }  

转载地址:http://etpml.baihongyu.com/

你可能感兴趣的文章
XP,没重启,“魔窟”可以“莫哭”
查看>>
市场突破1300亿 我国传感器产业急需“自力更生”
查看>>
商品预约抢购实践及redis性能测试
查看>>
这就尴尬了!远程办公先驱IBM要求员工重返办公室工作
查看>>
有人说联想不如华为,杨元庆:别这么片面
查看>>
物联网时代到来 IC设计有望弯道超越
查看>>
用友企业互联网服务闪亮2016中国CIO高峰论坛
查看>>
2016-2020年全球数据中心发电机市场将以年复合增率10.8%增长
查看>>
R调用library(xlsx)报错问题
查看>>
《UNIX网络编程 卷2:进程间通信(第2版)》——2.4 IPC权限
查看>>
基于阿里云数加搭建企业级数据分析平台
查看>>
《嵌入式设备驱动开发精解》——2.2 充分利用现有的硬件资源
查看>>
历经14年终于解禁!尝到第一口美国牛肉的是阿里会员
查看>>
大势所趋,WebAssembly 将统一浏览器编译格式
查看>>
《ANSYS Workbench有限元分析实例详解(静力学)》——2.4 ACT插件
查看>>
《Python语言程序设计》——2.12 实例研究:显示当前时间
查看>>
码云推荐 | WEB 网页端在线流程设计器
查看>>
《编译与反编译技术实战》——第3章词法分析器的设计与实现
查看>>
《数据分析实战:基于EXCEL和SPSS系列工具的实践》一3.4.2 用专业工具处理
查看>>
MySQL运维之神奇的参数(终结篇)
查看>>