2016-07-26 19 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);