首页 > 其他分享 >WebP图片使用踩坑

WebP图片使用踩坑

时间:2024-12-16 20:42:51浏览次数:4  
标签:微信 程序 WebP 使用 格式 PNG 图片

前情

WebP是一种同时提供了有损压缩与无损压缩(可逆压缩)的图片文件格式,最初在2010年发布,目标是减少文件大小,相较于传统的 PNG、JPG,甚至是动图 GIF 的格式,WebP 比它们的空间更小。根据谷歌的测试,WebP 格式的图片可以比 JPEG 格式的图片小 26%-34%,比 PNG 格式的图片小 25%-34%,所以在最近的小程序项目中,我尝试引入WebP格式图片以来减小包体积。

坑位

一开始我负责的小程序是发布在抖音端和快手端,在抖音端使用WebP是没啥问题的,一切都挺顺利,但是直到在快手端自测时候发现,在iOS上部分有带透明的图片会显示异常。

我还给官方提了BUG:webp小图标显示异常,官方回复说是已经解决,虽然回复已经解决,但发版更新是需要时间的,后面不得不快速过了小程序的相关页面,把显示异常的小图标都换成了PNG格式图片,想到等后续稳定了再用回WebP吧。

最近公司项目又有变化,公司希望小程序有发布微信端,项目也落在了我名下,于是我又踩到了另一深坑,我一直以为在所有小程序端中微信是鼻祖,应该是最稳定的了,我一开始也是这么认为的,因为在开发者工具上并没有发现有什么大的问题,直到我在真机上测试,大颠眼睛,页面上到处是空白,一开始怀疑是布局出现兼容问题,直到定位代码才发现,全部是webp格式图片不支持,于是查看了微信的文挡,文挡是写得好好的,翻到最下面,说需要添加webp=“true”才可以,而且只支持网络图片,真的是脑袋发胀,心里恶狠狠的骂了回自己,给自己找事用什么WebP喽。

Why?

快手的问题就是平台的BUG,微信就是平台的限制,对于这些问题,我们开发者只能提BUG等待官方修复,但这一段修复的时间你不得不想办法绕开,但是微信小程序这个完全就是平台的限制了,你无能为力。

解决方案

方案1:使用网络WebP格式图片

个人亲测使用网络WebP格式图片确实是可以的,但是微信文挡又在瞎说,如果你用网络WebP格式图片的话,webp=”true”有没有都不影响图片的展示的,但是再微信小程序论坛搜搜,你又会发现WebP图片显示问题还挺多的,而且全换成网络图片工作量不会小,同时也会增加公司的CDN流量费用。

方案2:全部图片换成PNG

在一次次被恶心过后我最终还是决定所有WebP格式图片全部换回PNG图片,在替换过程中我发现如果你用PNG图片再通过 tinypng压缩后你的PNG图片也并不一定会比WebP格式图片小,我随便选了几张替换的图片做了下大小对比。

我在做图片替换的时候并不是重切所有图片,重切的话主要是找寻源图会点麻烦,我的做法是所有图片通过FreeConvert工具转PNG,再通过TinyNG做图片压缩以保证图片大小适当。

总结

此文并不是web项目,按目前情况,web项目是可以放心使用WebP的, WebP确实能在一定程序上减小项目资源大小,小程序项目还是推荐用PNG+tinypng压缩的方式使用吧,即保证图片体积适当,又避免踩到奇奇怪怪的问题。

  • 抖音小程序可以放心使用WebP格式图片
  • 如果你的小程序要发布快手端,推荐你先尝试尝试几个透明图片看看官方修复情况
  • 微信小程序你想使用WebP的话,你得使用网络图片
  • 其它小程序端欢迎各位大佬测试,有问题一起分享出来,能让大家少踩一坑是一坑,期待你的留言分享

标签:微信,程序,WebP,使用,格式,PNG,图片
From: https://www.cnblogs.com/xwwin/p/18611076

