3

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

有任何想法吗?

4

2 回答 2

3

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

无论如何,对于那些想知道的人来说,问题在于使用打开文件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);
于 2014-09-16T19:49:23.113 回答
3

Ufff,我有类似的问题。Magick.NET在从 Stream 创建MagickImage对象时抛出“ImageMagick.MagickMissingDelegateErrorException ”,带有错误消息,例如“ no decode delegate for this image format `'@error/blob.c/CustomStreamToImage/761 ”。当我将 Stream 保存到文件中时,图片绝对没问题..

...经过将近 2 天的调试/尝试后,我认识到,有时会抛出相同 Stream 的错误,有时不会... -> 问题处于 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))
            {
于 2017-12-13T14:08:36.170 回答