.NET 使用SixLabors.ImageSharp对图片进行压缩,可以进行质量压缩,与图片大小裁剪压缩,可大幅度节约流量与提高加载速度。
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Processing;
private async Task<MemoryStream> UploadFileAsync(IFormFile file)
{
// 检查文件是否为图片
if (IsImage(file))
{
if (file.Length > 1024 * 1024) // 如果文件大于1MB
{
using var stream = new MemoryStream();
await file.CopyToAsync(stream);
stream.Position = 0;
using var image = await Image.LoadAsync(stream);
var jpegEncoder = new JpegEncoder { Quality = 70 }; // 设置JPEG质量
var outputStream = new MemoryStream();
image.Mutate(x => x.Resize(image.Width / 2, image.Height / 2)); // 调整尺寸
await image.SaveAsync(outputStream, jpegEncoder);
outputStream.Position = 0;
return outputStream;
}
else
{
// 如果图片小于或等于1MB,则直接返回原始数据
var stream = new MemoryStream();
await file.CopyToAsync(stream);
stream.Position = 0;
return stream;
}
}
else
{
// 如果不是图片,直接保存
var stream = new MemoryStream();
await file.CopyToAsync(stream);
return stream;
}
}检测是否是图片格式:
private bool IsImage(IFormFile file)
{
// 简单检查文件扩展名来判断是否为图片
var validExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" };
var extension = Path.GetExtension(file.FileName).ToLowerInvariant();
return validExtensions.Contains(extension);
}看一下效果对比:

压缩后:

提升效果明显,但丢失了一些细节,细节可以用浏览原图解决。