java 渐进式_JAVA转换jpg图片为渐进式图片
很早之前看到一篇《web前端圖片極限優(yōu)化策略》,了解有jpg分為baseline-jpeg和preogressive-jpeg。
具體的區(qū)別如下:
baseline-jpeg:
在文件較大或者網(wǎng)絡(luò)下載速度較慢的情況下,用戶在瀏覽器端看到圖片被一行行加載的效果。
preogressive-jpeg:
在文件較大或者網(wǎng)絡(luò)下載速度較慢的情況下,用戶在瀏覽器端先看到整個(gè)圖片的模糊輪廓,隨著掃描次數(shù)的增加,圖片變得越來(lái)越清晰。目前百度圖片就是用此種方式。
用JAVA轉(zhuǎn)換的相應(yīng)代碼如下:
package?com.tuzki.sannychan;
import?java.awt.image.BufferedImage;
import?java.io.File;
import?java.io.IOException;
import?java.util.Iterator;
import?javax.imageio.IIOImage;
import?javax.imageio.ImageIO;
import?javax.imageio.ImageWriteParam;
import?javax.imageio.ImageWriter;
import?javax.imageio.stream.ImageOutputStream;
public?class?ProgressiveJPEG?{
public?static?void?main(String[]?args)?throws?Exception?{
File?file=new?File("D:/Picture/pj.jpg");
BufferedImage?image?=?ImageIO.read(file);
Iterator?it?=?ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter?writer=null;
while(it.hasNext())?{
writer=it.next();
break;
//System.out.println(it.next());
}
if(writer!=null)?{
ImageWriteParam?params?=?writer.getDefaultWriteParam();
params.setProgressiveMode(ImageWriteParam.MODE_DEFAULT);
//params.setCompressionQuality(0.8f);
ImageOutputStream?output?=?ImageIO.createImageOutputStream(new?File("D:/Picture/pj-p.jpg"));
writer.setOutput(output);
writer.write(null,new?IIOImage(image,null,null),?params);
output.flush();
writer.dispose();
System.out.println("ok");
}
}
}
用linux命令可以查看jpeg圖片是否為漸進(jìn)式圖片:
//轉(zhuǎn)換前,結(jié)果為:None,表明非漸進(jìn)式
[root@master1?~]#?identify?-verbose??pj.jpg??|?grep?Interlace
Interlace:?None
//轉(zhuǎn)換后,結(jié)果為:JPEG,表明是漸進(jìn)式
[root@master1?~]#?identify?-verbose??pj-p.jpg??|?grep?Interlace
Interlace:?JPEG
用瀏覽器測(cè)試:
將圖片放到tomcat目錄的webapps\examples目錄下,然后使用chrome訪問(wèn)該圖片
http://127.0.0.1:8084/examples/pj-p.jpg
用F12打開調(diào)試窗口,在network頁(yè)面選擇網(wǎng)絡(luò)環(huán)境為GPRS,然后刷新頁(yè)面,可以比較清晰感受到圖片由模糊逐漸清晰的過(guò)程。
用這種方式展示圖片的用戶體驗(yàn)較好。
總結(jié)
以上是生活随笔為你收集整理的java 渐进式_JAVA转换jpg图片为渐进式图片的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java枚举比较大小写_Spring 3
- 下一篇: java 仅有类名 构造类_java –