[转载]GIF、JPEG 和 PNG的区别在哪里?
GIF、JPEG 和 PNG
是三种最常见的图片格式。
- GIF:1987 年诞生,常用于网页动画,使用无损压缩,支持
256 种颜色(一般叫 8 bit 彩色),支持单一透明色; - JPEG:1992 年出世,照片一般都用这个格式,有损压缩,24
bit 真彩色(224 = 17 万种颜色),不支持动画,不支持透明色; - PNG:1996 年问世,无损压缩,最常见的使用格式是 256
索引色(PNG-8)和 24 bit 真彩色(PNG-24)(当然 PNG 支持的颜色格式远不止此),支持 full alpha
通道(256 级可调半透明色),不支持动画。
简单比较:
- JPEG v.s. PNG:JPEG
在照片压缩方面拥有巨大的优势,这方面无可替代,但是 JPEG 是有损压缩,图片质量会有损失。另外,一般屏幕截屏用 PNG 格式不但比
JPEG 质量高而且文件大小还更小(维基有图)。 - GIF v.s. PNG:GIF
只在简单动画领域有优势(其实,GIF 256 色限制以及无损压缩机制导致高质量的动画的发布一般都使用 Flash
等格式),只要没有动画,PNG 完全可以取代 GIF。 - 防锯齿:下面是 GIF 和 PNG
防锯齿处理的对比,六张小图片是分别放到浅黄和深绿背景下的情景,三张大图是深绿背景情形的放大。由于 GIF
没有半透明一说,所以防锯齿处理时只能假设背景是白色,这样的 GIF 放在深色背景下还不如不防锯齿。而 PNG
图片可以轻松应付各种背景颜色,特别适合用来做网页和应用程序里的通用防锯齿图标适应不同皮肤,没有 full alpha 通道的 JPEG
和 GIF 都做不到这一点。

可以看到,除了照片和动画,PNG 是最好的格式,但是 PNG
为什么到最近几年才流行起来?有很多原因:
- PNG 诞生的时候互联网已经初具规模,当时 GIF 和 JPEG
已经是很流行的格式了,换格式的迁移成本是很大的,有时候惯性是一个很可怕的东西。 - 浏览器的 PNG 支持比较落后,比如 IE 就是到 IE4
才开始支持 PNG。 - PNG 当初标准里把 alpha 通道写成了 optional
的,土鳖的 IE 一直到 IE7 才开始支持 full alpha 通道。而一般网页图标 256 色足够,所以为了支持 IE6,PNG
相对于 GIF 毫无优势可言,更何况 GIF 还支持动画。 - 尽管从原理上说,同样质量的 PNG 图片文件一般要比 GIF
要小,但是早期很多图片编辑器不支持 PNG,甚至支持的也没有完全利用 PNG 压缩算法里最精妙的部分(最典型的例子就是早期的
Photoshop),保存出来的 PNG 往往巨大无比。现在的软件已经没有这些问题了,但是这个偏见还广泛存在。
[转载]GIF、JPEG 和 PNG的区别在哪里?的更多相关文章
- 转载:Ajax及 GET、POST 区别
转载:Ajax及 GET.POST 区别 收获: xhr.setRequestHeader(), xhr.getResponseHeader() 可以设置和获取请求头/响应头信息; new FormD ...
- GIF、JPEG 和 PNG的区别在哪…
原文地址:GIF.JPEG 和 PNG的区别在哪里?作者:苗得雨 GIF.JPEG 和 PNG 是三种最常见的图片格式. GIF:1987 年诞生,常用于网页动画,使用无损压缩,支持 256 种颜色( ...
- [转载]java int与integer的区别
声明: 本篇文章属于转载文章,来源:
- 【转载】new和malloc的区别
本篇随笔为转载,原贴地址:C++中new和malloc的十点区别. 前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题.当时我回答n ...
- 【转载】gcc和g++的区别
[说明]本文转载自 静心 的文章 http://blog.163.com/lu_jun520/blog/static/5699613420116205148239/ 一般linux系统都自带了gcc编 ...
- Java_类和对象(完美总结)_转载_覆盖和隐藏的区别,覆盖就不能使用了,而隐藏提供全局方法名或者全局变量名还可以使用
转载自海子:http://www.cnblogs.com/dolphin0520/p/3803432.html Java:类与继承 对于面向对象的程序设计语言来说,类毫无疑问是其最重要的基础.抽象.封 ...
- jpg、jpeg、png... 的区别
对于做设计这一行的人来说,这几个图片格式是最常用的,也是最常见的,几乎每一天都要与他们打交道. 刚刚入门的新人通常不知道在什么地方如何使用他们或者说如何更有效的使用他们. 那他们到底是有什么区别?(一 ...
- [转载] Rss 与 Feed 的概念区别
转载自http://www.chinaz.com/news/2011/0831/207961.shtml 可能很多刚刚接触博客的童鞋们,也和我一样不太了解:rss和feed概念或者说不了解rss和fe ...
- 【转载】ARM与单片机的区别
前几天在博客园的博问模块上面发布了一个博问,可能是我问题描述有些问题,被一个园友指出,ARM与单片机是不同的.所以我特地查了一下ARM与单片机的区别,之前一直以为ARM就是加强版的单片机,stm32无 ...
随机推荐
- TCP/IP 主机路由表获取
介绍在IP协议中主机的路由表获取方法: 主机初始化路由表: 直接相连路由:接口初始化时,自动获取直连主机和网络的路由信息 间接相连路由:通过执行route命令,手动初始化路由表 ICMP路由请求和通告 ...
- Eclipse错误:Implicit super constructor ClassName is undefined for default constructor. Must define an explicit constructor
public class Test01 { private String name; private int age; public Test01(String name){ this.name = ...
- ida和idr机制分析(盘符分配机制)
# ida和idr机制分析 ida和idr的机制在我个人看来,是内核管理整数资源的一种方法.在内核中,许多地方都用到了该结构(例如class的id,disk的id),更直观的说,硬盘的sda到sdz的 ...
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
作者:蒸米 ----------------- 0x00 序 Ian Beer@google发布了CVE-2017-7047Triple_Fetch的exp和writeup[1],chenliang@ ...
- Hibernate(四)
Hibernate的二级缓存 理解缓存定义: 缓存(Cache):计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储 ...
- selenium更加高效的PageObject 对象操作代码
重新封装了的selenium代码,包括click事件,sendkeys事件,select事件,以及对readonly日期控件的处理 package com.common; import java.ut ...
- 轻量级ORM框架 QX_Frame.Bantina(一、框架简介)
轻量级ORM框架QX_Frame.Bantina系列讲解(开源) 一.框架简介 http://www.cnblogs.com/qixiaoyizhan/p/7417467.html 二.框架使用方式介 ...
- Java 异常框架
一张图看懂Java 异常框架之间的关系. 说明: 受检异常:编译的时候报错. 费受检异常:运行时报错,需要知道几个常见的异常 NullPointerException(空指针异常) ArrayInde ...
- oracle运行速度与效率高的秘密
使用过Oracle的人都知道,Oracle的运行速度与效率,在同类数据库中是名列前茅的,特别是对大量数据进行访问时,更加有出色的表现.那么,Oracle数据库是靠什么实现的呢?笔者下面将通过一系列的文 ...
- Springboot系列文章
一.springboot简介1.前世今生 在boot没有出现之前,基于spring的开发,常常需要配置大量的xml文件.工程狮们苦不堪言,渐渐厌倦了配置文件的复制黏贴.spring家族因为这件事,也经 ...