Java 圖片 處理

來源:互聯網
上載者:User

Java SDK 1.4之後,對圖片處理的功能得到了很大的提升。其提供的ImageIO類提供了近乎
傻瓜式的操作。現在讓我們看看他們給我們帶來什麼樣的驚喜。

讀取圖形並且顯示的核心代碼:
public void showPic(){
  File f=new File("e:/tt.jpg");
   BufferedImage image=null;
        try {
            image = ImageIO.read(f);
        } catch (IOException ex) {
            Logger.getLogger(JavaImage.class.getName()).log(Level.SEVERE, null, ex);
        }
   setContentPane(new JLabel(new ImageIcon(image)));
   validate();
}

結果如下:

同理寫入一個檔案也是相當的簡單.
使用ImageIO.write(BufferedImage image,String format,File f)就可以了。
當然如果你還需要其他的處理比如添加字到圖片上,變形圖片等,那麼就需要其他的Java2d的知識了,這不在我們現在的討論範圍之內。
那麼如果你想圖區gif動畫,並且希望分離出所有的圖片,那麼該如何?呢?
核心代碼如下
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
JFileChooser chooser=new JFileChooser();
//chooser.setCurrentDirectory(new File("."));
final List list=new ArrayList();
list.add("jpg");
list.add("png");
list.add("gif");

chooser.setFileFilter(new javax.swing.filechooser.FileFilter() {

            @Override
            public boolean accept(File f) {
               if(f.isDirectory())return true;
               String name=f.getName();
               int p=name.lastIndexOf('.');
               if(p==-1)return false;
               String suffix=name.substring(p+1).toLowerCase();
               return list.contains(suffix);
            }

            @Override
            public String getDescription() {
                return "image files";
            }
       
});
int r=chooser.showOpenDialog(this);
if(r!=JFileChooser.APPROVE_OPTION)return;
File f=chooser.getSelectedFile();
String name=f.getName();
String suffix=name.substring(name.lastIndexOf('.')+1);
Iterator iter=ImageIO.getImageReadersByFormatName(suffix);
ImageReader reader=null;
Box box=Box.createVerticalBox();
while(iter.hasNext())
{
   reader=(ImageReader)iter.next();
}
ImageInputStream  imagein=null;
BufferedImage[] bi=null;
        try {
            imagein = ImageIO.createImageInputStream(f);
            reader.setInput(imagein);
int count=reader.getNumImages(true);
bi=new BufferedImage[count];
for(int i=0;i<count;i++)
{
   bi[i]=reader.read(i);
   box.add(new JLabel(new ImageIcon(bi[i])));
}
        } catch (IOException ex) {
            Logger.getLogger(JavaImage.class.getName()).log(Level.SEVERE, null, ex);
        }
setContentPane(new JScrollPane(box));
validate();
}

結果如:

 

 

讓我們解釋一下其中的一些代碼。
前面有一部分是JFileChooser檔案過濾選擇的一些代碼。這塊我們暫且不分析。我們
看看下面的。
Iterator iter=ImageIO.getImageReadersByFormatName(suffix);
通過檔案格式獲得相應ImageReader ,當然這裡的傳回值是一個迭代器.
while(iter.hasNext())
{
   reader=(ImageReader)iter.next();
}
通過遍曆獲得相應的ImageReader。
接下來的代碼主要是獲得相應的圖片的輸入資料流。
int count=reader.getNumImages(true); 得到gif圖片內部包含的圖片數。
bi[i]=reader.read(i);獲得相應的內部圖片

 

——————————————

新網站上線 歡迎大家 網站交易中心 在這裡你可以購買或者出售你的網站。
網站資訊發布中心 在這裡有各種交易資訊的發布。同時提供
一些軟體的免費使用(附有源碼)。
網站部落格系統 這裡你可以註冊自己的部落格。一個賬戶無限量部落格
連絡方式: support@websiteempire.cn
QQ:563828566
MSN:zhuhailin123@hotmail.com

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.