当前位置: 代码迷 >> Java相关 >> 关于ImageIO的讨论
  详细解决方案

关于ImageIO的讨论

热度:144   发布时间:2007-12-20 15:29:06.0
关于ImageIO的讨论
现在我经过一些图像处理后就得到一个 Image类的对象,请问有没有办法把这个Image 的对象输出为一个File类的一个文件对象呢?
    也就是说有没有办法可以把一个Image类对象转为一个存在电脑里的一个 .jpg文件呢?
   谢谢
搜索更多相关的解决方案: ImageIO  

----------------解决方案--------------------------------------------------------
可以,用ImageIO的
static boolean     write(RenderedImage im, String formatName, File output)
方法.
如果你的Image是个BufferedImage,可以直接使用上面的方法,
否则先
bi =new BufferedImage(w,h,....);
然后
Graphics g =bi.getGraphics();
最后
g.drawImage(image,0,0,w,h,null);
再对这个bi调用ImageIO的write方法
----------------解决方案--------------------------------------------------------
楼上正解........
   我自己也写了一个,
  
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.awt.image.FilteredImageSource;
import java.awt.image.ReplicateScaleFilter;
import java.io.File;
import java.io.FileOutputStream;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import javax.swing.*;
public class ScaleImage{
    String name;
    public ScaleImage(String fullPathName)
    {
        this.name = fullPathName;
        Toolkit tk = Toolkit.getDefaultToolkit();
        Image image = tk.getImage(this.name);
        try{
            ReplicateScaleFilter rsf = new ReplicateScaleFilter(100,100);
            FilteredImageSource fis = new FilteredImageSource(image.getSource(),rsf);
            MediaTracker mt = new MediaTracker(new JFrame());
            
            final Image tempImage = tk.createImage(fis);
            mt.addImage(tempImage, 0);
            mt.waitForID(0);
            int width = tempImage.getWidth(null);
            int height = tempImage.getHeight(null);
            
            BufferedImage bi = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
            bi.getGraphics().drawImage(tempImage, 0, 0, width,height,null);
            
            FileOutputStream fos = new FileOutputStream(new File(this.name));
            JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(fos);
            jpeg.encode(bi);
            
            fos.close();
            
        }catch(Exception e)
        {
            System.out.println("error");
        }
        
    }
    public static void main(String args[])
    {
        new ScaleImage("D:\\Program Files\\Apache Software Foundation\\Tomcat 5.5\\webapps\\Online\\uploadFiles\\2.jpg");   //就是图片的路径,处理完后会覆盖原来的图片
    }
}
----------------解决方案--------------------------------------------------------
最好不要用
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
里面的东西
这些属于sun的JDK私有的API,在其它公司的JDK上不一定能运行
----------------解决方案--------------------------------------------------------
学习了,那么想问一下,那些sun自己的类啊,怎样才有它的API说明文档呢?
----------------解决方案--------------------------------------------------------