很早之前看到一篇《web前端图片极限优化策略》,了解有jpg分为baseline-jpeg和preogressive-jpeg。

具体的区别如下:

baseline-jpeg:

在文件较大或者网络下载速度较慢的情况下,用户在浏览器端看到图片被一行行加载的效果。

preogressive-jpeg:

在文件较大或者网络下载速度较慢的情况下,用户在浏览器端先看到整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰。目前百度图片就是用此种方式。

用JAVA转换的相应代码如下:

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图片是否为渐进式图片:

//转换前,结果为:None,表明非渐进式

[root@master1 ~]# identify -verbose  pj.jpg  | grep Interlace

Interlace: None

//转换后,结果为:JPEG,表明是渐进式

[root@master1 ~]# identify -verbose  pj-p.jpg  | grep Interlace

Interlace: JPEG

用浏览器测试:

将图片放到tomcat目录的webapps\examples目录下,然后使用chrome访问该图片

http://127.0.0.1:8084/examples/pj-p.jpg

用F12打开调试窗口,在network页面选择网络环境为GPRS,然后刷新页面,可以比较清晰感受到图片由模糊逐渐清晰的过程。

用这种方式展示图片的用户体验较好。

java 渐进式_JAVA转换jpg图片为渐进式图片相关推荐

  1. java+解析png+gif图片_Java 转换png jpg gif格式图片的相互转换的实现

    利用JDK原生支持对png jpg gif格式图片做相互转换,结合脚本就可以达到批量处理的能力,比PS来的快啊!而且是JAVA代码 在Windows和Linux上都可以用. import java.a ...

  2. java网页快照_java网页快照-网页转存为图片

    java网页快照-网页转存为图片 个人觉得免费的java实现方式,最方便的网页快照生成方式.可以生成大型网页的快照.非常棒! 使用代码前需要导入 jar包.需要三个jar包 :swt-3.6M3-wi ...

  3. java 获取文件大小_利用百度AI OCR图片识别,Java实现PDF中的图片转换成文字

    序言:我们在读一些PDF版书籍的时候,如果PDF中不是图片,做起读书笔记的还好:如果PDF中的是图片的话,根本无法编辑,做起笔记来,还是很痛苦的.我是遇到过了.我们搞技术的,当然得自己学着解决现在的痛 ...

  4. java pdf文件转换图片,pdf文件转图片(java实现)

    项目中pdf文件太大,在手机端打开缓慢.需要将pdf文件转换成图片.加载比较快,增加用户体验.话不多说,直接上干货. 一.在pom引入依赖的jar org.apache.pdfbox fontbox ...

  5. ImageMagick将图片转为渐进式jpeg(progressive jpeg)

    # 基本JPEG和渐进JPEG 目前有两种主流的jpeg图片格式.分别是baseline jpeg 和progressive jpeg. baseline 的刷新是从上到下.一次刷新. progres ...

  6. 基于java的格式转换,word 转 pdf、word 转图片、office 格式转换、在线文件预览

    一.项目简介 不管你是java程序员.c++程序员,python程序员,在开发项目中肯定遇到过格式转换的问题,如何轻松搞定格式转换的问题呢?当然是百度啦!面向百度编程已经成为当下程序员的日常操作. 基 ...

  7. Java接受前端的base64,转换失败。base64转图片互相转换

    spring boot前后端vue,base64转图片互相转换 vue就不展示了,下边只展示Java中互相转换的例子. Java实现图片转化成base64字符串 //图片转化成base64字符串 pu ...

  8. JAVA实现bmp转换JPEG_Java gif图片转换为jpg格式

    下面通过代码给大家介绍Java gif图片转换为jpg格式,具体代码如下所示: if(fileName.toLowerCase().endsWith(".gif")){//由于头像 ...

  9. java水印_Java实现给图片添加图片水印,文字水印及马赛克的方法示例

    本文实例讲述了Java实现给图片添加图片水印,文字水印及马赛克的方法.分享给大家供大家参考,具体如下: 可以在eclipse中新建个Utils类,把以下代码复制进去直接使用,以下方法实现单个或多个水印 ...

最新文章

  1. python学到什么程度可以做兼职-Python学到什么程度才可以去找工作?掌握这4点足够了!...
  2. python输入输出-2. Python中的基本输入、输出、格式化输出
  3. python程序设计实验教程 翟萍 第五章答案_Python程序设计实验教程
  4. HTTP1.0、HTTP1.1和HTTP2.0的区别
  5. php井字游戏代码_PHP初级笔试题:Tic-Tac-Toe(n阶井字棋)判断胜负
  6. bool类型_Python基本数据类型之Number
  7. git缓冲区查看_git原理学习记录:从基本指令到背后原理,实现一个简单的git
  8. stringbuilder_string和stringBuilder的区别
  9. java通过异常传递消息_如何消除'Failed to load IMAP envelope'消息传递异常?
  10. 理解Android编译命令
  11. 以太坊概念知识入门篇
  12. FastAPI 对用户文件的管理(上传、下载、删除)
  13. 数据结构C语言版 学习整理
  14. Socket通讯之UDP
  15. BT5的 U盘启动 制作
  16. Linux:软硬链接
  17. Python:实现max non adjacent sum最大非相邻和算法(附完整源码)
  18. 30ea什么意思_ea阶段是什么?你未必全知道!
  19. linux命令前期记不住,linux前期 - 浪里小白龙l的个人空间 - OSCHINA - 中文开源技术交流社区...
  20. MySQL 8.0的预研清单和计划

热门文章

  1. leetcode 575. 分糖果(Java版)
  2. kubernetes入门到精通(一):内容编排与k8s介绍,集群构建教程,如何开启dashboard
  3. 【PAT甲级 最长公共子串】1007 Maximum Subsequence Sum (25 分) C++ 全部AC
  4. JMM和底层实现原理
  5. 2pc_two phase commit详情
  6. 【两种方法】基础实验4-2.7 修理牧场 (25 分)
  7. 【一步到胃解决】Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are already
  8. 黑盒测试的用例设计方法
  9. [leetcode] 144.二叉树的前序遍历
  10. 部署Squid 代理服务器(内含传统、透明代理服务器的配置、ACL访问控制、日志分析、反向代理)