如何使用MagickNet从流中读取SVG文件

时间:2016-11-22 16:15:42

标签: svg imagemagick magicknet

我的应用程序允许用户上传图像并将其发送到服务,然后服务将其转换为另一种格式并将其发回。我们正在添加对SVG文件格式的支持,我遇到了从字节数组中读取文件的问题。

问题在于,当我使用SVG Stream对象初始化MagickImageInfo对象时,我收到此错误:

“此图像格式没有解码代理”'@ error / blob.c / BlobToImage / 355“

我玩了它并且能够通过这个错误,如果我改为创建一个MagickImage对象并为其提供一个MagickReadSettings实例,我将Format设置为SVG。

核心问题是MagickImage代码需要提示它是什么样的文件,当它是SVG时。对于其他文件类型,它似乎能够推断它是什么类型的文件。但是,虽然我能够以文件的格式提供MagickImage类,但是MagickImageInfo类没有任何参数可以提示它来提示文件类型。

一种可能的解决方案是将文件写入磁盘,然后让MagickImageInfo类从磁盘读取文件,但我真的不想这样做,因为它增加了服务的复杂性并使其依赖于磁盘写访问权限

相关代码:

工作代码:

var readSettings = new MagickReadSettings() { Format = MagickFormat.Svg };
using (MagickImage image = new MagickImage(stream, readSettings))
{
    image.Write("C:\test"); // Actual code doesn't write to disk
}

不工作代码:

MagickImageInfo info = new MagickImageInfo(stream);

1 个答案:

答案 0 :(得分:2)

您似乎找到了丢失的功能。我在这里找到了你的帖子并为MagickImageInfo构造函数添加了额外的重载。以下内容将在Magick.NET 7.0.3.9及更高版本中提供:

var readSettings = new MagickReadSettings() { Format = MagickFormat.Svg };
MagickImageInfo info = new MagickImageInfo(stream, readSettings);

下次可以随时打开问题:https://github.com/dlemstra/Magick.NET或此处:https://magick.codeplex.com/discussions