部署项目的时候偶尔会遇到这类需求,不能使用OpenCV之类的库来读写图片,比如需要部署到嵌入式环境之类的。网上找了一阵,发现对于jpeg的读写,这两个库很方便。
一个是NanoJPEG,有人做了一个C++版本。用来读jpeg文件。另一个是TinyJPEG,用来输出到文件。
都是header-only,只需要include头文件就可以用了。也没有标准库以外的依赖。
写了一个例子放在这里: Example-HeaderOnly-JPEG
vector<uint8_t> image; int width, height; if (load_jpg_data(argv[1], image, width, height)) { cout << "size " << width << " x " << height << endl; vector<uint8_t> rotated_image(height*width*3); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { rotated_image[x*height*3+y*3+0] = image[y*width*3+x*3+0]; rotated_image[x*height*3+y*3+1] = image[y*width*3+x*3+1]; rotated_image[x*height*3+y*3+2] = image[y*width*3+x*3+2]; } } tje_encode_to_file(argv[2], height, width, 3, rotated_image.data()); } else { cout << "Failed to open file " << argv[1] << endl; }