2016-07-26 109 views
1

我想从300dpi重新采样JPG图像到150dpi,并获取一个零长度的文件。ImageProcessorCore:尝试重新采样图像结果为零长度响应

控制器的的ActionResult:

public ActionResult ViewImage(string file, int dpi = 300, bool log = true) 
{ 
    FileExtensions fileExtensions = new FileExtensions(); 
    ImageExtensions imageExtensions = new ImageExtensions(); 

    FileModel fileModel = fileExtensions.GetFileModel(file); 
    string contentType = fileModel.FileType; 
    byte[] fileData = fileModel.FileData; 
    string fileName = Path.GetFileNameWithoutExtension(fileModel.FileName) + "_" + dpi + "DPI" + Path.GetExtension(fileModel.FileName); 
    FileStreamResult resampledImage = imageExtensions.ResampleImage(fileData, contentType, dpi); 
    resampledImage.FileDownloadName = fileName; 
    return resampledImage; 
} 

ResampleImage方法:

public FileStreamResult ResampleImage(byte[] fileData, string contentType, int targetDPI) 
{ 
    MemoryStream outputStream = new MemoryStream(); 
    using (Stream sourceStream = new MemoryStream(fileData)) 
    { 
     Image image = new Image(sourceStream); 
     image.HorizontalResolution = targetDPI; 
     image.VerticalResolution = targetDPI; 
     JpegEncoder jpegEncoder = new JpegEncoder(); 
     jpegEncoder.Quality = 100; 
     image.Save(outputStream, jpegEncoder); 
    }   
    FileStreamResult file = new FileStreamResult(outputStream, contentType); 
    return file; 
} 

回答

1

,我想我最好的答案在这里,因为我们已经在这个问题上跟踪处理它。

ImageProcessorCore目前(2016-08-03)是alpha软件,因此未完成。当你遇到问题时,水平和垂直分辨率在JPEG图像中不可设置。现在解决了。

顺便说一句,有重载,可以保存为JPEG而无需创建自己的JpegEncoder实例。

image.SaveAsJpeg(outputStream);