使用 SVG 的 C# Magick.Net "no decode delegate for this image format"



我安装了ImageMagick6.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");
}

有什么想法吗?

Crap。。。你不知道吗?我会在发布后几分钟内解决。。。这就是为什么我不会问很多问题!

无论如何,对于那些想知道的人来说,问题是使用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);

Ufff,我也遇到过类似的问题。在从Stream创建MagickImage对象时,Magick.NET抛出"ImageMagick.MagickMissingDelegateErrorException",并显示错误消息,如"此图像格式`'@error/bob.c/CustomStreamToImage/761没有解码委托"。当我把流保存到文件中时,图片是绝对可以的。

经过近2天的调试/尝试,我意识到,同一Stream的这个错误有时会抛出,有时不会。。。->问题处于流状态。在创建MagickImage之前,它必须从Seek开始!!也许这是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))
            {

相关内容

  • 没有找到相关文章

最新更新