PHP把JPEG图片转换成Progressive JPEG的方法


Posted in PHP onJune 30, 2014

JPEG文件格式有两种保存方式。他们是Baseline JPEG和Progressive JPEG.

两种格式有相同尺寸以及图像数据,他们的扩展名也是相同的,唯一的区别是二者显示的方式不同。

Baseline JPEG

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

Progressive JPEG

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

如果你的网速和蜗牛一样的话,你应该可以看到效果的,其实你在qzone、微博等大型网站你会经常看到这样的效果的。

PHP代码也可以将其进行转换成Progressive 的jpg。

<?php

 

$im = imagecreatefromjpeg('file.jpg');

// 设置隔行扫描 设定了隔行扫描比特标记而图像使用 JPEG 格式,则图像被创建为渐进式 JPEG。 php手册

imageinterlace($im, 1);

imagejpeg($im, './outfile.jpg', 80);

imagedestroy($im);

 

?>

我怎么看图片到底是Progressive 还是Baseline 格式呢?

我目前知道就是使用ImageMagick软件带的identity命令进行查看图像资源

identify -verbose outfile.jpg

如果你看到有一个属性为Interlace:JPEG则是Progressive 图片。

PHP 相关文章推荐
信用卡效验程序
Oct 09 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
Jul 20 PHP
apache配置虚拟主机的方法详解
Jun 17 PHP
PHP关于htmlspecialchars、strip_tags、addslashes的解释
Jul 04 PHP
php获取一个变量的名字的方法
Sep 05 PHP
PHP打开和关闭文件操作函数总结
Nov 18 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php面向对象与面向过程两种方法给图片添加文字水印
Aug 26 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
PHP 使用二进制保存用户状态的实例
Jan 29 PHP
PHP封装的完整分页类示例
Aug 21 PHP
laravel 实现登陆后返回登陆前的页面方法
Oct 03 PHP
PHP把小数转成整数3种方法
Jun 30 #PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 #PHP
php防止伪造的数据从URL提交方法
Jun 27 #PHP
编译PHP报错configure error Cannot find libmysqlclient under usr的解决方法
Jun 27 #PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
Jun 27 #PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
Jun 27 #PHP
php使用GeoIP库实例
Jun 27 #PHP
You might like
js下函数般调用正则的方法附代码
2008/06/22 PHP
PHP is_dir() 判断给定文件名是否是一个目录
2010/05/10 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
php超快高效率统计大文件行数
2015/07/05 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
jQuery中ajax的load()方法用法实例
2014/12/26 Javascript
javascript中Object使用详解
2015/01/26 Javascript
JavaScript判断undefined类型的正确方法
2015/06/30 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
2016/11/23 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Nodejs 和 Electron ubuntu下快速安装过程
2018/05/04 NodeJs
layui使用form表单实现post请求页面跳转的方法
2019/09/14 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
Vue axios获取token临时令牌封装案例
2020/09/11 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
pytorch 模型可视化的例子
2019/08/17 Python
TensorFLow 数学运算的示例代码
2020/04/21 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Node.js 和 Python之间该选择哪个?
2020/08/05 Python
5分钟快速掌握Python定时任务框架的实现
2021/01/26 Python
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
运动会800米加油稿
2014/02/22 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
院系推荐意见
2015/06/05 职场文书
爱国主义影片观后感
2015/06/18 职场文书
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL
SpringBoot Http远程调用的方法
2022/08/14 Java/Android