stb_image实现gif转jpg
#define STB_IMAGE_IMPLEMENTATION
#include "stb_image.h"
#define STB_IMAGE_WRITE_IMPLEMENTATION
#include "stb_image_write.h"
#include <fstream>
#include <memory>
using namespace std;
void* file_read_data(const char* path, int* size) {
// 打开文件
ifstream fin(path, ios::binary);
if (!fin) {
return nullptr;
}
// 获取长度
fin.seekg(0, ios::end);
*size = fin.tellg();
if (!*size) {
return nullptr;
}
// 获取内容并返回
fin.seekg(0, ios::beg);
void* buff = malloc(*size);
fin.read((char*)buff, *size);
return buff;
}
int main(int argc, char* argv[]) {
if (argc < 3) {
return -1;
}
int size;
void* buff = file_read_data(argv[1], &size);
if (!buff) {
return -2;
}
int w, h;
int frame_cnt;
unique_ptr<stbi_uc[]> data(stbi_load_gif_from_memory((const stbi_uc*)buff, size, NULL, &w, &h, &frame_cnt, NULL, 3));
free(buff);
if (!data) {
return -3;
}
printf("w = %d, h = %d, frame_cnt = %d\n", w, h, frame_cnt);
if (!w || !h || !frame_cnt) {
return -4;
}
char path[1024];
sprintf(path, "mkdir -p %s\n", argv[2]);
system(path);
size = w*h*3;
for (int i = 0; i < frame_cnt; i++) {
void* p = &data[size*i];
snprintf(path, 1024, "%s/%03d.jpg", argv[2], (i+1));
stbi_write_jpg(path, w, h, 3, p, 70);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】