Magick.NET转换原始图像

时间:2015-08-24 11:07:33

标签: c# asp.net asp.net-mvc file-upload magick.net

我使用Magick.NET来处理文件。现在我需要将原始图像格式(例如.dng,.3fr,.cr2,.raw,.ptx等)转换为简单的jpg,以便在网站上生成预览。我在文档here中找到了示例 但它不起作用。我把dcraw.exe放到了Magick.NET dll中,但此刻总是出错:

//code
using (var originalImg = new MagickImage(abspath))...
//text of error
InnerException = {"iisexpress.exe: FailedToExecuteCommand `dcraw.exe -6 -w -O \"C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-29445L9OLy_DVIQq.ppm\" \"C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-294458yvxz2HRaYX\"' (-1) @ error/delegate.c/ExternalDelegateCommand/484"}
Message = "iisexpress.exe: UnableToOpenBlob 'C:/Users/A8F50~1.CHE/AppData/Local/Temp/magick-29445L9OLy_DVIQq.ppm': No such file or directory @ error/blob.c/OpenBlob/2684"

有人遇到过这样的问题吗?我不知道为什么会这样。我浪费了很多时间,如果你能解决这个问题我会很高兴

2 个答案:

答案 0 :(得分:2)

你必须使用FileStream对象而不是文件路径......这对我有用。

试试这个:

FileStream fileStream = new FileStream(@"C:\QRcodes\IMG_9540.CR2", FileMode.Open);

        using (MagickImage magickImage = new MagickImage(fileStream))
        {
            byte[] imageBytes = magickImage.ToByteArray();

            Console.WriteLine("bytes in image: " + imageBytes.Length);
            Console.ReadKey();
        }

问候 马库斯

答案 1 :(得分:0)

这与文件流或实际物理路径无关。你可以使用物理路径调用MagickImage构造函数。您收到的问题和错误消息是您的代码无法找到该文件。这可能是因为您传递了文件地址的权限或方式或任何阻止您的代码到达文件的内容。 另外一件事:将MagickImage转换为ByteArray是非常耗时的,并且在系统中是繁重的过程。如果您尝试20000像素的图像,您将看到结果。