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);
我正在尝试将 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);