Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix some transparency issue ontelegram stickers #2

Merged
merged 13 commits into from
Mar 6, 2024

Conversation

Ovler-Young
Copy link
Owner

@Ovler-Young Ovler-Young commented Mar 4, 2024

Sending stickers from efb via telegram to WeChat often encounters errors like the one shown below. These errors mostly occur with animated stickers. Other user have such reports too.

WeChat error message image

After investigating, I found that these errors are likely due to WeChat's limit of 1 MB for GIF files used as stickers. Reducing the frame rate and figure size of the GIF can help reduce the file size, which is the main approach I took.

In the process of researching the GIF size limits, I also discovered that even if a sticker has transparency, this transparency is lost when the sticker is sent to WeChat:

Transparency loss image

To address this, I tried fixing the transparency issue. After some research, I found that decoding the WEBM files from Telegram correctly and using palettegen with the reserve_transparent flag, then encoding to GIF can retain transparency in a way that WeChat recognizes.

Transparent GIF image

There are still some remaining tasks:

  • Some TGS stickers still raise error -1
  • Non-WEBM stickers still have transparency issues
  • Windows

I will merge this pull request once these TODOs are complete.


在微信发表情贴图经常会出错,错误信息如下,也有别人反馈

WeChat error message image

这类型错误主要是因为微信对表情贴图的GIF文件大小有1M的限制。这个PR中我主要是通过降低GIF的帧率和图片大小来缩小文件,来尽可能避免这种错误。

在研究GIF大小限制的时候,我还发现发送表情经常会丢失透明背景,而变成黑色背景。即使原图有透明背景,到了微信也会变成不透明的:

Transparency loss image

为了解决这个问题,我试着让GIF保留透明。经过研究,我使用了正确解码Telegram的WEBM文件,然后保留透明背景生成调色板,再编码成GIF的方法,这样就能保留透明背景,微信也能正常显示:

Transparent GIF image

还有一些需要完成的工作:

  • 有些TGS表情贴图还是会报错
  • 非WEBM的表情贴图透明背景问题还没解决
  • Windows下的处理

请求将在TODO完成后合并。

@Ovler-Young
Copy link
Owner Author

在经历了上面的更改后,认为将压缩gif部分放至微信的slave较好,将在本branch中移除压缩gif部分,并将fork微信slave后重开pr;但透明背景的部分代码仍然保留。

@Ovler-Young Ovler-Young changed the title Compress gif for wechat Fix some transparency issue ontelegram stickers Mar 6, 2024
@Ovler-Young
Copy link
Owner Author

In this PR I've fixed the transparency issue on two kinds of telegram sticker, one for tgs stickers and one for video stickers.
这个PR解决了两个会导致透明背景的表情发到微信变成黑色背景的bug

@Ovler-Young Ovler-Young marked this pull request as ready for review March 6, 2024 13:36
@Ovler-Young Ovler-Young merged commit cbe43ec into master Mar 6, 2024
2 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant