页面利用渐进式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 相关文章推荐
ip签名探针
Oct 09 PHP
深入了解php4(1)--回到未来
Oct 09 PHP
分页详解 从此分页无忧(PHP+mysql)
Nov 23 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
phpmyadmin config.inc.php配置示例
Aug 27 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
Smarty最简单实现列表奇偶变色的方法
Jul 01 PHP
php上传图片生成缩略图(GD库)
Jan 06 PHP
简单PHP会话(session)说明介绍
Aug 21 PHP
PHP简单实现模拟登陆功能示例
Sep 15 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
php生成缩略图的类代码
2008/10/02 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
PHP实现根据设备类型自动跳转相应页面的方法
2014/07/24 PHP
php时间函数用法分析
2016/05/28 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
Javascript Object.extend
2010/05/18 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
node.js中的fs.unlink方法使用说明
2014/12/15 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
js+html5实现canvas绘制网页时钟的方法
2016/05/21 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
微信小程序商品详情页规格属性选择示例代码
2017/10/30 Javascript
webpack4.x开发环境配置详解
2018/08/04 Javascript
Vue中 v-if/v-show/插值表达式导致闪现的原因及解决办法
2018/10/12 Javascript
python3生成随机数实例
2014/10/20 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
tensorflow识别自己手写数字
2018/03/14 Python
Python numpy 点数组去重的实例
2018/04/18 Python
python 接收处理外带的参数方法
2018/12/03 Python
python设置环境变量的作用和实例
2019/07/09 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
Tiqets英国:智能手机上的文化和娱乐门票
2019/07/10 全球购物
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
感恩节活动方案
2014/01/27 职场文书
出纳担保书范文
2014/04/02 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
大学生读书笔记大全
2015/07/01 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
基于Python实现一个春节倒计时脚本
2022/01/22 Python