觅风论坛

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

作者: fg6969j    时间: 2024-8-29 14:52
标题: 任意图片转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,以防止重复释放
    }
}


QQ截图20240829151247.jpg



作者: 你大爷    时间: 2024-8-31 14:43
的法国风格化规范化
作者: 啦啦啦啦啦啦    时间: 2024-9-2 14:35
感谢您的无私精神...
作者: yu2353173832    时间: 2024-9-4 14:27
路过还不错
作者: 你大爷    时间: 2024-9-6 14:19
看帖子的要发表下看法
作者: 1225061801    时间: 2024-9-8 14:11
碉堡了!
作者: a123354    时间: 2024-9-10 23:30
回复查看隐藏内容
作者: 的含税单价    时间: 2024-9-13 08:49
豆腐干士大夫
作者: xiaojian    时间: 2024-9-15 18:08
看看,到底好不好,想学学看看
作者: 毛泽东    时间: 2024-9-18 03:27
还是看不懂,复杂
作者: sdajhdjannda    时间: 2024-9-20 12:45
顶起  很好的帖




欢迎光临 觅风论坛 (https://www.eyyba.com/) Powered by Discuz! X3.4