开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 240|回复: 11
打印 上一主题 下一主题
收起左侧

[易语言] webp格式转易语言能读取的图片

[复制链接]
结帖率:88% (116/132)
跳转到指定楼层
楼主
发表于 2025-6-15 03:30:04 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式   贵州省贵阳市
14精币
论坛里webp格式转jpg 转png的例子我都测过了,只能转换静态的webp图片,  如果是webp的动态图片无法正常转换,求个办法。


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:95% (163/171)

签到天数: 5 天

沙发
发表于 2025-6-15 04:11:18 | 只看该作者   湖南省永州市
试试这个https://convertio.co/zh/  ,另外这玩意有API能直接在线转换
回复

使用道具 举报

结帖率:57% (12/21)

签到天数: 1 天

板凳
发表于 2025-6-15 09:51:00 | 只看该作者   浙江省湖州市
### WebP 格式转换为易语言支持格式的解决方案

要在易语言中处理 WebP 格式图片,需要借助外部库或工具进行转换。以下是几种可行的实现方法:


### 方法一:使用 WebP 官方 DLL 库

WebP 官方提供了 DLL 库,可以直接在易语言中调用进行解码。你需要先下载 [libwebp](https://developers.google.com/speed/webp/download) 的 DLL 文件,然后按以下步骤实现:

```易语言
.版本 2
.支持库 spec

// 声明 WebP 解码相关函数
.子程序 "WebPGetInfo", 整数型, "libwebp.dll", 公开, 整数型, 整数型, 整数型, 整数型
.参数 data, 整数型, 传址
.参数 data_size, 整数型
.参数 width, 整数型, 传址
.参数 height, 整数型, 传址

.子程序 "WebPDecodeRGBA", 整数型, "libwebp.dll", 公开, 整数型, 整数型, 整数型, 整数型
.参数 data, 整数型, 传址
.参数 data_size, 整数型
.参数 width, 整数型, 传址
.参数 height, 整数型, 传址

.子程序 "CreateDIBSection", 整数型, "gdi32.dll", 公开, 整数型, 整数型, 整数型, 整数型, 整数型, 整数型
.参数 hdc, 整数型
.参数 pbmi, 整数型, 传址
.参数 iUsage, 整数型
.参数 ppvBits, 整数型, 传址
.参数 hSection, 整数型
.参数 dwOffset, 整数型

.子程序 加载WebP图片, 整数型, 文本型, 整数型
.参数 文件路径, 文本型
.参数 图片框句柄, 整数型
.局部变量 文件数据, 字节集
.局部变量 文件大小, 整数型
.局部变量 宽度, 整数型
.局部变量 高度, 整数型
.局部变量 像素数据指针, 整数型
.局部变量 位图信息, 字节集
.局部变量 位图句柄, 整数型
.局部变量 位图数据指针, 整数型
.局部变量 设备上下文, 整数型
.局部变量 旧位图句柄, 整数型
.局部变量 结果, 整数型

// 读取 WebP 文件
文件数据 = 读入文件 (文件路径)
文件大小 = 取字节集长度 (文件数据)

.如果真 (文件大小 <= 0)
    返回 (0)
.如果真结束

// 获取图片尺寸信息
宽度 = 0
高度 = 0
调用 WebPGetInfo (取变量地址 (文件数据), 文件大小, 取变量地址 (宽度), 取变量地址 (高度))

.如果真 (宽度 <= 0 或 高度 <= 0)
    返回 (0)
.如果真结束

// 分配内存并解码 WebP 数据
像素数据指针 = 调用 WebPDecodeRGBA (取变量地址 (文件数据), 文件大小, 取变量地址 (宽度), 取变量地址 (高度))

.如果真 (像素数据指针 = 0)
    返回 (0)
.如果真结束

// 创建位图信息结构
位图信息 = 取空白字节集 (40)
二进制填充 (位图信息, 0, 4, 40)  // sizeof(BITMAPINFOHEADER)
二进制填充 (位图信息, 4, 4, 宽度)
二进制填充 (位图信息, 8, 4, 高度)
二进制填充 (位图信息, 12, 2, 1)   // 平面数
二进制填充 (位图信息, 14, 2, 32)  // 位深度

// 创建 DIB 位图
设备上下文 = 调用 GetDC (0)
位图数据指针 = 0
位图句柄 = 调用 CreateDIBSection (设备上下文, 取变量地址 (位图信息), 0, 取变量地址 (位图数据指针), 0, 0)
调用 ReleaseDC (0, 设备上下文)

.如果真 (位图句柄 = 0)
    返回 (0)
.如果真结束

// 复制像素数据到 DIB
内存复制 (位图数据指针, 像素数据指针, 宽度 * 高度 * 4)

// 释放 WebP 解码的内存
调用 WebPFree (像素数据指针)

// 显示位图到图片框
设备上下文 = 调用 GetDC (图片框句柄)
旧位图句柄 = 调用 SelectObject (设备上下文, 位图句柄)
调用 BitBlt (设备上下文, 0, 0, 宽度, 高度, 设备上下文, 0, 0, 13369376)
调用 SelectObject (设备上下文, 旧位图句柄)
调用 ReleaseDC (图片框句柄, 设备上下文)

返回 (位图句柄)
.子程序尾
```


### 方法二:使用 Python 脚本辅助转换

如果你觉得 DLL 方法太复杂,可以通过易语言调用 Python 脚本进行转换:

```易语言
.版本 2
.支持库 eAPI

.子程序 转换WebP到PNG, 逻辑型, 文本型, 文本型
.参数 webp路径, 文本型
.参数 输出PNG路径, 文本型
.局部变量 命令行, 文本型
.局部变量 返回值, 整数型

// 构建 Python 命令行
命令行 = "python -c ""import webp; img = webp.load_image('" + webp路径 + "'); img.save('" + 输出PNG路径 + "', 'PNG')"""

// 执行命令
返回值 = 运行 (命令行, 假, 0)

返回 (返回值 = 0)
.子程序尾

.子程序 _按钮1_被单击
.局部变量 webp文件, 文本型
.局部变量 png文件, 文本型

webp文件 = "C:\测试.webp"
png文件 = "C:\转换后.png"

.如果真 (转换WebP到PNG (webp文件, png文件))
    信息框 ("转换成功!", 0, "提示")
    // 加载转换后的 PNG 图片
    图片框1.图片 = png文件
.否则
    信息框 ("转换失败!", 0, "错误")
.如果真结束
.子程序尾
```

使用此方法前,需要确保已安装 Python 并安装 webp 库:`pip install Pillow WebP`


### 方法三:使用在线转换 API

如果不想本地处理,可以调用在线 API 进行转换:

```易语言
.版本 2
.支持库 eAPI

.子程序 调用在线WebP转换, 文本型, 文本型
.参数 webp文件路径, 文本型
.局部变量 请求网址, 文本型
.局部变量 请求参数, 文本型
.局部变量 返回数据, 字节集
.局部变量 输出文件, 文本型

// 使用示例 API (需替换为实际可用的 API)
请求网址 = "https://api.example.com/webp-to-png"
请求参数 = "file=@" + webp文件路径

// 发送 HTTP 请求
返回数据 = HTTP_POST (请求网址, 请求参数, , , , 1)

// 保存转换后的图片
输出文件 = 取运行目录 () + "\转换后.png"
写出文件 (输出文件, 返回数据)

返回 (输出文件)
.子程序尾
```


### 使用建议

1. **推荐方法一**:性能最佳,无需依赖外部环境,但需要获取 libwebp DLL。
2. **方法二**:实现简单,但需要用户预先安装 Python 环境。
3. **方法三**:无需本地处理,但依赖网络连接和第三方服务稳定性。

根据你的实际需求选择合适的方法,若遇到具体问题可进一步提供细节进行调试。
回复

使用道具 举报

结帖率:88% (116/132)

签到天数: 3 天

地板
 楼主| 发表于 2025-6-15 13:57:19 | 只看该作者   贵州省贵阳市
小李哥v5 发表于 2025-6-15 04:11
试试这个https://convertio.co/zh/  ,另外这玩意有API能直接在线转换

谢谢,但是想找本地转换的,
回复

使用道具 举报

结帖率:85% (101/119)

签到天数: 5 天

地下
发表于 2025-6-15 15:26:51 高大上手机用户 | 只看该作者   安徽省滁州市
acg2308502323 发表于 2025-6-15 13:57
谢谢,但是想找本地转换的,

好像写过,忘记是dll还是exe了,你可以找找转换的exe
回复

使用道具 举报

结帖率:88% (116/132)

签到天数: 3 天

6
 楼主| 发表于 2025-6-15 16:22:41 | 只看该作者   贵州省贵阳市
咸鱼666 发表于 2025-6-15 15:26
好像写过,忘记是dll还是exe了,你可以找找转换的exe

论坛里的试了几个,只能转换静态的webp格式的,动态的转换不了
回复

使用道具 举报

结帖率:85% (101/119)

签到天数: 5 天

7
发表于 2025-6-15 16:26:28 | 只看该作者   安徽省滁州市
acg2308502323 发表于 2025-6-15 16:22
论坛里的试了几个,只能转换静态的webp格式的,动态的转换不了

你可以传个试试
回复

使用道具 举报

结帖率:88% (116/132)

签到天数: 3 天

8
 楼主| 发表于 2025-6-17 22:30:04 | 只看该作者   贵州省贵阳市

试过了,比如这个动态图的就不行:https://p4.a.yximgs.com/upic/2023/05/25/12/BMjAyMzA1MjUxMjUyMTFfMzI4OTcwMDU4OV8xMDM5MDMwMTcyMTRfMV8z_animatedV5_B47dcba89e56bad3d029b6a25ca9210e3.webp
回复

使用道具 举报

结帖率:85% (101/119)

签到天数: 5 天

9
发表于 2025-6-17 23:35:59 | 只看该作者   安徽省滁州市
回复

使用道具 举报

结帖率:88% (116/132)

签到天数: 3 天

10
 楼主| 发表于 2025-6-17 23:42:14 | 只看该作者   贵州省贵阳市
咸鱼666 发表于 2025-6-17 23:35
@acg2308502323 直接转的png

用的哪个源码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表