注意:MagickReadImageBlob() 引发的问题

今天发现:

如果之前的 mw 已加载了具体的图片数据后,再对这个 mw 进行:

MagickReadImageBlob(mw, data, dataLen)

程序运行发生了崩溃。

最后找到原因: MagickReadImageBlob() -> 读取图像或图像序列。 图像仅在当前图像指针位置之前插入。

可通过下面的代码进行验证:

MagickReadImageBlob(mw, data, dataLen);
MagickReadImageBlob(mw, data, dataLen);

MagickResetIterator(mw);
while(MagickHasNextImage(mw))
{
printf("MagickNextImage(mw):%d\n", MagickNextImage(mw));
}

--------------------------------------------------------------

看来正确的做法:

mw = NewMagickWand();
MagickReadImageBlob(mw, data, dataLen);

或:

ClearMagickWand(mw); //先清除之前的

MagickReadImageBlob(mw, data, dataLen);

---------------------------------------------------------------

一切的根源在于: 

https://imagemagick.org/api/magick-image.php#MagickReadImageBlob

MagickReadImageBlob(): reads an image or image sequence from a blob. In all other respects it is like MagickReadImage().

 

https://imagemagick.org/api/magick-image.php#MagickReadImage

MagickReadImage():

MagickReadImage() reads an image or image sequence. The images are inserted jjust before the current image pointer position.

Use MagickSetFirstIterator(), to insert new images before all the current images in the wand, MagickSetLastIterator() to append add to the end, MagickSetIteratorIndex() to place images just after the given index.

MagickReadImage()读取图像或图像序列。 图像仅在当前图像指针位置之前插入。

使用MagickSetFirstIterator()将新图像插入到魔杖中的所有当前图像之前,将MagickSetLastIterator()附加到末尾,然后将MagickSetIteratorIndex()插入到给定索引之后。

 

https://imagemagick.org/api/magick-wand.php#ClearMagickWand

ClearMagickWand() clears resources associated with the wand, leaving the wand blank, and ready to be used for a new set of images.

posted @ 2019-12-21 14:45  personnel  阅读(685)  评论(0编辑  收藏  举报
友情链接:图片批量处理工具 gif动态图制作工具 制作电子相册 图片排版工具 制作淘宝主图视频 MKScript 鼠标键盘自动化脚本语言