使用 Magick Wand 从图像中获取二进制数据 API
Get binary data from image using Magick Wand API
我正在尝试获取二进制数据中的图像,以便我可以对其进行 base64 编码。我正在使用魔法棒 API 的 MagickGetImageBlob()
但我收到的 Blob 不包含全部信息。
我的代码如下。 opt
和 enc
是两个结构体,分别包含用户提供的参数和编码信息。我用来在 base64 中编码的库是 this。
void WriteImg(UserDefinedOptions *options, MyStruct *enc, char *format){
MagickWand *wand;
char *outputPath;
unsigned char *buffer = malloc(sizeof(char)*1000);
size_t length;
int flen;
MagickWandGenesis();
wand = NewMagickWand();
MagickConstituteImage(wand, enc->image->width, enc->image->height,
"RGB", CharPixel, enc->image->pxl);
MagickSetImageResolution(wand, (double) options->dpi, (double) options->dpi);
MagickSetImageUnits(wand, PixelsPerInchResolution);
MagickSetImageFormat(wand, format);
outputPath = (options->outputPath == NULL) ? "-" : options->outputPath;
MagickWriteImage(wand, outputPath); // This works and generates correct image
buffer = MagickGetImageBlob(wand, &length); // Incomplete binary data
/* Encode base64 */
encbuffer = base64(buffer, strlen((const char *)buffer), &flen);
printf("Base64:%s\n", encbuffer);
CleanupMagick(&wand, DmtxFalse);
MagickWandTerminus();
}
我做错了什么?有没有更好的方法来使用魔术棒从图像中获取base64编码的字符串?
base64()
的第二个参数应该是 length
,而不是 strlen()
的 return 值。
/* Encode base64 */
encbuffer = base64(buffer, length, &flen);
我正在尝试获取二进制数据中的图像,以便我可以对其进行 base64 编码。我正在使用魔法棒 API 的 MagickGetImageBlob()
但我收到的 Blob 不包含全部信息。
我的代码如下。 opt
和 enc
是两个结构体,分别包含用户提供的参数和编码信息。我用来在 base64 中编码的库是 this。
void WriteImg(UserDefinedOptions *options, MyStruct *enc, char *format){
MagickWand *wand;
char *outputPath;
unsigned char *buffer = malloc(sizeof(char)*1000);
size_t length;
int flen;
MagickWandGenesis();
wand = NewMagickWand();
MagickConstituteImage(wand, enc->image->width, enc->image->height,
"RGB", CharPixel, enc->image->pxl);
MagickSetImageResolution(wand, (double) options->dpi, (double) options->dpi);
MagickSetImageUnits(wand, PixelsPerInchResolution);
MagickSetImageFormat(wand, format);
outputPath = (options->outputPath == NULL) ? "-" : options->outputPath;
MagickWriteImage(wand, outputPath); // This works and generates correct image
buffer = MagickGetImageBlob(wand, &length); // Incomplete binary data
/* Encode base64 */
encbuffer = base64(buffer, strlen((const char *)buffer), &flen);
printf("Base64:%s\n", encbuffer);
CleanupMagick(&wand, DmtxFalse);
MagickWandTerminus();
}
我做错了什么?有没有更好的方法来使用魔术棒从图像中获取base64编码的字符串?
base64()
的第二个参数应该是 length
,而不是 strlen()
的 return 值。
/* Encode base64 */
encbuffer = base64(buffer, length, &flen);