我安装了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");
}
有什么想法吗?
答案 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))
{