页面利用渐进式JPEG来提升用户体验度


Posted in PHP onDecember 01, 2014

今天才认识到原来JPEG文件有两种保存方式他们分别是Baseline JPEG(标准型)和Progressive JPEG(渐进式)。两种格式有相同尺寸以及图像数据,他们的扩展名也是相同的,唯一的区别是二者显示的方式不同。

Baseline JPEG

这种类型的JPEG文件存储方式是按从上到下的扫描方式,把每一行顺序的保存在JPEG文件中。打开这个文件显示它的内容时,数据将按照存储时的顺序从上到下一行一行的被显示出来,直到所有的数据都被读完,就完成了整张图片的显示。如果文件较大或者网络下载速度较慢,那么就会看到图片被一行行加载的效果,这种格式的JPEG没有什么优点,因此,一般都推荐使用Progressive JPEG。

页面利用渐进式JPEG来提升用户体验度

Progressive JPEG

和Baseline一遍扫描不同,Progressive JPEG文件包含多次扫描,这些扫描顺寻的存储在JPEG文件中。打开文件过程中,会先显示整个图片的模糊轮廓,随着扫描次数的增加,图片变得越来越清晰。这种格式的主要优点是在网络较慢的情况下,可以看到图片的轮廓知道正在加载的图片大概是什么。在一些网站打开较大图片时,你就会注意到这种技术。

页面利用渐进式JPEG来提升用户体验度

渐进式图片带来的好处是可以让用户在没有下载完图片就可以看到最终图像的大致轮廓,一定程度上可以提升用户体验。(瀑布留的网站建议还是使用标准型的)

页面利用渐进式JPEG来提升用户体验度

另外渐进式的图片的大小并不会和基本的图片大小相差很多,有时候可能会比基本图片更小。渐进式的图片的缺点就是吃用户的CPU和内存,不过对于现在的电脑来说这点图片的计算并不算什么。

说了这边多下面就改讲讲怎么讲图片保存为或者转化为Progressive JPEG了。

1、PhotoShop

在photoshop中有“存储为web所用格式”,打开后选择“连续”就是渐进式JPEG。

页面利用渐进式JPEG来提升用户体验度 

具体教程参考 https://3water.com/photoshop/182198.html

2、Linux

检测是否为progressive jpeg : identify -verbose filename.jpg | grep Interlace(如果输出 None 说明不是progressive jpeg;如果输出 Plane 说明是 progressive jpeg。)

将basic jpeg转换成progressive jpeg:> convert infile.jpg -interlace Plane outfile.jpg

3、PHP

使用 imageinterlace 和 imagejpeg 函数我们可以轻松解决转换问题。

<?php
    $im = imagecreatefromjpeg('pic.jpg');
    imageinterlace($im, 1);
    imagejpeg($im, './php_interlaced.jpg', 100);
    imagedestroy($im);
?>

4、Python

import PIL
from exceptions import IOError
img = PIL.Image.open("c:\\users\\biaodianfu\\pictures\\in.jpg")
destination = "c:\\users\\biaodianfu\\pictures\\test.jpeg"
try:
  img.save(destination, "JPEG", quality=80, optimize=True, progressive=True)
except IOError:
  PIL.ImageFile.MAXBLOCK = img.size[0] * img.size[1]
  img.save(destination, "JPEG", quality=80, optimize=True, progressive=True)

5、jpegtran

jpegtran -copy none -progressive <inputfile> <outputfile>

6、C#

using (Image source = Image.FromFile(@"D:\temp\test2.jpg")) { 
  ImageCodecInfo codec = ImageCodecInfo.GetImageEncoders().First(c => c.MimeType == "image/jpeg"); 
  EncoderParameters parameters = new EncoderParameters(3);
  parameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
  parameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int)EncoderValue.ScanMethodInterlaced);
  parameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int)EncoderValue.RenderProgressive); 
  source.Save(@"D:\temp\saved.jpg", codec, parameters);
}

以上就是使用渐进式JPEG图片来提升页面体验度的全部内容了,很简单实用,这里推荐给小伙伴们。

PHP 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
在PHP中使用redis
Nov 04 PHP
zf框架的zend_cache缓存使用方法(zend框架)
Mar 14 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
May 20 PHP
微信支付扫码支付php版
Jul 22 PHP
CI框架无限级分类+递归的实现代码
Nov 01 PHP
php实现留言板功能
Mar 05 PHP
PHP 中常量的知识整理
Apr 14 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
php页面函数设置超时限制的方法
Dec 01 #PHP
PHP实现抓取HTTPS内容
Dec 01 #PHP
php设置静态内容缓存时间的方法
Dec 01 #PHP
thinkphp实现发送邮件密码找回功能实例
Dec 01 #PHP
PHP清除字符串中所有无用标签的方法
Dec 01 #PHP
php防止网站被刷新的方法汇总
Dec 01 #PHP
phpstorm编辑器乱码问题解决
Dec 01 #PHP
You might like
咖啡机如何保养和日常清洁?
2021/03/03 冲泡冲煮
php中使用PHPExcel读写excel(xls)文件的方法
2014/09/15 PHP
PHP实现的简单留言板功能示例【基于thinkPHP框架】
2018/12/07 PHP
限制复选框的最大可选数
2006/07/01 Javascript
JAVASCRIPT对象及属性
2007/02/13 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
IE的有条件注释判定IE版本详解(附实例代码)
2012/01/04 Javascript
设为首页加入收藏兼容360/火狐/谷歌/IE等主流浏览器的代码
2013/03/26 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JQuery Ajax WebService传递参数的简单实例
2016/11/02 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
优雅的在React项目中使用Redux的方法
2018/11/10 Javascript
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
基于python编写的微博应用
2014/10/17 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python读取Excel表格文件的方法
2019/09/02 Python
python可以用哪些数据库
2020/06/22 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
Wiggle澳大利亚:自行车、跑步、游泳商店
2020/11/07 全球购物
英文自荐信格式
2013/11/28 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2014年优秀党员材料
2014/12/18 职场文书
教师党员承诺书2015
2015/01/21 职场文书
会议欢迎词范文
2015/01/27 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
Python 内置函数速查表一览
2021/06/02 Python