1. 程式人生 > >java ImageIO處理

java ImageIO處理

avax.imageio
使用 ImageIO 類的靜態方法可以執行許多常見的影象 I/O 操作。   
此包包含一些基本類和介面,有的用來描述影象檔案內容(包括元資料和縮圖)(IIOImage);

有的用來控制影象讀取過程(ImageReader、ImageReadParam)和控制影象寫入過程(ImageWriter 和 ImageWriteParam);

  1. package com.mapbar.graphics;  
  2. import java.awt.Graphics;  
  3. import java.awt.Image;  
  4. import java.awt.Rectangle;  
  5. import
     java.awt.image.BufferedImage;  
  6. import java.io.File;  
  7. import java.io.FileOutputStream;  
  8. import java.io.IOException;  
  9. import java.util.Arrays;  
  10. import java.util.Iterator;  
  11. import javax.imageio.ImageIO;  
  12. import javax.imageio.ImageReadParam;  
  13. import javax.imageio.ImageReader;  
  14. import javax.imageio.metadata.IIOMetadata;  
  15. import javax.imageio.stream.ImageInputStream;  
  16. import com.sun.image.codec.jpeg.JPEGCodec;  
  17. import com.sun.image.codec.jpeg.JPEGImageEncoder;  
  18. /** 
  19.  *  
  20.  * Class ImageIOTest.java 
  21.  *  
  22.  * Description javax.imageio 操作 
  23.  *  
  24.  * Company mapbar 
  25.  *  
  26.  * author Chenll E-mail: [email protected] 
  27.  * 
     
  28.  * Version 1.0 
  29.  *  
  30.  * Date 2012-7-23 上午11:16:17 
  31.  */
  32. publicclass ImageIOTest {  
  33.     /** 
  34.      * Java Image I/O API 支援的讀入,寫出普通的格式,如果需要開發其它格式,還需要第三方外掛,eg JIMI, JMagic 
  35.      */
  36.     publicvoid formatImageNames() {  
  37.         String[] imageFormats = ImageIO.getReaderFormatNames();  
  38.         // [jpg, BMP, bmp, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
  39.         System.out.println(Arrays.asList(imageFormats));  
  40.         String[] imageFormats1 = ImageIO.getWriterFormatNames();  
  41.         // [BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
  42.         System.out.println(Arrays.asList(imageFormats1));  
  43.     }  
  44.     /** 
  45.      * Image I/O高階操作 ImageReader ImageWriter 通過ImageReader 
  46.      * 可以獲取圖片資訊而不用把整張圖片資料都讀入記憶體。 
  47.      *  
  48.      * @throws IOException 
  49.      */
  50.     publicvoid imageReaderOp() throws IOException {  
  51.         Iterator<ImageReader> readers = ImageIO  
  52.                 .getImageReadersByFormatName("JPG");  
  53.         ImageReader reader = readers.next();  
  54.         // 構造輸入源
  55.         File bigFile = new File("E:\\big.JPG");  
  56.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
  57.         // 輸入源和ImageReader關聯
  58.         reader.setInput(iis, true);  
  59.         // 獲取第一張圖片的高度,試圖解碼檔案的必要部分,去獲取圖片的寬度,而不用讀取任何一個象素
  60.         int imageIndex = 0;  
  61.         int width = reader.getWidth(imageIndex);  
  62.     }  
  63.     /** 
  64.      * 控制圖片操作,ImageReadParam 可以讓程式更好的控制記憶體,比如指定一個感興趣的區域 
  65.      *  
  66.      * @throws IOException 
  67.      */
  68.     publicvoid imageReadParamOp() throws IOException {  
  69.         int imageIndex = 0;  
  70.         Iterator<ImageReader> readers = ImageIO  
  71.                 .getImageReadersByFormatName("JPG");  
  72.         ImageReader reader = readers.next();  
  73.         File bigFile = new File("E:\\big.JPG");  
  74.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
  75.         reader.setInput(iis, true);  
  76.         ImageReadParam irp = reader.getDefaultReadParam();  
  77.         int halfWidth = reader.getWidth(imageIndex) / 2;  
  78.         int halfHeight = reader.getHeight(imageIndex) / 2;  
  79.         Rectangle rect = new Rectangle(00, halfWidth, halfHeight);  
  80.         irp.setSourceRegion(rect);  
  81.         BufferedImage bi = reader.read(imageIndex, irp);  
  82.         ImageIO.write(bi, "JPG"new File("E:\\big_half.JPG"));  
  83.     }  
  84.     /** 
  85.      * 圖片元資訊 
  86.      *  
  87.      * @throws IOException 
  88.      */
  89.     publicvoid ImageMetadata() throws IOException {  
  90.         int imageIndex = 0;  
  91.         Iterator<ImageReader> readers = ImageIO  
  92.                 .getImageReadersByFormatName("JPG");  
  93.         ImageReader reader = readers.next();  
  94.         File bigFile = new File("E:\\big.JPG");  
  95.         ImageInputStream iis = ImageIO.createImageInputStream(bigFile);  
  96.         reader.setInput(iis, true);  
  97.         IIOMetadata metadata = reader.getImageMetadata(imageIndex);  
  98.     }  
  99.     /** 
  100.      * 生成縮圖 
  101.      *  
  102.      * @throws IOException 
  103.      */
  104.     publicvoid generateSmall() throws IOException {  
  105.         File bigFile = new File("E:\\big.JPG");  
  106.         Image image = ImageIO.read(bigFile);  
  107.         int width = image.getWidth(null); // 3264
  108.         int height = image.getHeight(null); // 2448
  109.         BufferedImage buffi = new BufferedImage(width / 2, height / 2,  
  110.                 BufferedImage.TYPE_INT_RGB);  
  111.         Graphics g = buffi.getGraphics();  
  112.         g.drawImage(image, 00, width / 2, height / 2null);  
  113.         g.dispose();  
  114.         ImageIO.write(buffi, "JPG"new File("E:\\small.JPG"));// width:1632 height:1224
  115.     }  
  116.     publicstaticvoid main(String[] args) throws IOException {  
  117.         ImageIOTest iot = new ImageIOTest();  
  118.         iot.generateSmall();  
  119.         iot.formatImageNames();  
  120.         iot.imageReaderOp();  
  121.         iot.imageReadParamOp();  
  122.         iot.ImageMetadata();  
  123.     }  
  124. }  

