本地(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);
%>
服务器(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);
%>
多大的?
//本类的功能为获取图片的长和宽
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
安装libpng14 时,
./configure --prefix=/tmp/libpng-eagle/install又报错, 郁闷了,所以放弃ImageMagic 了!
但上传到qq服务器,图片就只有几百K,一千多 * 几百大小的尺寸了。
不管你图片有多大,一旦上传,就会被压缩。ImageIO.read() 这个方法其实不慢的,但如果图片太大,那就没办法了,就是在windows文件夹中复制粘贴也得费时间,不慢也不行啊。
如果图片只有几百K,你试试,保证是超快的,要相信jvm,相信java之父!所以最好的解决办法是学学qq空间,遇到超大的图片,就给它压缩一下,把图片尺寸控制在1024 * 768 之内,
这只是个建议尺寸,具体看情况吧!还有一点,不要直接去read()网络地址url,先把图片保存到自己的服务器再read()磁盘路径,可以提高效率!这只是我个人观点,哪位大侠认为这个说法不妥,还请多多指教!
你用本地的acdsee或别的东西打开这个图片需要多长时间啊(远程打开)。