光辉飞翔

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

经常需要做图片格式转换,用Fireworks等工具又太麻烦,于是自己写了这样一个程序进行批量格式转换。
使用Java进行图片格式转换可以借助ImageIO类。ImageIO类在javax.imageio包里,这个包里都是一些和图象输入输出有关的类。ImageIO类包含一组静态方法,用来快速定位ImageReaderImageWriter并执行简单的编码和解码。 ImageIO类的声明是:public final class ImageIO extends Object 我们可以看到这是一个final类,类的所有成员都不允许覆写。
在本例中,用到ImageIO类的两个静态方法:

 

  • static BufferedImage read(File input); 自 动选择一个注册的ImageReader然后对给定的input进行解码,返回一个BufferedImage实例,不成功的话返回null。实际上这个 方法先从input取得一个ImageInputStream对象,然后调用重载函数read(InputStream input);
  • static boolean write(RenderedImage im, String formatName, File output);

    把内存图象im按照formatName指定的格式写入文件output。RenderedImage是java.awt.image中定义的一个接口,上面提到的BufferedImage类实现了这个接口。formatName可以是"bmp" "png" "jpg" "gif" "tiff"等,这和java的发行版有关,比如以前因为专利的原因不支持jpg,现在支持了:-)

了解这些以后,我们就能写出图片格式转换的代码:   File fi = new File(src);  // src是输入图片的文件名,例如"foo.bmp"   BufferedImage im = ImageIO.read(fi);  // 读文件src并对其进行解码,得到内存图象im   // 在这里可以对这个BufferedImage做各种图像处理,不过本例不需要任何处理   File fo = new File(dest);  // dest是输出图片的文件名,例如"foo.jpg"   ImageIO.write(im, "jpg", fo);  // 把内存图象im按照jpg格式写入dest文件中去
上面的代码一次只能处理一张图片,要进行批量转换还要了解shell的通配符。比如,你的工作目录下有三个文件:a.bmp b.bmp c.bmp,你希望同过一个命令 "java ToJPG *.bmp" 把它们全部转换为jpg格式,输出三个文件分别为 a.jpg b.jpg c.jpg,其实很简单,因为shell会对 *.bmp 进行解释,查找当前目录下所有扩展名为bmp的文件然后用这些文件名来替换*.bmp,就像 "java ToJPG a.bmp b.bmp c.bmp"。

posted on   光辉飞翔  阅读(12388)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
 
点击右上角即可分享
微信分享提示