精易论坛

标题: 任意图片转WEBP格式 源码分享 支出多线程 [打印本页]

作者: 青春的思念    时间: 2024-8-27 23:36
标题: 任意图片转WEBP格式 源码分享 支出多线程





WEBP的压缩比例公认的牛,我这边现在远程协议用的就是这个压缩传输推送到WEB

調用方法簡單,直接传递图片字节集进去,然后返回压缩后的字节集。相比网上调用的DLL都是压缩到本地 这个好用多了,模块我写了两种方法 一个是直接DLL调用 一个是内存加载,内存加载的调用了凌哥的内存加载提取版 可以自行替换其他的




这是DLL的C++代码。 看得懂的自己改 看不懂的直接忽略

#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#include "webp/encode.h"

// input_image 传入的图片数据
// input_size 传入的图片大小
// processed_data 返回处理过的数据 易语言里面调用需要传址
// processed_size 返回处理过图片大小
// Image_quality 图片质量
bool __stdcall SaveImageAsWebp(const char* input_image, size_t input_size, char** processed_data, size_t* processed_size, int Image_quality) {
    int width, height, channels;
    // 使用stb_image从字节数组中加载图像
    unsigned char* img_data = stbi_load_from_memory(reinterpret_cast<const uint8_t*>(input_image), static_cast<int>(input_size), &width, &height, &channels, 4);
    if (img_data == nullptr) {
       // std::cerr << "内存加载图像出错." << std::endl;
        return false;
    }

    // 编码图像为WEBP格式
    unsigned char* webp_data = nullptr;
    *processed_size = WebPEncodeRGBA(img_data, width, height, width * 4, Image_quality, &webp_data);
    if (*processed_size == 0) {
       // std::cerr << "将图像编码为WEBP格式时出错." << std::endl;
        stbi_image_free(img_data);
        return false;
    }

    // 将编码后的数据分配给processed_data
    *processed_data = reinterpret_cast<char*>(webp_data);



    // 释放img_data资源
    stbi_image_free(img_data);

    return true;
}

// 调用方在使用完processed_data后需要调用这个函数来释放资源
void __stdcall FreeWebpData(unsigned char** data) {
    if (data && *data) {
        free(*data);
        *data = nullptr; // 将指针设为nullptr,以防止重复释放
    }
}








Release.zip

653.18 KB, 下载次数: 121, 下载积分: 精币 -2 枚


作者: 青春的思念    时间: 2024-8-27 23:38
如果有单子可以联系我,我技术有限但是一些简单的单子还是可以开发的,价格不贵 感谢啦
作者: kiss0459    时间: 2024-8-28 00:00
任意图片转WEBP格式  源码分享 支出多线程
作者: weihua2018    时间: 2024-8-28 00:46
这个格式的图片  干嘛的
作者: 查过    时间: 2024-8-28 07:09
已经顶贴,感谢您对论坛的支持!
作者: 我的yyy123    时间: 2024-8-28 08:01
看看看看,不会
作者: xmtian    时间: 2024-8-28 08:31
感谢分享。
作者: Fate    时间: 2024-8-28 08:39
远程协议不应该用屏幕差异吗
作者: 爱易编程    时间: 2024-8-28 08:45
记录下,这个不错
作者: maozaiba    时间: 2024-8-28 09:04
如何反对来互转呢?
作者: 一指温柔    时间: 2024-8-28 09:06
感谢分享
作者: ctry78985    时间: 2024-8-28 09:53
感谢分享
作者: 吃柠檬的包子    时间: 2024-8-28 11:09
很不错 转出WEBP格式一般在什么地方使用
作者: renhe2018    时间: 2024-8-28 12:19
看上去很赞啊。
作者: jysoft2022    时间: 2024-8-28 14:25
谢谢分享
作者: 胖子葛格    时间: 2024-8-28 14:50
感谢大神分享~!
作者: 曦月    时间: 2024-8-28 20:04
之前用到webp转其他格式,又学到了
作者: 杰西卡技术传媒    时间: 2024-8-28 20:31
感谢大神分享~!
作者: 亿万    时间: 2024-8-28 21:22

感谢分享
作者: 396384183    时间: 2024-8-29 02:13

支持开源,感谢分享
作者: 一指温柔    时间: 2024-8-29 09:01
感谢分享,很给力!~
作者: please    时间: 2024-8-29 09:36
感谢分享,支持开源!!!
作者: 56766876    时间: 2024-8-29 11:14
多多益善
作者: 小虎来了    时间: 2024-8-29 12:09
感谢分享,很给力!~
作者: 一指温柔    时间: 2024-8-30 08:37
感谢分享
作者: happyweeks365    时间: 2024-8-30 09:58
666666666666666666666
作者: bianyuan456    时间: 2024-8-31 00:01
已经顶贴,感谢您对论坛的支持!
作者: 光影魔术    时间: 2024-9-2 14:11
感谢分享源码
作者: idmyl    时间: 2024-9-2 16:53
谢谢分享,学习一下
作者: oursn    时间: 2024-9-12 01:25
感谢分享
作者: 忆初    时间: 2024-9-12 11:06
感谢分享,支持开源!!!
作者: li6607    时间: 2024-9-28 06:23
青春的思念 发表于 2024-8-27 23:38
如果有单子可以联系我,我技术有限但是一些简单的单子还是可以开发的,价格不贵 感谢啦 ...

大佬,我测试有bug,用内存加载dll方式转出来的图是镜像的,是啥原因呢
作者: 青春的思念    时间: 2024-9-28 23:11
li6607 发表于 2024-9-28 06:23
大佬,我测试有bug,用内存加载dll方式转出来的图是镜像的,是啥原因呢

可能是我DLL加壳的关系吧 下个版本我改下看看
作者: li6607    时间: 2024-9-29 23:50
青春的思念 发表于 2024-9-28 23:11
可能是我DLL加壳的关系吧 下个版本我改下看看

谢谢大佬!
作者: seasideinic    时间: 2024-10-11 00:23
感谢分享。。。。。。。。。。
作者: 1184798949    时间: 2024-10-21 17:53
感谢分享
作者: OUYB    时间: 2024-11-8 21:31
666啊兄弟
作者: futiem    时间: 2024-11-20 08:38
任意图片转WEBP格式
作者: dulang    时间: 2024-11-26 12:05
支持开源~!感谢分享
作者: 熊不熊    时间: 2024-12-4 15:55
感谢分享,很给力!~
作者: 515667395    时间: 2024-12-31 15:08
看看多谢分享
作者: wmv520    时间: 2025-1-1 01:11
        支持开源~!感谢分享
作者: gqohui455    时间: 2025-1-4 22:12
支持开源~!感谢分享
作者: XJxaiojing    时间: 2025-1-5 01:04
666666666666666
作者: li6607    时间: 2025-1-12 16:42
青春的思念 发表于 2024-9-28 23:11
可能是我DLL加壳的关系吧 下个版本我改下看看

大佬,有新版本发布吗?或者发我dll我二开一下
作者: qq102030    时间: 2025-7-6 12:57
意思一下




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4