ImageIO.read 超慢问题!

iwlk 2013-01-30 02:31:30
本地(windows)测试 ImageIO.read 占用了2.2秒
服务器(solaris)上测试 ImageIO.read 占用了13.6秒



无论对图片,怎么处理,都要先转为BufferedImage 对象。 而ImageIO.read 非常慢,怎么办?


2、3秒,可以接受,13秒太慢了~ 大家遇到过此问题没?


附代码:
-------------------
<%@page contentType="text/html;charset=UTF-8" %>
<%@page import="java.io.*"%>
<%@page import="javax.imageio.*"%>
<%@page import="java.awt.image.*"%><%


File f=new File(application.getRealPath("/DSC_3565.jpg"));

long lo=System.currentTimeMillis();

BufferedImage bi=ImageIO.read(f);

lo=System.currentTimeMillis()-lo;

out.print("时间:"+lo);
%>
...全文
1817 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shurun19880609 2013-09-15
  • 打赏
  • 举报
回复
求助,java如何实现50M左右的图片压缩处理,处理后保持清晰度不变。
zqfddqr 2013-02-04
  • 打赏
  • 举报
回复
图片太大了 ImageIO需要把图片变成像素的格式6m的jpg变成像素分辨率也太高了。估计怎么弄都得10s+ 你用本地的acdsee或别的东西打开这个图片需要多长时间啊(远程打开)。
s478853630 2013-02-02
  • 打赏
  • 举报
回复
看看qq空间的相册,本地图片明明有好几M,3千多 * 3千多大小的尺寸 但上传到qq服务器,图片就只有几百K,一千多 * 几百大小的尺寸了。 不管你图片有多大,一旦上传,就会被压缩。 ImageIO.read() 这个方法其实不慢的,但如果图片太大,那就没办法了,就是在windows文件夹中复制粘贴也得费时间,不慢也不行啊。 如果图片只有几百K,你试试,保证是超快的,要相信jvm,相信java之父! 所以最好的解决办法是学学qq空间,遇到超大的图片,就给它压缩一下,把图片尺寸控制在1024 * 768 之内, 这只是个建议尺寸,具体看情况吧! 还有一点,不要直接去read()网络地址url,先把图片保存到自己的服务器再read()磁盘路径,可以提高效率! 这只是我个人观点,哪位大侠认为这个说法不妥,还请多多指教!
iwlk 2013-01-31
  • 打赏
  • 举报
回复
Windows一直用的是ImageMagic , 但是我在solaris 上用ImageMagic 报: ld.so.1: convert: fatal: libpng14.so.14: open failed: No such file or directory 安装libpng14 时, ./configure --prefix=/tmp/libpng-eagle/install 又报错, 郁闷了,所以放弃ImageMagic 了!
  • 打赏
  • 举报
回复
缺少 libpng 库呗,ImageMagic 在 Unix/Linux 上使用源代码编译安装非常麻烦,要处理 N 多的依赖库,装过一次就好了,呵呵。
  • 打赏
  • 举报
回复
建议不要使用 ImageIO 来处理图片,可以在使用 ImageMagic 的软件,在 Windows 和 Linux 均有不同的版本。ImageMagic 使用 C 语言编写,功能和性能都优于 ImageIO,最关键的还提供了 JMagic 的 Java 开发包。
iwlk 2013-01-30
  • 打赏
  • 举报
回复
我用的是 http://www.ftz.la/res/DSC_3565.jpg 这张图片!
失落夏天 2013-01-30
  • 打赏
  • 举报
回复
引用 1 楼 AA5279AA 的回复:
我不知道你是什么样的图片。代码和你一样。 多大的? Java code?1234567891011121314151617//本类的功能为获取图片的长和宽public class ReadImgKnowWandH { public static void main(String[] args) throws Exception { new Re……
图片大小为6M
失落夏天 2013-01-30
  • 打赏
  • 举报
回复
我不知道你是什么样的图片。代码和你一样。 多大的?

//本类的功能为获取图片的长和宽
public class ReadImgKnowWandH {
	public static void main(String[] args) throws Exception {
		new ReadImgKnowWandH().Read("d:\\2.jpg");
	}
	public void Read(String path) throws Exception{
		long lo=System.currentTimeMillis();  
		ImageIO io = null;
		  //Image img = io.read(new File(path));
		  BufferedImage bufImg = io.read(new File(path));
		  int wi = bufImg.getWidth();

          int he = bufImg.getHeight();
          System.out.println("宽为:"+wi+",长为:"+he);
          System.out.println("时间为:"+Long.toString(System.currentTimeMillis()-lo));
	}
}
结果: 宽为:5616,长为:3744 时间为:611

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