1

我正在尝试将 JPG 图像从 300dpi 重新采样到 150dpi 并返回一个零长度文件。

控制器的 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;
}

重采样图像方法:

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

1 回答 1

1

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

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

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

image.SaveAsJpeg(outputStream);
于 2016-08-03T06:32:33.290 回答