我安装了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))
{