ehForwarderBot / efb-telegram-master

EFB Telegram Master Channel, a channel for EH Forwarder Bot.
GNU Affero General Public License v3.0
223 stars 78 forks source link

Fix: error in sending sticker to wechat #138

Closed Ovler-Young closed 6 months ago

Ovler-Young commented 6 months ago

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:

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


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

微信错误信息图片

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

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

透明度丢失图片

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

透明GIF图片

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

请求将在TODO完成后合并。