页面利用渐进式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实现登陆验证码(类似条行码状)
Oct 09 PHP
上传多个文件的PHP脚本
Nov 26 PHP
windows xp下安装pear
Dec 02 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
Aug 01 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
ThinkPHP防止重复提交表单的方法实例分析
May 10 PHP
基于laravel where的高级使用方法
Oct 10 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
用在PHP里的JS打印函数
2006/10/09 PHP
我的论坛源代码(三)
2006/10/09 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
2015/07/01 PHP
关于PHP中interface的用处详解
2020/07/26 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
JQuery Ajax 跨域访问的解决方案
2010/03/12 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
js文字横向滚动特效
2015/11/11 Javascript
Seajs 简易文档 提供简单、极致的模块化开发体验
2016/04/13 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
jQuery点击头像上传并预览图片
2017/02/23 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
vue props传值失败 输出undefined的解决方法
2018/09/11 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
2020/08/05 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
python机器学习之KNN分类算法
2018/08/29 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
python函数的作用域及关键字详解
2019/08/20 Python
python求绝对值的三种方法小结
2019/12/04 Python
matplotlib图例legend语法及设置的方法
2020/07/28 Python
俄罗斯第一家多品牌在线奢侈品精品店:Aizel.ru
2020/09/06 全球购物
技校生自我鉴定
2013/12/08 职场文书
房地产开盘策划方案
2014/02/10 职场文书
办公室副主任职责范本
2014/03/08 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
预备党员综合考察材料
2014/05/31 职场文书
体现团队精神的口号
2014/06/06 职场文书
高中班级口号
2014/06/09 职场文书
企业管理不到位检讨书
2019/06/27 职场文书