页面利用渐进式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 相关文章推荐
说明的比较细的php 正则学习实例
Jul 30 PHP
PHP伪造referer实例代码
Sep 20 PHP
微盾PHP脚本加密专家php解密算法
Sep 13 PHP
PHP 如何利用phpexcel导入数据库
Aug 24 PHP
19个Android常用工具类汇总
Dec 30 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
PHP获取Exif缩略图的方法
Jul 13 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
php中10个不同等级压缩优化图片操作示例
Nov 14 PHP
PHP常用算法和数据结构示例(必看篇)
Mar 15 PHP
CodeIgniter整合Smarty的方法详解
Aug 25 PHP
php unlink()函数使用教程
Jul 12 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/01 无线电
深入解析php中的foreach函数
2013/08/31 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
详解php用curl调用接口方法,get和post两种方式
2017/01/13 PHP
利用laravel搭建一个迷你博客实战教程
2017/08/13 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
javascript 循环读取JSON数据的代码
2010/07/17 Javascript
JQuery实现鼠标滑过显示导航下拉列表
2013/09/12 Javascript
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
js中使用replace方法完成某个字符的转换
2014/08/20 Javascript
AngularJS内置指令
2015/02/04 Javascript
jQuery实现下拉框多选 jquery-multiselect 的实例代码
2016/07/14 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
vue动态配置模板 'component is'代码
2019/07/04 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
vscode 调试 node.js的方法步骤
2020/09/15 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
python如何保证输入键入数字的方法
2019/08/23 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
经管应届生求职信
2013/11/17 职场文书
表演方阵解说词
2014/02/08 职场文书
农村改厕实施方案
2014/03/22 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
2015年社区中秋节活动总结
2015/03/23 职场文书
法院执行局工作总结
2015/08/11 职场文书
《群青的幻想曲》京力秋树角色PV公开
2022/04/08 日漫
AndroidStudio图片压缩工具ImgCompressPlugin使用实例
2022/08/05 Java/Android