Java 图片 处理

来源:互联网 发布:js重新加载指定div 编辑:程序博客网 时间:2024/04/27 23:19

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
原创粉丝点击