【问题标题】:Imagemagick c api : How to read png image frmaes from gif file , what calls to useImagemagick c api:如何从 gif 文件中读取 png 图像帧,使用什么调用
【发布时间】:2020-01-10 15:07:54
【问题描述】:

所以我使用 MagickCoalesceImages 调用从 5 个 png 文件创建了 gif 文件并将其存储在磁盘上。 如何从 gif 文件中读取这些文件? MagickReadImage 没有帮助

【问题讨论】:

  • 请向我们提供您使用的代码。没有它,其他用户无法帮助您。

标签: imagemagick gif coalesce c-api


【解决方案1】:

如果没有看到代码很难提供帮助,但我可以假设您创建了 5 张图片,类似...

MagickWand
  * gif2png;

gif2png = NewMagickWand();
MagickReadImage(gif2png, "input.gif");
MagickWriteImages(gif2png, "output_%02d.png", MagickFalse);
gif2png = DestroyMagickWand(gif2png);

如何从 gif 文件中读取这些文件?

您可以使用MagickReadImage 对文件中的图像进行解码,并使用MagickAddImage 将解码后的图像附加到图像堆栈中。

MagickWand
  * png2gif,
  * temp;

// Create a blank image-stack.
png2gif = NewMagickWand();
char filename[PATH_MAX];  // PATH_MAX provided by limits.h

// Iterate over images to append.
for (int i = 0; i < 5; ++i) {
  sprintf(filename, "output_%02d.png", i);
  // Read image from disk.
  temp = NewMagickWand();
  MagickReadImage(temp, filename);
  // Add "frame" to stack.
  MagickAddImage(png2gif, temp);
  temp = DestroyMagickWand(temp);
}
MagickWriteImages(png2gif, "output.gif", MagickTrue);
png2gif = DestroyMagickWand(png2gif);

警告:上面的例子省略了基本的错误处理,并假设文件名是一个连续的系列。


更新

从 cmets 中,如果您希望将单个帧提取为 PNG 文件,有几种方法。

最快的方法是使用MagickWriteImages

MagickWriteImages(img, "output_%02d.png", MagickFalse);

或者使用图像堆栈迭代器。

for (MagickSetFirstIterator(img); MagickHasNextImage(img); MagickNextImage(img)) {
  MagickWriteImage(img, "output_%02d.png");
}

或者,如果定义了 PNG 文件名,并且您需要映射它们。

const char * filenames[5] = {
  "first.png",
  "second.png",
  "third.png",
  "forth.png",
  "fifth.png"
};
for (int i = 0; i < 5; ++i) {
  MagickSetIteratorIndex(img, i);
  MagickWriteImage(img, filenames[i]);
}

没有看到代码,我们无法提供太多帮助,只能猜测可接受的解决方案是什么。

【讨论】:

  • 我想要反之亦然,我已经创建了 gif 文件,想再次读取 5 个 png 文件,我想提取 gif 文件并存储 5 个不同的帧(png 文件)
  • 请查看评论@emcconville
猜你喜欢
  • 1970-01-01
  • 2021-01-06
  • 2019-01-20
  • 2021-11-19
  • 1970-01-01
  • 2014-05-25
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多