我读了与此类似的其他问题/答案,但他们要么:
在我的例子中,我有一个缓冲区(在这个例子中,是一个unsigned char *),它包含一个jpeg。这意味着它看起来像:
FF D8 FF E0 ...
而不是
my_image.jpg
我想找到一个可以调整此jpeg大小并将输出放在另一个缓冲区中的库。
示例:
SuperLibrary::resize_jpeg(jpeg_buffer, resized_jpeg_buffer, 640, 480);
甚至:
SuperLibrary::Image my_jpeg = SuperLibray::Image(jpeg_buffer);
my_jpeg.resize(640,480);
my_jpeg.write(resized_jpeg_buffer);
另外,我想要一些非常简单的东西。 CImg最初看起来很完美,但它只能从文件中加载/保存jpeg。 (所以,请不要使用openCV,除非你能证明我可以在不到一周的时间内通过CVMatrix上的文档来调整我的jpeg大小)
答案 0 :(得分:0)
ImageMagick
(更具体地说,Magick++
绑定到它)将执行此操作。有一些API文档here。如何执行此操作的示例(请注意,我还没有编译这个来检查,因此可能存在错误):
#include <Magick++.h>
#include <iostream>
using namespace Magick;
int main(int argc,char **argv)
{
InitializeMagick(*argv);
unsigned char* img_data;
//Fill in img_data
Blob b(img_data, image_data_len);
Image img(b);
img.resize("640x480");
Blob resized;
master.write(resized);
unsigned char* img_data_resized = new unsigned_char[resized.length()];
std::copy(resized.data(), resized.data() + resized.length(), img_data_resized);
//Do whatever you want with resized image data...
delete[] img_data_resized;
return 0;
}