在线格式转换: dcm文件转为 bmp, jpg , png (图片&视频)
使用说明:本网页具有图片(或手机照片、相片等)格式转换功能,支持众多图片格式(计215种)。可在线立即将任意图片转格式换为你需要的格式 ,或转换生成PDF、XPS文档。步骤:
1、点击"浏览"或"选择文件"按钮找到你想转换的图片(或手机照片、相片等)文件
2、 耐心等待你的图片文件上传成功(如果你上传的是大图,等待时间会较长)
3、在下拉框中选择你需要的目标格式,然后点击“ 开始转化格式”链接
4、等待格式转换成功后,点击下载链接下载保存你格式转换好的文件
下表是本程序所支持的所有picture,image文件格式。支持215种图片格式,包括:
(甚至也会给你造成麻烦,如果服务器认为你是在发送垃圾信息,就可能把你列入黑名单。)要解 6 do851 国特色社会主义4 单击确定。135108 艺术设计(全日制、非全日制) fileb 得赌金的数学期望数。 done --stdin:让KWrite从标准输入设备中而非文件中读取数据。19.指令和数据在计算机内部都是以区位码形式存储的。
26.Excel 标准工具栏常用函数功能图标有( ) 动检测与控制 # breaking out of a while loopB.用户通过 Telnet 可以从一台计算机登录到另一台计算机 在开始编写较复杂的shell脚本时,你会发现自己重复使用了部分能够执行特定任务的代码。
对于 m=2,在权值分布为 D2 = (0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.0715, 0.1666, 0.1666, 0.1666, 0.0715)的训15. return data; 如下图所示,中间的实线便是寻找到的最优超平面(Optimal Hyper Plane), 其到两条虚线边界的距离相等,这个距离,权当扩展。image-2.jpg、image-3.jpg、image-4.png等,依次类推。 8. 检查所属关系推广到非线性分类问题”)。 5 与BEGIN关键字类似,END关键字允许你指定一个程序脚本,gawk会在读完数据后执行它。频率提高到每小时一次,你还要考虑另一个因素。 IFS=$'\n'拟目录中用于分配额外存储设备的目录。虚拟目录会让文件和目录出现在这些挂载点目录中,然 然后拿它们的残差-1、1、-1、1 代替 A B C D 的原值,到第二棵树去学习,第二棵树只有两个值 1 和-1,直接分成两个节 21.4.2 GE 之 LINE
回顾下第二个约束条件 ,令上式两边乘以 y1,可得操作。法就是:Gibbs Sampling,有时叫 Gibbs 采样或 Gibbs 抽样,都一个意思。Gibbs 抽样是马尔可夫链蒙特卡尔理论(MCMC)中用 下选项: 04(非全日制)资 口语、专业 与低维电子物14.4 处理选项 关 于 salt的 更 多 细 节 信息, 请 参 考维基 百 科 页面http://en. 14 当使用&>符时,命令生成的所有输出都会发送到同一位置,包括数据和错误。你会注意到其 置部分艺术字的格式 物学 $41. // 累计误差率 $ nice: cannot set niceness: Permission denied 14
99.杀毒软件不可能杀掉的病毒是( )的 France 的上下文的。这说明相关信息和当前预测位置之间的间隔就肯定变得相当的大。 > { PRI:进程的优先级(越大的数字代表越低的优先级) 。 05(全日制)植物 PageRank 是 Google 算法的重要内容。2001 年 9 月被授予美国专利,专利人是 Google 创始人之一拉里•佩奇(Larry Page) 这是一本关于 Linux 命令行与 shell 脚本编程的全方位教程,主要包括四大部分 :Linux 命令行,shell GBM 的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合; 321 -2 -3 删除第二列和第三列。 13 这个操作有一个专有名词,即叫归一化。11、电路结构,电路工作状态 12、RAM,ROM,RAM #!/bin/bash 5 举个例子,假设我们要统计全国人口的身高,首先假设这个身高服从服从正态分布,但是该分布的均值与方差未知。由于没
2 单击下一步应用模板并刻录到 DVD。7.6.4 参考 在应用过程中的经验体会)。 3: 2976 /var/log/ 11 $ file a.out -b ps命令通常结合一系列参数使用。如果不使用任何参数,ps将显示运行在当前终端(TTY)14.对计算机进行热启动时,要按( )键。 (A)超文本传输 (B)文件传输 (C)传输控制 (D)网际互联
B.设置按钮的动作01 光学与光电技术 1101 思想政治理论 复试笔试科目(二选一): (1) 阻塞发送到特定IP地址的流量:5.在 Windows 中如果要选定几个连续的图标,可用鼠标单击第一个图标,然后按住 CTRL 键,再单 christine@server01:~/Documents$ pwdA.在局域网中,硬件地址又称为物理地址或 MAC 地址 $ sed '2{
$ zenity --calendar Writing inode tables: done 为了准确的估计随机变量的状态,我们一般习惯性最大化熵,认为在所有可能的概率模型(分布)的集合中,熵最大的模型B.保存时既可以保存在硬盘上,也可以保存到 U 盘和网络中但问题是有 2 个碟子,正因为根本无法估计一个碟子里应该乘多少菜,所以无法一次性把菜完全平均分配。 2.7.1 预备知识 . .......................................63 3.3.3 工作原理 . ................................................ 90 9. 检查默认属组关系 输入完成后,单击文本框之外的地方。要添加其他文字,请在它会将数据放在文件指针的当前位置,覆盖了该位置的已有数据。 10 *) echo ″$1 is not an option″;; 14 如今这个时代,电子邮件地址已经成为一种重要的通信方式。验证邮件地址成为脚本程序员B.PC 机上至少要安装一种操作系统以及用户定义变量。也可以用重定向命令来将含有userid:passwd对的文件重定向给该命令。
腾讯云
备案
控制台
腾讯云开发者社区
专栏
问答
沙龙
团队主页
TVP
《云安全最佳实践-创作者计划》火热征文中,发布文章赢千元好礼!
创作
提问
登录
注册
winty
268 篇文章
你真的了解 gif 吗?分析 2010
作者 | Darrien
翻译 | 王强
策划 | 辛晓亮
是的,我指的是主流的,遍布全网的普通 在线dcm文件格式转换为新格式,谷歌旗下的 Tenor 或 Facebook 旗下的 giphy 这样的网站到处都是这种 在线dcm文件格式转换为新格式。在线dcm文件格式转换为新格式 是所有人都喜欢的,用来分享简短动画片断的文件格式。
大多数人眼中的 在线dcm文件格式转换为新格式
正如大多数人所知道的那样,在线dcm文件格式转换为新格式 是一种动画文件格式。你可能看过 在线dcm文件格式转换为新格式 文件的信息,觉得这些文件可真够大的。也许你看了它们后会想:哇,这些图片的清晰度好低啊。但不管怎样,提到 在线dcm文件格式转换为新格式 时,你对它的印象应该就是一种短小的动画文件格式。
然而,这种用例和编写 gif 的开发者所期望的用途大相径庭。在这篇文章中,我们将深入了解 gif 文件的结构,并在这一过程中讨论它的一些有趣特性。
请注意,这篇文章要探索的是如何理解 gif 格式这一主题,并考察它的一些更深奥的特性。如果你想深入学习如何解析 gif 文件,我推荐以下这些资源。
W3 规范
Matthew Flickinger:gif 里有什么?
我发现 ntfs.com 的这份指南也可以帮助入门
写文章的时候我实际上用这些资源做了一个勉强符合要求的 gif 解析器,名为 awful-gif,可以解析一些 gif。我不建议大家使用它。
下面进入正题。
gif 的历史
gif 文件格式是由 Compuserve 在 1987 年创建的。在 1987 年的时候,gif 还是一个相当紧凑的格式!它使用了压缩方法,而且不是一般的压缩方法,而是 LZW 压缩技术。许多旧的文件格式(其中有些是 Compuserve 制作的)使用的则是 RLE(Run Length Encoding),在许多情况下效率没那么高。gif 的一个重要取胜因素就是其良好的压缩率和色域(全 256 色,太棒了!)。(注 1)
两年后,gif 文件格式加入了补充内容(gif89a),增加了许多我们今天众所周知和喜爱的特性。
通过 gif89a 规范,我们可以快速总结出 gif89 与 gif87a 支持的所有特性的区别。
Appendix
A. Quick Reference Table.
Block Name Required Label Ext. Vers.
Application Extension Opt. (*) 0xFF (255) yes 89a
Comment Extension Opt. (*) 0xFE (254) yes 89a
Global Color Table Opt. (1) none no 87a
Graphic Control Extension Opt. (*) 0xF9 (249) yes 89a
Header Req. (1) none no N/A
Image Descriptor Opt. (*) 0x2C (044) no 87a (89a)
Local Color Table Opt. (*) none no 87a
Logical Screen Descriptor Req. (1) none no 87a (89a)
Plain Text Extension Opt. (*) 0x01 (001) yes 89a
Trailer Req. (1) 0x3B (059) no 87a
Unlabeled Blocks
Header Req. (1) none no N/A
Logical Screen Descriptor Req. (1) none no 87a (89a)
Global Color Table Opt. (1) none no 87a
Local Color Table Opt. (*) none no 87a
Graphic-Rendering Blocks
Plain Text Extension Opt. (*) 0x01 (001) yes 89a
Image Descriptor Opt. (*) 0x2C (044) no 87a (89a)
Control Blocks
Graphic Control Extension Opt. (*) 0xF9 (249) yes 89a
Special Purpose Blocks
Trailer Req. (1) 0x3B (059) no 87a
Comment Extension Opt. (*) 0xFE (254) yes 89a
Application Extension Opt. (*) 0xFF (255) yes 89a
legend: (1) if present, at most one occurrence
(*) zero or more occurrences
(+) one or more occurrences
对于没有读过整份规范的人们来说,这里面的大部分内容可谓不知所云,所以让我们讨论一下 gif 是如何组合在一起的,顺便再谈谈它的一些奇怪之处。
在我们开始之前,先从规范中找些乐趣。
Appendix
D. Conventions.
Animation - The Graphics Interchange Format is not intended as a platform for
animation, even though it can be done in a limited way.
附录D.
公约。
动画——这个图形交换格式不是要成为一个动画平台,尽管它在某种程度上可以做到这一点。
gif 的结构
下面我会用一个例子来具体分析。如果你想跟着做,下载它即可。(注 2)
如果你在家里跟着学,只需要一台安装有 hexdump 工具的机器即可。我要用的是 xxd,它预装在大多数 unix 系统(Linux、macOS)上,或者可以通过 vim-common 包安装。
gif 头
每个 gif 都以一个头开始,其中的 magic 位标志着它是什么类型的 gif,还有一点额外的信息,提供关于图像的基本细节。
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -1 # and some arrows
00000000: -> 4749 4638 3961 <- dc00 0501 f700 0002 0102 gif89a..........
用 xxd 可以轻松把 gif 头信息解码为 ascii(如果它有意义的话)。看看上面的内容写着,gif89a!这是一个经过认证的有效 gif!
每个字母都是一个字节,所以我们在这里要找的 magic 字节是:0x47、;0x49、0x46、0x38、0x39、0x61。
另外,最后三个字节可能是:0x38、0x37、0x61,如果只支持 gif87a 文件格式会是这样。我们主要研究 gif89,老版本的格式就一带而过了。
此外 gif 头里面就没有什么有趣的东西了,因为它只是静态文本,所以我们继续往前走。
先等一下问个问题:谁会接受 gif87a 呢?
在研究 gif 时,我想看看主要的 gif 托管供应商是否会接受和保留 gif87a 规范的格式。它们能正常使用吗,还是说只能报错?
这是我们之前看到的向日葵的 gif87a 版本。这个版本只用在这里。
我们来把图像上传到 4 家头部 gif 托管供应商:
tenor
giphy
imgur
gfycat
我们开始的时候 gif 头是这样:
🜛 xxd Sunflower_as_gif_websafe_gif87a.gif | head -1
00000000: 4749 4638 3761 fa00 2901 f500 00ff cc33 gif87a..)......3
以下是重新下载我刚上传的图片后的结果。
Tenor 重编码为 gif89a:
🜛 Downloads xxd tenor.gif | head -1
00000000: 4749 4638 3961 a401 f201 f700 0006 0406 gif89a..........
giphy 重编码为 gif89a:
🜛 Downloads xxd giphy.gif | head -1
00000000: 4749 4638 3961 fa00 2901 f525 0000 0000 gif89a..)..%....
其实这有点忽悠人,giphy 只接受动画形式的 gif,所以我们必须点击编辑按钮(显示帧编辑器),然后点击完成才行。gif87a 规范中允许存储多张图片,但它们不能有延迟(因此没有动画,见注 3)。
imgur 保留了原始文件!!!
🜛 Downloads xxd aUxm3NN.gif | head -1
00000000: 4749 4638 3761 fa00 2901 f500 00ff cc33 gif87a..)......3
至于 gfycat,它一直卡在最后的“编码“阶段整整 20 分钟。希望我没有在周末让他们的一位可怜的工程师看到什么警报。
以上简短分析表明,由世界上最大的两家科技公司所有的两家最大的托管供应商并不尊重我的旧 gif 文件,而是完全重写了它。事实上,对于 giphy 这家公司来说,它似乎只尊重一种 gif......
总之回到探索文件格式的话题上。
逻辑屏幕描述符
那么你的图像是如何显示成某个分辨率的呢?假设我们在 macOS 的 Preview 中使用“get info“特性,它是怎么知道这张图片是 220x261 的?
信不信由你,这是在文件格式中内置的!(注 4)
字节 0x6-0xA 就是这部分信息,另外还加了点内容。字节 0x6 和 0x8 指的是长度和宽度。
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -1 # and some arrows
00000000: 4749 4638 3961 -> dc00 0501 <- f700 0002 0102 gif89a..........
每个维度有两个字节来指定大小。同样一定要记住,gif 文件格式中的所有字节都被指定为小 endian(注 5)。
首先是宽度,是 0x00dc(从 dc00 重新排序)=> 220(十进制)。
然后是长度,是 0x0105(从 0501 重新排序)=> 261(十进制)。
慢着,这是否意味着我们的 gif 有一个分辨率限制?
这就对了!因为每个位置只有两个字节,所以宽度或长度都不能大于 65535。我们可以尝试在 gimp 中制作一个 1x65536 的新 gif 来验证这一点。
其他文件格式在这方面也差不多。如果你想下载理论上最宽的 png,可以点这里。这个文件很小,但打开它的时候你的图像浏览器可能会崩溃。Firefox 浏览器很难打开它,并报告了一个错误,尽管它是符合规范的。
回到逻辑屏幕描述符上
不过逻辑屏幕描述符还没说完,接下来是一组打包的字段。用规范中的图表解释比较容易。
= Global Color Table Flag 1 Bit
Color Resolution 3 Bits
Sort Flag 1 Bit
Size of Global Color Table 3 Bits
这里有关于全局颜色表(Global Color Table)的信息,如果设置了全局颜色表位,它将出现在逻辑屏幕描述符之后。
颜色分辨率(Color Resolution)决定了全局颜色表中每种颜色有多少个字节。
排序标志(Sort Flag)会告诉解码器排在前面的颜色更重要,它会以有用的程度从高到低排序颜色。
而全局颜色表的大小是说,颜色表有多大。
在我们向日葵图片的 0xA 字节中,我们有 0xF7 的结果
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -1
00000000: 4749 4638 3961 dc00 0501 -> f7 <- 00 0002 0102 gif89a..........
或者在二进制中就是:1111 0111
这意味着我们的 gif 基本满载,除了 GCT 没有排序。
┌──────────GCT not sorted
▼ by importance
1111 0111
▲─── ───
GCT set───────────┘ ▲ ▲
│ │
3 bytes per │ └─────GCT is 768 bytes
color ─────────────┘ (max size)
(max resolution)
全局颜色表保存了每个字节部分所使用的颜色。它们是 0-255 的标准 RGB 值,你可以在任何现代 RGB 取色器里使用这些数值。
等一下,那个全局颜色表是可选的吗?
你可能已经注意到 0xA 字节的第一位说 GCT 可以是可选的。这的确很有趣。我们如何在没有指定它需要什么颜色的情况下渲染图像呢?
根据下面的规范:
颜色表——全局颜色表和局部颜色表都是可选的;如果存在全局颜色表,它将用于数据流中没有给出局部颜色表的所有图像;如果存在局部颜色表,它将覆盖全局颜色表。然而,如果两个颜色表都不存在,应用程序可以自由地使用一个任意的颜色表。
如果我们拿走一张图像的全局颜色表,现代渲染器会对我们的图像做什么呢?我敢肯定会有一些惊人的事情发生。
我们的图像指定的颜色表大小为 768 字节。它从 0xA 字节开始...... 假设我们像这样把 0xA 字节的最有意义的比特清零。
然后删除到第 789 字节(独占)。
🜛 xxd Sunflower_as_gif_89a-no-gct.gif | head -1
00000000: 4749 4638 3961 dc00 0501 007f 8121 f904 gif89a.......!..
现在第一行是上面这样结束的,这仍然是一个完全有效的 gif。
简直了!在写这篇文章的时候,它就只显示一个完美的黑色方块。在我试过的每一个渲染器中都是这样的情况。Gimp、Chrome、Firefox、Preview、gifiddle,随便哪个都一样。
总之回到逻辑屏幕描述符上。
继续谈逻辑屏幕描述符
在描述全局颜色表的字节之后,有两个描述屏幕描述符的末端字节。
字节 B 是背景颜色,指的是全局颜色表的索引;字节 C 是像素长宽比,描述了像素的方正度。
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -1
00000000: 4749 4638 3961 dc00 0501 f700 0002 0102 gif89a..........
^ ^
| |
Background color is color in index 0 of |
GCT |
Pixel aspect ratio is 0:0 or host
pixel aspect ratio.
等一下,像素长宽比是什么?
像素并不总是正方形的!字节也不总是 8 位,但这一点就不多说了。
gif 和其他一些最流行的现代图像格式都支持非正方形像素。
我想知道最流行的 gif 渲染器在渲染非方形像素时兼容性如何。我们在 Firefox 和 Chrome 中做一个流行的测试,看看它们看起来如何:http://frs.badcoffee.info/PAR_AcidTest/
上面依次是:jpg、png 和 gif。而 Firefox、Chrome 和 Preview 都忽略了长宽比。
不幸的是,这一特性普遍不被支持,而且目前在 Firefox 中有一个 16 年的老 bug:https://bugzilla.mozilla.org/show_bug.cgi?id=333377
甚至 gifiddle 这个我能找到的兼容性最好的 gif 浏览器也不支持非方形像素:https://github.com/ata4/gifiddle/issues/1
如果你真的想显示非方形像素,可以用调整过的 gimp 来做。此外,grafx2 显然可以处理非常特定的奇怪像素分辨率。不过我还没有亲自测试过。
回到全局颜色表
全局颜色表(GCT)显然是 gif 最无聊的部分。这里真的没有什么值得谈论的东西。
我的 awful-gif 项目可以输出向日葵的 GCT 中的所有颜色(也许其他图像也行)。
GCT 的解析就在这里,你可以看到它真的没有什么特别的地方。
用下面的命令运行:
cargo run --quiet -- --gif-file ./experiments/Sunflower_as_gif_websafe.gif
可选的图形控制扩展
下面我们讲图形控制扩展(GCE),由扩展引入器 0x21 引入(extension introduced),然后是 0xF9(!)
可用的扩展有许多,但图形控制扩展可以说是最重要的扩展之一,至少在现代用例中是这样。GCE 允许各帧之间存在显示延迟,这样 gif 才能成为“动画“。GCE 还允许其他一些事项。
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -50 | tail -2
00000300: 88ae b091 a5b1 a4b9 be94 887f 81 -> 21 f904 .............!..
00000310: 0000 0000 <- 0021 fe51 4669 6c65 2073 6f75 .....!.QFile sou
这个 gif 并不是动画,所以这里并没有发生很多事情。正如你所看到的,上面有很多零,但我们还是一个字节一个字节来讲。
第一个字节是块大小,在这个例子中是 0x04,但实际上根据规范它总是 0x04。
等一下,我们能不能把块大小去掉?
如果块大小总是一个静态的常数,那么它就不太重要了是吗?从技术上讲,它是规范的一部分,但实际上并没有什么作用。我们再在流行的图像浏览器中打开它看看。
在这些测试中我将使用一个更简单的 gif,这样更容易看到发生了什么情况:
在下面的测试中我对它做了修改,删除了 GCE。修改后的版本以 xxd 格式保存在下面。
00000000: 4749 4638 3961 2000 3400 f0ff 00ff ffff gif89a .4.......
00000010: 0000 0021 f903 0500 0002 002c 0000 0000 ...!.......,....
00000020: 2000 3400 0002 788c 8fa9 cb0b 0fa3 94ed .4...x.........
00000030: cc7b abc1 1cea d075 5fc8 8d64 a69d 68a5 .{.....u_..d..h.
00000040: 4e66 eba5 702c 3675 cddc a5bd e34e bfcb Nf..p,6u.....N..
00000050: 0131 ace1 ea47 0405 9128 9f42 9714 2667 .1...G...(.B..&g
00000060: a70d 3564 bd1a b52e 25b7 f905 8729 de31 ..5d....%....).1
00000070: cd1c c9a2 016a 74db fc1e c7c3 f36f 9d7b .....jt......o.{
00000080: d7e6 af7b 6a7f f607 13d8 32a8 5258 55e6 ...{j.....2.RXU.
00000090: 9608 b728 d748 f768 1789 f751 b950 0000 ...(.H.h...Q.P..
000000a0: 3b ;
将其保存到一个名为 invalid.hex 的文本文件中,然后执行:xxd -r invalid.hex > invalid.gif
(更新的字节在:0x16,从 0x4->0x03)
第一个是 macOS Preview:
Preview 是符合标准的!
接下来我们试试 Firefox:
Firefox 知道这是一个静态值,并忽略了它的结果。这并不完全符合标准,但可能是最聪明的做法。
当块大小被移除后,Chrome 会有点抓狂。在这里,Chrome 肯定是最不符合标准的。
回到图形控制扩展
在我们读完块大小之后,是一个包装好的字段,描述如下。
= Reserved 3 Bits
Disposal Method 3 Bits
User Input Flag 1 Bit
Transparent Color Flag 1 Bit
在我们的图像中所有这些字段都被设置为 0,所以我只解释它们。
Reserved 是为 gif22a 出现时设置的,我们需要这三个位来做一些好事。
User Input 是为了接受用户输入,通过点击鼠标或按下键盘将 gif 图片推进到下一幅。
透明索引是用来设置我们是否应该允许透明。
等一下,gif 可以接受用户输入???
是的,你没看错。gif 可以接受用户的输入来推进到下一帧。这个可怜的家伙为了用 png 重现这一特性建立了一个网站。真可惜,他像我一样被困在这里了,就因为他没看过 gif 规范。
我们不妨讨论 gif 支持的另一个奇怪特性,即纯文本扩展。
纯文本扩展允许 gif 制作者在他们喜欢的任何地方嵌入单色文本,并直接在图像上进行一些基本的样式设计。
纯文本扩展和用户输入扩展一样,除了像 gifiddle 的这样为了好玩而制作的 gif 查看器外,可能从未被任何 gif 查看器实现。
BOB_89A.gif 可能是有史以来在互联网上发布的第一个 gif,是一个同时使用这两种方式的 gif 例子。
下面是 BOB_89A.gif 在现代浏览器中的渲染。
然而,如果你把它放到 gifiddle 中,会得到一个非常不同的结果,最后的信息是一个非常重要的事实。
不过我不会剧透这个惊喜。你可以下载这个 gif 放到 gifiddle 里,看看会发生什么。
gifiddle 链接:http://ata4.github.io/gifiddle/
任何现代浏览器或 gif 浏览器都不支持这两项特性。
如果你想阅读更多关于纯文本扩展的信息,可以看这里。
可选的注释扩展
接下来是注释扩展,实际上它可以出现在一个块可能开始的任何地方。然而它最常出现在 gif 的这一部分。
注释部分只允许包含 7 位的 ascii,并且是供人类阅读的。
由于注释部分只是 ascii,你可以直接发射字符串并在输出中找到注释。
🜛 strings Sunflower_as_gif_websafe_89a.gif | head -7 | tail -1
QFile source: https://commons.wikimedia.org/wiki/File:Sunflower_as_gif_websafe.gif
在这张图片中,它开始于图片的 0x310 字节。
🜛 xxd Sunflower_as_gif_websafe_89a.gif | head -55 | tail -6
00000310: 0000 0000 0021 fe51 4669 6c65 2073 6f75 .....!.QFile sou
00000320: 7263 653a 2068 7474 7073 3a2f 2f63 6f6d rce: https://com
00000330: 6d6f 6e73 2e77 696b 696d 6564 6961 2e6f mons.wikimedia.o
00000340: 7267 2f77 696b 692f 4669 6c65 3a53 756e rg/wiki/File:Sun
00000350: 666c 6f77 6572 5f61 735f 6769 665f 7765 flower_as_gif_we
00000360: 6273 6166 652e 6769 6600 2c00 0000 00dc bsafe.gif.,.....
图像数据的剩余部分
之后就没有什么可谈的了。这张图像跳过了大多数其他的 gif 特性,如本地颜色表和动画,所以这张 gif 剩下的大部分只是数据和终止符。
老实说 lzw 压缩并不难学,但本文并不是要讲这个话题。如果你想学习它,Matthew Flickinger 在他的网站上有一篇好文章。
附加内容:真彩 gif
你知道 gif 可以是真彩色的吗?这和“局部颜色表“有关系。每个数据段都允许有自己的局部颜色表,因此如果你把一个 gif 分成足够多的片断,你就可以得到真彩色了!
大多数 gif 不会这样做,有几个原因。
首先,这样生成的图像是非常大的。每一个新的 256 色调色板将消耗额外的 768 字节。
第二,现在的渲染器不会“正确“渲染这样的图像。浏览器在默认情况下,如果没有指定,通常会在帧之间设置 0.1 的延迟。
然而,一个真正符合规范要求的 gif 渲染器会正确地显示真彩色 gif。因此,如果你有足够的空间、内存和多余的 CPU,为什么不做一个真彩 gif 呢?
如果你想了解更多关于真彩 gif 的信息,维基百科上有一整个章节。
总结
感谢大家有耐心看到这里。gif 规范中还有更多部分我没有讲到,如果你有兴趣了解更多关于 gif 的信息,我建议你查看规范和我在文章顶部添加的那些链接。
注释
1. https://en.wikipedia.org/wiki/gif#history︎
2. 向日葵图片转自维基百科关于 gifs 的文章(见脚注 1)︎
3. gif87a 在技术上是以比较有限的格式支持动画的。要了解更多信息,你可以试试 gifiddle 仓库上的 gif87a 动画例子:https://github.com/ata4/gifiddle︎
4. 更多信息请参见 gif 规范的第 18 节(逻辑屏幕描述符)。
5.更多信息,请参见第 4 节。文档来自 gif 规范:https://www.w3.org/Graphics/gif/spec-gif89a.txt︎
原文链接:
https://blog.darrien.dev/posts/you-dont-know-gif/
文章分享自微信公众号:
前端Q
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
作者:Darrien
原始发表时间:2022-03-16
如有侵权,请联系 cloudcommunity@tencent.com 删除。
展开阅读全文
https网络安全
举报
登录 后参与评论
0 条评论
相关文章
前端食堂技术周刊
食堂技术周刊仓库地址:https://github.com/Geekhyt/weekly[1]
童欧巴
图片格式基础信息
无论是 HTML 还是 XHTML 都没有规定图像的官方格式。然而流行的浏览器却专门规定了一定的图像格式,通常情况下是 GIF 和 JPEG,在网页中也能显示图...
WeiyiGeek
关于前端中图片的性能优化方案
在本地执行 node index.js 后,将会输出一串的标签,将其直接放入HTML文件中即可。非常的方便
学前端
Python视频剪辑工具moviePy
关注了很多的公众号,大佬们的骚操作层出不穷,看的我跃跃欲试。也想整一下。跟在大佬们的后面好看风景(复现操作)。
云深无际
10个 解放双手的 IDEA 插件,这些代码都不用写(第二弹)
鸽了很久没发文,不写文章的日子真的好惬意,每天也不用愁着写点什么,不用为那点可怜的阅读量发愁,不那么熬夜,留出了更多时间陪家人。
程序员小富
图片知多少?
谈到图片,就离不开像素这个概念,像素是指由图片的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
瓜大三哥
你关注过吗?动效设计的空间感
作者:Pasquale D’Silva 译者:MartinRGB在我们的大脑中,存在着多维的思考模型,能够帮助我们理解周围复杂的世界。我们还可以利用这种具有空间...
進无尽
21个极大提高开发效率的VS Code快捷键
做为前端开发者来说,大都数都用过 VSCode,并且也有很多是经常用的。但 VSCode 的一些快捷键可能我们不知道,也比较少用,毕竟这很好,因此本文就列出一些...
Fundebug
Web性能优化:图片优化
马哥linux运维 | 最专业的linux培训机构 ---- 我自己的Blog:http://blog.cabbit.me/web-image-optimiz...
小小科
GIF压缩小记
广告素材中,图片类素材都是以静态图片为主,缺少交互感和吸引力,可能导致点击率偏低。为此,腾讯广告多媒体AI团队使用AI技术在图片焦点区域生成动态效果,以提升点击...
乾彪
常见图片格式了解 前言概念了解图片类型图片比较与场景应用一图胜前言总结引用 & 参考
作为一个客户端开发,对于图片格式一直没有一个清晰的了解,这里简单的罗列出各种图片格式的区别,文章中有部分是他人的引用,会在底部放上链接,望轻喷。
菜的黑人牙膏
IntelliJ IDEA 教程设置讲解
IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、Ant、JUnit、CVS整合、代码审查、 创新...
前端教程
联系人字母导航集大成者
联系人字母导航条已经出来很多年都交互了,其UI组合无非是悬浮字母列表+侧边栏都字母选择(PinnedHeadList+siderBar)。这里炒...
jerrypxiao
一些你所不知道的VS Code插件
作为一名业余爱好者、专业人员,甚至是每月只有一次编程的开发人员,你必须知道,对于任何愿意在工作中投入最大生产时间的人来说,拥有智能和敏捷的工具是至关重要的,废话...
Fundebug
「 墙裂推荐」互联网人必备GIF制作的14种选择
本文通过制作 GIF 软件、录制 GIF 软件以及在线制作 GIF 网站三个方向推荐大家几个很好用的GIF工具,为节省下载时间,工具以打包待发,文末自取。
Sneaker-前端公虾米
WordPress4.2升级修复补丁:解决大量404请求以及评论表情路径及尺寸异常问题
上一篇文章写到了 WordPress 升级 4.2 版本后部分主题出现了大量 404 请求的问题,匆忙解决也没深究原因。今天继续调试主题却发现了评论表情不显示了...
张戈
WEB应用图片的格式,以及各自的特点和优化(一) by FungLeo
12年前我入行三天.用table布局做了一个非常粗糙的网页.我说了一句话,”网页就是表格加文字加图片,图片分两种,插入图片和背景图片”.
FungLeo
chrome 开发者工具的 11 个骚技巧
对于每个前端从业者来说,除了 F5 键之外,用的最多的另外一个键就是 F12 了。
coder_koala
更多文章
作者介绍
winty
广州微信前端开发
专栏
文章
268
阅读量
139.9K
获赞
599
作者排名
1953
精选专题
腾讯云原生专题
云原生技术干货,业务实践落地。
活动推荐
云安全最佳实践-创作者计划
火热征文中,发布文章赢千元好礼!
腾讯云自媒体分享计划
入驻腾讯云开发者社区,共享百万资源包。
运营活动
活动名称
广告关闭
社区
专栏文章
阅读清单
互动问答
技术沙龙
技术视频
团队主页
腾讯云TI平台
活动
自媒体分享计划
邀请作者入驻
自荐上首页
技术竞赛
资源
技术周刊
社区标签
开发者手册
开发者实验室
关于
视频介绍
社区规范
免责声明
联系我们
友情链接
腾讯云开发者
扫码关注腾讯云开发者
领取腾讯云代金券
热门产品
域名注册云服务器区块链服务消息队列 网络加速云数据库域名解析云存储视频直播
热门推荐
人脸识别腾讯会议企业云CDN 加速视频通话图像分析MySQL 数据库SSL 证书语音识别
更多推荐
数据安全负载均衡短信文字识别云点播商标注册小程序开发网站监控数据迁移
Copyright © 2013 - 2022 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有 京公网安备 11010802017518 粤B2-20090059-1