-
Notifications
You must be signed in to change notification settings - Fork 2.5k
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
支持 WEBP 格式图片发送 #1584
Comments
This comment has been minimized.
This comment has been minimized.
这像是 webp。 |
这确实不是jpg照片 而是RIFF格式图片 |
可恶,我被骗了,那...支持吗? |
之前的版本,是可以发送这个图片的,所以我就...没有实际验证它的真实格式,就想当然觉得是jpg了,哈哈哈 |
这是WEBP格式 是以RIFF数据格式进行表示的 如果可以正常发送的话 应该是服务器进行了转换操作 |
那mirai只需要把这个格式加白名单,就可以正常发送了吧(猜想) |
服务器并不支持webp图片 所以无法添加支持 如果支持的话就会有人来问为什么动态的webp图片发送之后不动了( |
那我先考虑本地写个本地转换库吧,静态图片应该不难 |
关于WEBP图片的识别 Ref: https://developers.google.com/speed/webp/docs/riff_container#webp_file_header 另:webp的读取需要第三方库 |
不需要三方库, highway直接发送即可 参考示例 // RIFF
buffer.PeekUintBE(0, out value);
if (value == 0x52494646)
{
// WEBP
buffer.PeekUintBE(8, value);
if (value == 0x57454250)
{
type = ImageFormat.WEBP;
width = buffer.PeekUintLE(0x12);
height = buffer.PeekUintLE(0x16);
}
} |
问题是对WEBP格式的大小的获取,另外如果由highway直接发送的话指定的文件格式将会是不确定的,也无法提供对应的大小
|
为什么是不确定的 |
可否提供一个接口,可以让开发者自主实现获取该文件格式的大小,如果开发者不实现该接口,则按图片大小未知的方式往服务器发送,安卓的BitmapFactory.decodeByteArray挺方便的 |
图像格式如果是 webp,那最后发送的图片将会不被PC客户端识别(如果指定了图像格式为webp) |
我打算先本地用BitmapFactory库webp转jpg发送解决这个问题 |
实际上这是由协议限定的图片格式,之前能正常发送的原因的话我也不知道为什么( |
不过倒是可以提供一个resolver,就负责转换为支持的格式类型 |
PC不行, 但是安卓可以. |
这就是我没写WEBP的原因(躺 |
转换格式个人感觉没什么必要, 直接加上webp发送就行. |
emmmm 个人设计API的时候会考虑预期结果 在上传图片的时候肯定是预期所有客户端都支持的 所以就没有允许另外的格式 |
也可以判断平台,如果是JVM平台,就用JVM自带的图片处理,如果是安卓平台,我已经写好了实现(土掉渣的反射,调用安卓的API)
该函数是将任意(只要安卓系统支持)的图片格式转为JPG,在出现WEBP的时候很好用(我改主意了,我觉得转成PNG更好x |
如果考虑到兼容性, 那么就建议不要支援webp. 或者做好格式转换填补tx屎坑. |
webp支援动态图片, 转换成jpg/png必然会丢失帧数据. |
可以添加一个环境参数来忽略预检查错误, 至于最终的显示效果嘛
可以考虑加个 PR welcome |
那么这个工具类可以根据环境,判断是安卓还是JVM,因为两种环境都有原生的系统API来处理图片,可以省很多麻烦(当然可以选择由开发者自行实现) |
QQ客户端好像本身就不支持使用webp格式的文件(至少你发图片的筛选器里面是没有webp这东西的 |
我已经把webp转png发送了,目前没有什么问题, ——动态webp图片这么高级的玩意我暂时也用不上。 |
转换库,检测到非PNG/JPG/GIF则试图转换成PNG(for Android)
发图部分
|
感觉不太合适,能见得webp图片很多都是动态,比如抖音什么的。 |
事实上,很多网页都以webp格式来显示图片,特别是图床,因为省流量 |
事实上webp随着windows的原生支持,地位上已经基本上和jpg、png这类普通格式平起平坐了吧 |
强行发送webp格式的图片,在Android端显示是正常的(至少大部分图片都是正常的),PC端的话显示不出来。
事实上是不是平起平坐还是得看Tencent那边,人家说可以才算数,qq他不打算支持webp的话,你整出花来也是得转格式,我自己倒是还在用webp格式的,省很多空间 |
Work Around on JVM
|
版本:Mirai 2.8.0-M1
复现方式:发送webp格式的图片
复现结果:considering use gif/png/bmp/jpg
补充:在2.8.0-M1之前是可以正常发送webp图片的
星星.zip
The text was updated successfully, but these errors were encountered: