数月前同时从实施中断酷新特征喜欢q_aut并g_aut团队聊天时我开玩笑说 各种图像格式一像素Orly-管博客-问我是否写一像素图片我说:“当然,为什么不呢?但它会是一个短博客文章归根结底,你对单像素没什么话可说。”
貌似我错了大错特错
回到 web早期, 一像素图像被广泛使用 穷人解决我们现在用CSS做的事情间距创建线或矩形,半透明背景: 通过简单将像素缩放到任意维度可以做很多事单像素图像的另一用法仍然是当今常见实践web信标用于跟踪或解析
响应网络设计中一像素图像常在页面加载时使用为临时定位符由于大多数浏览器不支持客户端提示,一些响应图像解决方案等待页面完全加载以确定实际变换图像大小,然后用JavaScript右下断点图像替换一分图
单像素图像还有一个用法:可用作单像素图像`默认'图片.或多或少隐藏事实(通过显示透明像素)比返回404-Notfound错误更好,浏览器通常会用“broken图像”图标提供错误两种情况中,你都看不到预想图像,但如果不显示破损图像图标来显示它,它可能看起来更专业一些。
似乎一像素图像有某些用法编译一x1图像的最佳方式是什么
很明显,这是图像压缩格式的边缘案例如果“图像”只包含单像素,肯定没有大数数据压缩非压缩数据仅为一至四字节-取决于你对数据的解释方式:黑白(1字节)、灰度(1字节)、灰度+阿尔法(2字节)、RGB3字节或RGBA4字节
可你无法只编码数据图像格式中,需要指定如何解释数据最起码,你需要知道图像宽度和高度,以及比特或字节数/像素
典型地说,为编码宽度和高度使用四字节:二字节/数字(如果只有一字节,最大图像维度为255x255)假设我们需要另一个字节编码图像色型灰度,RGB或RGBA)以这种最小化图像格式,单像素图像至少需要6字节(例如:白像素最多9字节(半透明任意色像素)。
实际图像格式往往有多点信息“标题式”。第一,前几字节图像格式含有固定标识符,仅表示“嘿!I'm a file in this specialfile格式定序字节也称魔术号.举例说,GIF文件总以其中之一启动GIF87a
或GIF89a
PNG文件总以8字节序列启动,其中包括8字节序列巴布亚新几内亚
JPEG文件头包含字符串JFIF系统
或Exif系统
等一等
页眉可包含各种图像元信息其中一些信息面向格式表示子格式使用类型,并需要正确解码像素其中一些可能不必解码像素,但知道如何编译像素仍然有用-例如颜色剖面图、定向图、伽马或点对像其中一些数据可能是任意元数据,如注释、时标、版权通知或GPS坐标这些东西可能是可选的或强制的取决于格式规范元数据文件大小当然需要成本聚焦于最小文件 所有非强制元数据都删除否则我们可能将珍贵字节浪费在傻事上.
除头版外,图像格式可能有其他类型“头版管理”。内含各种标识和校验和,旨在使格式在传输错误或其他形式腐败时更加稳健同时,有时需要某种拼贴板,以确保数据正确对齐
单像素图像-最小可能的图像-显示图像格式内究竟有多少“顶端”。先看一看
exdump67字节PNG文件,表示1x1白像素
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 01 00 00 00 01 01 00 00 00 00 37 6e f9 |.............7n.| 00000020 24 00 00 00 0a 49 44 41 54 78 01 63 68 00 00 00 |$....IDATx.ch...| 00000030 82 00 81 4c 17 d7 df 00 00 00 00 49 45 4e 44 ae |...L.......IEND.| 00000040 42 60 82 |B`.|
文件由8字节PNG魔术数组成,后加页块(IHDR),内含13字节,图像数据块(IDAT),内含10字节“压缩式”图像数据,和端标记(INED)。块4字段长度和块4字段标识结束4字段校验和,这三个块是强制性的,因此再加36字节,文件总尺寸为67字节
黑像素PNG中67字节完全透明像素为68字节,任意RGBA颜色介于67至70字节间
JPEG长信头最小一像素JPEG为160字节141字节)无法透明化,因为JPEG不支持alpha信道
GIF是三种普遍支持图像格式中最紧凑化的(信头类)。白像素可编码成有效GIF文件,仅35字节:
0100N0GIF87a.
完全透明像素可用43字节处理:
10000047.49380100000N0N0NLF89a.
注意所有上述格式都可生成小文件,这些小文件仍然解码所有或大多数浏览器一像素图像,但这些文件格式规范无效,这意味着图像编码器可能随时(正确)抱怨文件腐烂,并显示我们试图避免的破损图像图标。
网络一像素图像最优格式是什么看情况如果它不透明像素 答案是GIF完全透明像素 答案也是GIF但如果它半透明像素,答案是PNG,因为GIF只支持全或全非透明性
并不是所有这一切都很重要以上所有文件都易装入单网络包中,所以实践上并不存在真速差-反正存储量微乎其微但仍很有趣看 至少像像像像像样的我这样的怪客
WebP一像素图像使用时,请确定使用无损WebP单像素WebP图像介于34至38字节之间单像素损耗WebP图像介于44至104字节之间,主要取决于是否有alpha通道完全透明像素三十四字WebP
000005249461a0000574550505050384c
和82字节的损(默认)WebP相同像素
00000000 52 49 46 46 4a 00 00 00 57 45 42 50 56 50 38 58 |RIFFJ...WEBPVP8X| 00000010 0a 00 00 00 10 00 00 00 00 00 00 00 00 00 41 4c |..............AL| 00000020 50 48 0b 00 00 00 01 07 10 11 11 88 88 fe 07 00 |PH..............| 00000030 00 00 56 50 38 20 18 00 00 00 30 01 00 9d 01 2a |..VP8 ....0....*| 00000040 01 00 01 00 02 00 34 25 a4 00 03 70 00 fe fb fd |......4%...p....| 00000050 50 00 |P.|
两者间的主要差错是透明性微博实际存储成二张图像并投入一容器文件:一损图RGB值和一无损图像alpha值
面向贝拉德PG格式外加无损模式损耗式BPG单白像素编码为31字节,
.G.D.00010718112000126afb620b6qq...
无损BPG同白像素为59字节完全透明像素分别是57或113字节损耗或无损BPG有趣的是,单白像素BPG胜比WebP(31字节BPGvs38字节WebP),但单透明像素WebP胜比BPg(34字节WebPvs57字节BPG)。
并有FLIF身为自由无损图像格式主创者,显然我不能忘记它15字节FLIF文件
4c49310011844C619c3
14字节文件黑像素
4c四十六十六一零一一一一e 18b7ff
黑像素文件小一字节,因为数0比数255发生压缩优前四字节常为FLIF, 下一字节指向人可读化颜色和内插类型表示我们只有一个色通道灰度图像)下一字节表示色深度 :1表示每个通道一字节下四字节为图像维度,在此例 0x0001x0x0001后四或五字节是实际压缩数据
完全透明像素中14字节
1000.00.464c4934310014fd7280
以四色信道为例(RGBA)而不单为一色信道(RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RGBA/RBAR数据段长于此文件(归根结底有四倍色通道),但事实并非如此:由于alpha值碰巧为零(完全透明像素),RGB值被视为无关紧要,所以根本不编码
任意RGBA颜色FLIF文件可达20字节
FLIF是奇异图像编码竞赛中 单像素类中的清晰优胜者万一这是件重要事
实际上没有FLIF不是优胜者记得我在开头提到的最小化图像格式吗?编码单像素6至9字节格式并不存在 所以我想它不计数图像格式确实存在 并相当接近
称之为可移植位图格式上世纪80年代非压缩图像格式单白像素编码为PBM文件
千兆元50 310a 310a 30
省省Hexdump吧 这是人类可读文件格式可使用文本编辑器打开它(至少此子格式):
P1110
第一行(“P1”)表示这是黑白图像非灰度仅有两种颜色:黑色(混淆数字1)和白色(0)。第二行表示图像维度空格有限数列表 一分数像素中位数0
需要纯白或纯黑以外的东西时,可使用PGM格式获取12字节内任何其他灰色色像素,或PPM格式获取14字节内的任何RGB颜色总是小于对应FLIF文件
传统PNM家族(PBM、PGM和PM)不支持透明性PNM扩展调用可移植任意地图透明支持图片不幸为当前目的,它语法多点动词最小有效PAM文件编码完全透明像素如下:
P7WIDTHE 1HEGHOO0N0
上行有四零字节以上文件67字节可能诱导使用灰度+alpha替代RGBA,因为这将使数据段省下2字节可结果产生71字节文件,因为你必须修改TUPLTYE
发自RGB_ALPHA
至高山ALPHA
.顺便说一句,你图像软件可能不喜欢使用maimal1
,所以你可能需要修改MAXVAL255
需要两个字节
归根结底,一等量图像,当不透明化时,PNM最小化(8至14字节PNMv14至18字节FLIF),但如果透明化,FLIF最小化(14至20字节FLIFv67至69字节PAM)。
简表为各种一像素图像提供(最优)文件大小
白线 |
黑市 |
灰色 |
黄黄 FF00 |
透明化 |
半透明化 1337BABE |
|
巴布亚新几内亚 |
67号 |
67号 |
67号 |
69 |
68号 |
70码 |
GIF系统 |
35码 |
35码 |
43号 |
35码 |
43号 |
/ |
JPEG |
160 |
160 |
159 |
288 |
/ |
/ |
失传WebP |
44号 |
44号 |
44号 |
64码 |
82 |
92 |
无损Web |
38号 |
34号 |
38号 |
36号 |
34号 |
38号 |
损耗BPG |
31号 |
31号 |
29 |
36号 |
57号 |
62 |
无损BPG |
59号 |
59号 |
37号 |
124 |
113号 |
160 |
FLIF系统 |
15 |
14 |
15 |
18号 |
14 |
20码 |
PNM/PAM |
8 |
8 |
12 |
14 |
67号 |
69 |
似乎有点令人惊讶的是,非压缩图像格式实际上比大多数压缩格式都多可想一想并不奇怪一像素图像从某种意义上说最坏情况图像压缩:它们都是头像和头像,数据少之又少微小数据无法真正压缩, 因为压缩取决于可预测性, 和如何预测单像素
第二部分博客文章中我将讨论另一极端极可预测单色图片以各种格式演化效果如何保持监听
更新 :取出第二部分并一色图像值2千字