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 相关文章推荐
PHP注释实例技巧
Oct 03 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
PHP开发规范手册之PHP代码规范详解
Jan 13 PHP
php的list()的一步操作给一组变量进行赋值的使用
May 18 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
php获取qq用户昵称和在线状态(实例分析)
Oct 27 PHP
php命名空间学习详解
Feb 27 PHP
ThinkPHP3.1新特性之查询条件预处理简介
Jun 19 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 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
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
实现点击列表弹出列表索引的两种方式
2013/03/08 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
from 表单提交返回值用post或者是get方法实现
2013/08/21 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
详细分析Javascript中创建对象的四种方式
2016/08/17 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
JSONP跨域请求
2017/03/02 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
python 性能提升的几种方法
2016/07/15 Python
Python+OpenCV让电脑帮你玩微信跳一跳
2018/01/04 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python3中的md5加密实例
2018/05/29 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
python中map的基本用法示例
2018/09/10 Python
python logging通过json文件配置的步骤
2020/04/27 Python
python os模块在系统管理中的应用
2020/06/22 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
校本教研工作方案
2014/01/14 职场文书
法制宣传教育方案
2014/05/09 职场文书
关于保护环境的标语
2014/06/09 职场文书
食堂厨师岗位职责
2014/08/25 职场文书
员工培训协议书
2014/09/15 职场文书
总经理聘用协议书
2015/09/21 职场文书
python编写函数注意事项总结
2021/03/29 Python
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
GoFrame gredis缓存DoVar Conn连接对象 自动序列化GoFrame gredisDo/DoVar方法Conn连接对象自动序列化/反序列化总结
2022/06/14 Golang