前端vs图片4 apng 前端动图的新姿势

之前我们怎么做帧动画

  • 首先需要排除掉gif
    前文所说,gif只支持8位数,而且因为不支持半透明会出现锯齿,因此需要高色彩的动画的话,gif是不能够用的

  • 通过js方法,逐帧轮询

    • 将图片制作成雪碧图,js一直轮询,改变图片的position
    • 将图片按名称顺序排列,js一直轮询,替换图片的background url
  • 通过css3的 animation 来实现
    与上述的js方法类似,改变图片的position或者替换图片的background
    只不过不是通过js方法来轮询,是通过css3 animation的step来执行,一共N帧,就需要写steps(N)

apng是个啥

现在我们不需要用上面的那几种复杂方式来实现帧动画了,因为有了apng这种图片格式

APNG(Animated Portable Network Graphics)是一个基于PNG(Portable Network Graphics)的位图动画格式,扩展方法类似主要用于网页的GIF 89a,仍对传统PNG保留向下兼容……APNG与Mozilla社区关系密切,格式标准文档就放在Mozilla网站。——源自百度百科

apng可以称为 支持动画的png,目的就是为了替代画质低劣的gif动画

apng 是基于 png 格式扩展的一种位图动画格式,增加了对动画图像的支持,同时加入了 24 位真彩色图像和 8 位 Alpha 透明度的支持,动画拥有更好的质量

apng 对传统 png 保留向下兼容,当解码器不支持 APNG 播放时会展示默认图像。(也就是说浏览器不支持时,会展示第一帧的静态图片)

apng的扩展名就是.png,从文件名上看不出差别,直接在网页上引用图片地址,就完成了帧动画的引用
如下图,图片地址为 https://img-blog.csdnimg.cn/img_convert/e9d91dceef852e9fbc9b4b570ec86c4e.png

上图摘自 apng vs gif demo,可点击网页查看其具体差异

apng的优点

  • apng支持的色彩多、支持半透明
    apng可以做更精细的动图,这个刚好弥补gif的最大短板

  • apng支持无限循环播放,也支持只循环1-N次
    由于gif只能支持无限循环播放,所以这个特性在特定场景下还是很有用的
    比如一个经典的视频红心收藏动画,你想让动画只执行一次,这个时候ui同学设置apng的循环次数只循环1次就比较适合

apng的不足

  • 兼容性不如gif好
    相对比gif来说,apng还比较新,一些比较旧的浏览器(如Chrome 40),对apng还不支持
    不支持的话就是不会正常展示动图,只能展示第一帧

  • 未成为png标准
    让人惊讶的是,这么好用的apng,居然一直未成为png的标准
    这里面有几大组织在博弈,因为目前apng属于Mozilla,而png组织之前也推出过mng这种动图图片格式,但是未能成功,但应当仍未放弃,所以一直阻挠apng的标准化

  • 浏览器外的使用少
    由于上述两个原因,apng在除了浏览器的应用中,使用程度也比较低,比如在PPT编辑、预览模式下,均无法像gif一样展示动图,制作的软件比gif图少的多

apng如何获得

由于apng的未普及性,很多UI的同学也不知道这种图片如何生成

其实UI同学将帧动画制作完成之后,通过相关工具合成出apng出来即可

个人推荐一款apng制作工具,APNGb Mac版,可以调整帧的频率、循环次数等,各位可以自行搜索操作一下,比较简单

个人实践心得

虽然上面说的 相对比gif来说兼容性不是那么好,不过对于目前主流的浏览器,基本上足够用了
先来看一下can i use上的数据
在这里插入图片描述
不出意外的,IE系列全军覆没,不过微软自己都放弃IE了,我们早就不需要兼容IE了

上图后面的UC、QQ、百度浏览器是提示不兼容的,这个其实网站统计的过时了

个人测试的结果,UC、QQ、百度、夸克、华为自带浏览器等一众国产浏览器,都支持apng

包括小程序也支持,个人在2018年最早在小程序上使用apng来展示动图,后来在手机、PC等几个项目上也都使用过

总结 - 推荐使用

虽然未成为png的标准,不过从上文所述,apng优势很明显,实际兼容性良好

很重要的是它对前端开发良好,不用写之前的那段js轮询,想使用gif一样方便

从个人几年来的实践来看,放心的用!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PNG(Portable Network Graphics)是一种无损的位图图像格式,旨在替代GIF格式PNG图像可以支持多种色彩空间和透明度,以及不同的图像压缩算法。 前端处理图片时,PNG格式通常用于保留透明度,例如创建圆角图片或阴影效果。此外,PNG格式还可以用于在网页上显示透明的网页标签或图标。 要处理PNG图像,您可以使用各种图像编辑软件,例如Adobe Photoshop或GIMP。您可以使用这些软件来剪裁、调整大小、更改透明度或应用其他滤镜或效果。 ### 回答2: 前端处理图片PNG的过程主要分为以下几个步骤: 1. 获取图片流:首先从服务器获取图片流,可以使用向服务器发送请求的方式获取图片的二进制数据。 2. 创建图片对象:通过使用Blob对象或者Data URI将获取到的图片二进制数据转换成图片对象。Blob对象可以通过URL.createObjectURL(blob)方法来创建,Data URI可以直接将图片二进制数据转换成base64编码的字符串。 3. 渲染图片:在HTML页面上,可以使用<img>标签将获取到的图片对象进行渲染,显示在页面上。设置<img>标签的src属性为之前创建的Blob对象的URL或者Data URI字符串。 4. 处理图片:如果需要对图片进行处理,可以使用HTML5中的Canvas元素来进行操作。将<img>标签中的图片绘制到Canvas上,然后使用Canvas的相关API进行图片的处理,比如调整大小、裁剪、旋转等操作。 5. 导出图片:如果需要将处理后的图片导出,在Canvas上进行处理后,可以将Canvas上的内容导出为图片,通常使用Canvas的toDataURL()方法将处理后的图片转换成Data URI字符串,然后可以下载或者展示在页面上。 总结起来,前端处理图片PNG的主要步骤包括获取图片流、创建图片对象、渲染图片、处理图片和导出图片。通过这些步骤,前端可以实现对PNG格式图片进行处理和展示。 ### 回答3: 在前端处理PNG图片流时,首先我们需要获取图片流数据,可以通过网络请求获取到图片的二进制数据。接下来,我们可以使用JavaScript的FileReader对象将图片流转换为可读取的数据。 通过FileReader的readAsDataURL方法,我们可以将图片流转换为Base64格式的字符串,这样我们就可以在前端进行展示或者其他操作。读取图片流的代码如下所示: ```javascript function handlePNGImageStream(imageStream) { const reader = new FileReader(); reader.onload = function(event) { const base64Image = event.target.result; // 在这里可以将base64格式图片进行展示或者其他处理 }; reader.readAsDataURL(imageStream); } // 模拟获取图片流的操作 fetch('image.png') .then(response => response.blob()) .then(blob => handlePNGImageStream(blob)); ``` 在上述代码中,我们通过fetch方法模拟了获取图片流的操作,然后将获取到的流数据传给handlePNGImageStream函数。在handlePNGImageStream函数中,我们创建了一个FileReader对象,并设置了它的onload事件处理函数,当文件读取完成时,将触发该事件。 在事件处理函数中,我们可以通过event.target.result获取到Base64格式图片字符串,然后可以将其展示在页面上或者进行其他操作。 总之,前端处理PNG图片流主要是通过将图片流转换为Base64格式的字符串来进行操作,这样便于在前端进行显示和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值