ASP.NET Core 3.1 MVC免费可靠的图片压缩及缩略图生成方案咨询
在ASP.NET Core 3.1 MVC中实现图片压缩与缩略图的免费可靠方案
你遇到的System.Drawing.Common is not supported on this platform异常,是因为该组件在.NET Core 3.1及以上版本的非Windows平台(如Linux、macOS)已不再被官方支持。以下是两个跨平台、免费开源的替代方案:
1. ImageSharp
这是.NET生态下专为跨平台设计的高性能图像处理库,维护活跃,支持jpg、png等主流格式。
安装方式
通过NuGet安装:
Install-Package SixLabors.ImageSharp Install-Package SixLabors.ImageSharp.Drawing
压缩并生成缩略图示例代码
using SixLabors.ImageSharp; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Formats.Png; using SixLabors.ImageSharp.Processing; public void ProcessImage(string inputPath, string outputThumbPath, int targetWidth, int quality = 70) { using (var image = Image.Load(inputPath)) { // 计算等比例缩放后的高度 var targetHeight = (int)((double)image.Height / image.Width * targetWidth); // 生成缩略图 image.Mutate(x => x.Resize(targetWidth, targetHeight)); // 根据原格式选择编码器并设置参数 if (inputPath.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)) { var jpegEncoder = new JpegEncoder { Quality = quality }; image.Save(outputThumbPath, jpegEncoder); } else if (inputPath.EndsWith(".png", StringComparison.OrdinalIgnoreCase)) { var pngEncoder = new PngEncoder { CompressionLevel = PngCompressionLevel.Level6 }; image.Save(outputThumbPath, pngEncoder); } } }
2. SkiaSharp
基于Google Skia图形引擎的.NET绑定库,跨平台支持完善,性能优异。
安装方式
通过NuGet安装:
Install-Package SkiaSharp Install-Package SkiaSharp.NativeAssets.Linux // Linux环境需额外安装
压缩并生成缩略图示例代码
using SkiaSharp; public void ProcessImageWithSkia(string inputPath, string outputThumbPath, int targetWidth, int quality = 70) { using (var inputStream = File.OpenRead(inputPath)) using (var originalBitmap = SKBitmap.Decode(inputStream)) { // 计算等比例缩放后的高度 var targetHeight = (int)((double)originalBitmap.Height / originalBitmap.Width * targetWidth); // 创建缩略图Bitmap using (var resizedBitmap = originalBitmap.Resize(new SKImageInfo(targetWidth, targetHeight), SKFilterQuality.High)) using (var image = SKImage.FromBitmap(resizedBitmap)) using (var outputStream = File.OpenWrite(outputThumbPath)) { // 根据原格式选择编码格式 var format = inputPath.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase) ? SKEncodedImageFormat.Jpeg : SKEncodedImageFormat.Png; // 编码并保存 image.Encode(format, quality).SaveTo(outputStream); } } }
这两个库都能完美替代System.Drawing.Common的图片处理能力,在Windows、Linux、macOS平台均能稳定运行,满足压缩图片和生成缩略图的需求。
内容的提问来源于stack exchange,提问作者Mishaka
相关产品推荐
相关产品推荐

