事情是这样的,前两天在群里聊天,发了个QQ表情包,结果发出去之后,图片显示的位置明显偏了。本来应该在文字后面的表情,跑到上一行去了,而且表情本身也像是被切了一半,看着特别别扭。群里有人问“你发的啥”,我才发现不止我一个人看到的是错位的,其他人也看到同样的效果。这就排除了我手机显示的问题,是表情包本身或者发送环节出了问题。
我遇到的几种错位情况
根据我自己的观察和在网上搜到的信息,qq表情包错位大概有这几种表现:
- 表情和文字重叠:发出去的消息里,表情图标和文字挤在一起,盖住了字的一部分。
- 表情显示成代码:偶尔会看到一串像eme100/em这样的代码,而不是图片。
- 动态表情卡在某一帧:动态表情发出去后不动了,或者显示成一张模糊的静态图。
- 表情位置偏移:表情本身没问题,但位置不对,比如跑到消息气泡外面去了。
我遇到的是最后一种,表情位置偏移,而且只有特定几个表情会这样。我试着重发,换网络,重启QQ,都没用。
我排查的几个方向
既然不是网络和客户端的问题,我开始往其他方向想。首先想到的是QQ版本问题,因为那几天刚更新了版本,怀疑是更新带来的bug。我检查了一下设置,发现“聊天记录迁移与备份”里有个“同步最近聊天记录”的选项,我把它关掉再打开,重启QQ,问题还在。后来又试了清除缓存,在设置-存储-清理缓存,清理完之后重新登录,还是老样子。
接着我怀疑是那个表情包本身的问题。我把那个出问题的表情删了,重新从表情商城下载,发现下载下来的还是错位的。这基本说明是表情包文件在传输或者渲染的时候出了问题,不是我手机本地的事。
我又试了用电脑端QQ发同样的表情,电脑上显示正常,但手机上看还是错位。这就更奇怪了,说明问题出在手机端的渲染逻辑上。我甚至试了改字体大小和聊天背景,都没用。
暂时的解决办法
折腾了半天,最后我找到个临时的办法:把那个表情截图,然后用图片形式发出去。虽然这样失去了动态效果,但至少不会错位,群里的人也看得懂了。另外我发现,如果是错位的表情,你长按它选择“转发”,转发给别人的时候反而正常了,但自己这边看还是错的。这个现象挺有意思,但我不确定是不是普遍情况。
我在网上搜“qq表情包错位”,发现有不少人遇到过类似情况,时间点集中在最近几次版本更新后。有人说是输入法的问题,我试过换输入法,没用。也有人说是主题的原因,我换回默认主题,还是没用。目前看下来,这更像是腾讯那边兼容性的问题,可能跟手机型号或者系统版本有关,比如安卓最新的某个版本和QQ的渲染引擎有冲突。
补充方案
在我实在没办法的时候,想起之前为了做表情包下载过一个叫表情包制作助手的工具。当时只是用来把视频转成GIF,后来发现它里面有个“表情修复”功能,可以重新编码表情文件的元数据。我试着把那个错位的表情导入进去,点了一下修复,然后再导出发到QQ,居然正常了。原理我不太懂,大概是它会把表情文件重新打包,去掉一些多余的参数,让QQ能正确识别。
不过这个工具也不是万能的。它只能处理本地的图片或GIF文件,对于那种已经发到聊天记录里的错位表情,你没法直接导出原始文件,只能先截图或者用它的“从聊天记录提取”功能(但这个功能需要配合电脑端操作,挺麻烦的)。而且修复后的表情会丢失原来的动态效果,变成静态图。如果你很在意动态效果,那这个方案就不太适合你。另外它偶尔会把GIF的帧率搞乱,导致表情速度变快或变慢,需要自己重新调整一下。
总的来说,如果你遇到的q表情包错位问题不严重,建议等官方更新修复。如果着急用,可以试试截图发送或者用工具重新编码。我的经验就这些,希望能帮到遇到同样问题的人。