相关文章

  • vue 上传组件 vxe-upload 图片和附件拖拽调整顺序
    vue上传组件vxe-upload图片和附件拖拽调整顺序,通过设置drag-sort参数就可以启用拖拽排序功能官网:https://vxeui.com/图片拖拽排序<template><div><vxe-uploadv-model="imgList"mode="image"multipledrag-sort></vxe-upload></div></t......
  • Qt之截图存为图片或PDF打印(七)
    Qt开发 系列文章-Screenshot-To-PicOrPDF(七)目录前言一、截图二、功能实现1.创建项目2.新建类3.编写类1.定义头文件2.相关功能函数3.使用类总结前言本文利用Qt平台,实现屏幕截图功能,并将截图复制、保存为图片、或打印到PDF中。一、截图要实现Qt的截图功能,主......
  • 如何使用 SUBSTRING_INDEX 提取特定位置的子字符串?[CodeGeeX]
    SUBSTRING_INDEX函数在MySQL中用于从字符串中提取子字符串,但它主要用于基于分隔符的位置提取子字符串。如果你想提取特定位置的子字符串,可以使用SUBSTRING_INDEX结合其他字符串函数来实现。假设你有一个字符串str,并且你想提取特定位置的子字符串。例如,假设str是'a,b,c,d......
  • QT使用promoted后样式(setStyleSheet)不生效
    1.理解promoted(提升)在Qt中的概念在QtDesigner中,“提升(Promoted)”是一种机制,它允许你使用自定义的部件类来替代标准的Qt部件类。这在你已经创建了一个从标准Qt部件(如QListWidget)派生的自定义部件(如ListMenu)并且希望在设计器环境中使用它时非常有用。2.样式不生效的......
  • [BootstrapBlazor] Blazor 使用 Mermaid 渲染详细图表
    BootstrapBlazor是一套基于Bootstrap和Blazor的企业级组件库,无缝整合了Bootstrap框架与Blazor技术。它提供了一整套强大的工具,使开发者能够轻松创建响应式和交互式的Web应用程序。项目地址Gitee:https://gitee.com/LongbowEnterprise/BootstrapBlazorGitHub:https://g......
  • Jmeter的使用介绍
    一、背景  工作中有个高并发的问题导致页面卡住不动,本地测试环境模拟5万个用户来同时访问,类似于描述,在10点开始的时候,马上有1万个用户进来访问页面,后续陆续又短时间内进来大量用户访问。 二.使用过程jmeter下载下来之后,解压,是一个D:\apache-jmeter-5.6.2\bin这样的文件夹。......
  • docker安装使用详解
    docker卸载##1.卸载依赖yumremovedocker-cedocker-ce-clicontainerd.io##2.删除资源目录rm-rf/var/lib/dockerdocker默认工作路径/var/lib/dockerdocker安装前置:docker删除旧版本sudoyumremovedocker\docker-client\......
  • 鸿蒙Next合理使用状态管理总结
    在使用鸿蒙Next进行开发时,合理的状态管理对于优化UI性能和提升用户体验至关重要。许多开发者由于对状态管理特性了解不足,常遇到UI不刷新或刷新性能差的问题。本文将从合理使用属性、合理使用ForEach/LazyForEach等方面进行总结,帮助开发者掌握合理使用状态管理的方法。一、合理使......
  • Express的使用笔记9 使用bcrypt算法给用户密码加密
    先了解一下bcrypt算法,一种基于Blowfish密码学算法的密码散列函数,用于在密码存储时抵抗暴力破解攻击,通过在散列过程中加salt来提高安全性,salt是个随机生成的数据串,与密码一起被散列,使得即使两个相同的密码也会产生不同的散列值。bcrypt算法允许开发者指定工作因子(成本因子),决定散列......
  • 印象笔记使用
    vscode安装插件登录印象笔记,开通token点击插件页面的设置填写url和tokenctrl+shift+pevernew-新建笔记everopen-打开笔记eversearch-搜索笔记everpublish-发布笔记eversync-同步笔记新建笔记下载安装windows客户端,功能比网页......