使用SVG,C#Magick.Net“没有这种图像格式的解码代理”

时间:2014-09-16 19:42:45

标签: c# svg imagemagick magick.net

我安装了ImageMagick-6.8.9-Q16,可以成功运行convert test.svg test.pdf并获得有效的pdf输出。

在我的项目中,我安装了Magick.NET-Q16-x86版本7.0.0.003,我可以使用它成功转换其他格式。

但是,当我运行以下代码时,我得到一个“iisexpress.exe:此图像格式没有解码委托”错误:

using (var image = new MagickImage(File.OpenRead("C:\\Temp\\SvgToPdf\\test.svg"))) //error here
{
    image.Format = MagickFormat.Pdf;
    image.Write("C:\\Temp\\SvgToPdf\\test.pdf");
}

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

废话......你不知道我会在发布后的几分钟内搞清楚......这就是为什么我不会问很多问题!

无论如何,对于那些想知道,问题是使用File.OpenRead打开文件(可能没有FileStream中的所有必要信息)。将我的代码更改为有效:

using (var image = new MagickImage("C:\\Temp\\SvgToPdf\\test.svg"))
{
    image.Format = MagickFormat.Pdf;
    image.Write("C:\\Temp\\SvgToPdf\\test.pdf");
}

感谢dlemstra替代解决方案 需要使用Stream

var readSettings = new MagickReadSettings() { Format = MagickFormat.Svg };
var image = new MagickImage(svgStream, readSettings);

答案 1 :(得分:2)

Ufff,我有类似的问题。 Magick.NET抛出" ImageMagick。 MagickMissingDelegateErrorException "从Stream创建 MagickImage 对象时出现错误消息,例如" 此图像格式无解码委托`' @ error / blob.c / CustomStreamToImage / 761 "。 当我将Stream保存到文件中时,图片绝对可以。

...经过近2天的调试/尝试我认识到,同一个Stream的这个错误有时会抛出,有时候不会...... - >问题出在Stream状态。在创建MagickImage之前,必须先寻求开始!也许这是ImageMagick中的错误,因为......: - /

    public ResizedImageWithMetadata GetResizedImageWithMetadata(Stream content,..)
        {
            try
            {
                if (content == null)
                {
                    throw new ArgumentNullException($"Image content is empty!");
                }
                using (MagickImage image = new MagickImage(content))
                {
// unexpected exception...

正确:

public ResizedImageWithMetadata GetResizedImageWithMetadata(Stream content,..)
    {
        try
        {
            if (content == null)
            {
                throw new ArgumentNullException($"Image content is empty!");
            }
            content.Seek(0, SeekOrigin.Begin); //THIS IS NEEDED!!!
            using (MagickImage image = new MagickImage(content))
            {