相關推薦

java ImageIO處理

avax.imageio使用 ImageIO 類的靜態方法可以執行許多常見的影象 I/O 操作。   此包包含一些基本類和介面,有的用來描述影象檔案內容(包括元資料和縮圖)(IIOImage); 有的用來控制影象讀取過程(ImageReader、ImageReadParam

Java imageio圖片處理

暑假就快要結束了,整理一下自己所學的   RGB565->RGB888 red = ( color & 0xf800 ) >> 8; green = ( color & 0x07e0 ) >> 3; blue = (color &a

java圖片處理---Javax.imageIO包的用法

Java中進行影象I/O(即讀圖片和寫圖片,不涉及到複雜影象處理)有三個方法: 1. Java Image I/O API,支援常見圖片,從Java 2 version 1.4.0開始就內建了。 主頁:http://java.sun.com/javase/6/docs/technotes/guides/

Java處理二進制移位

置0 返回 進制 com 移位 移除 bsp int 說服力 我相信,這篇文章讀起來會相當有趣。 文章中編程語言是Java,用Java的原因:第一,Java不做數據溢出校驗,這樣我們可以忽略溢出異常;第二,Java普及率比較高,就像是python或shell,幾乎人人都會吶

java io 處理流,BufferdInputStream、BufferedWriter、BufferedReader

share 相同 rgs 定位 ioe 程序 cat i++ args BufferdInputStream:讀取helloworld。java helloworld.java: package io; public class HelloWor

Java 異常處理和 Log4j 配置文件

images orm 信息 not bound img source jar 下標 一、 程序錯誤 警告:黃線:Warning 錯誤:資源類:系統級(線程)/ 環境級(繪圖) 異常:編譯級:Exception 運行級:Exception -> RuntimeExc

從零開始理解JAVA事件處理機制(2)

extend nds 接下來 htm ref param 簡單 tostring ansi 第一節中的示例過於簡單《從零開始理解JAVA事件處理機制(1)》,簡單到讓大家覺得這樣的代碼簡直毫無用處。但是沒辦法,我們要繼續寫這毫無用處的代碼,然後引出下一階段真正有益的代碼。

15. Java異常處理

ace hover 避免 構造函數 裏的 width 原因 sans 克隆對象 html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,addre

java異常處理

並不是 9.png 代碼塊 可能 函數 處理異常 finall int 將不 一 異常: 是指程序運行的過程中,發生某些意外的事情,比如10除以0, 文件不存在等。 例如: pub

項目中java異常處理

tails 驗證 包含 erro csdn 拋出異常 項目 cep ble 一、java異常類介紹。 Throwable: 有兩個重要的子類:Exception(異常)和 Error(錯誤),二者都是 Java 異常處理的重要子類,各自都包含大量子類。 有一篇比較好的b

Java Selenium - 處理頁面彈出窗

cnblogs clas java iterator 循環 當前 iter string ren 1. 得到當前窗口句柄 2. 得到所有窗口句柄 3. 循環找到目標窗口 String currentWindow = driver.getWindowHandle(); S

Java 異常處理

nal fbo 失敗 類定義 參數 方法 ray 接下來 語法檢查 閱讀目錄 異常的概念 異常的體系結構 Java 異常的處理機制 異常處理的基本語法 異常鏈 自定義異常 總結 回到頂部 異常的概念 異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候

實習培訓——Java異常處理(8)

如何工作 出了 我們 個數 試圖 類對象 bject epo 很多 實習培訓——Java異常處理(8) Java 異常處理 異常是程序中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。 比如說,你的代碼少了一個分號,那麽運行出來結果是提示是錯誤 java

Java處理大數據的時候一些小技巧

主線程 成本 寫入 exce 得到 拆分 是的 很多 會有  http://soft.chinabyte.com/database/258/12609258.shtml 眾所周知,java在處理數據量比較大的時候,加載到內存必然會導致內存溢出,而在一些數據處理中我們不得不去

JAVA Exception處理

++ 變量 ssd 編譯 lar 異常信息 虛擬機 key use 原文地址:http://blog.csdn.net/hguisu/article/details/6155636 1. 引子 try…catch…finally恐怕是大家再熟悉不過的語句了

Java——異常處理

上一個 分別是 類型轉換 冒號 意思 參數 ack span log 1、java提供的異常不可能預見所有的問題,所以需要自己定義異常類,必須從已有的異常類繼承,最好選擇意思相近的異常類繼承。 class MyException extends Exception{}

Java - 異常處理

一個 普通 throw oid 基類 語句 內容 推薦 出現 主要內容: * Java 異常的概念。 * Java 異常的分類。 * 異常的捕獲和處理。 Q:Java 是如何對異常進行處理的? A:Java 中定義了很多異常類,這些類對應了各種各樣可能出現的異常事

使用Java處理JSON數據

www version 數據 tid com pos json數據 style .html maven依賴: <!-- https://mvnrepository.com/artifact/org.json/json --> <dependency>

java事務處理全解析

成功 spa 做了 開發 overflow lan 進行 訪問 ksh 最近學習java事務,看到一位前輩的系列博客不錯,轉載過來作為記錄 轉載地址:http://www.davenkin.me/post/2013-02-16/40048284001 (一)Jav

java異常處理的機制 java 架構師學習 java北京

語句 變量 point try ray 多重 span throw 創建 在Java中,異常情況分為Exception(異常)和Error(錯誤)兩大類,Java異常通常是指程序運行過程中出現的非正常情況,如用戶輸入錯誤、除數為零、需要處理的文件不存在、數組下標越界等,對於