.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); }
看一下效果对比:
压缩后:
提升效果明显,但丢失了一些细节,细节可以用浏览原图解决。