ImageProcessorCore:尝试对图像重新采样导致零长度响应

ImageProcessorCore: Attempt to resample image results in zero-length response

我正在尝试将 JPG 图像从 300dpi 重采样到 150dpi,然后我得到了一个零长度文件。

控制器的动作结果:

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;
}

我想我最好在这里回答,因为我们已经在问题跟踪器上处理过它。

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

顺便提一下,有些重载允许保存为 jpeg,而无需创建您自己的 JpegEncoder 实例。

image.SaveAsJpeg(outputStream);