寻找相同的解决方案,我在微软的MSDN官方博客中找到了。
CoreCompat.System.Drawing
如果您有依赖System.Drawing 的现有代码,那么使用这个库显然是您通往.NET Core 和跨平台幸福的最快途径:性能和质量都很好,API 完全一样。内置的 System.Drawing API 是使用 .NET Framework 处理图像的最简单方法,但它们依赖于 Windows 的 GDI+ 功能,这些功能不包含在 .NET Core 中,并且是一种从未为多用途设计的客户端技术-线程服务器环境。存在锁定问题,可能会导致此解决方案不适合您的应用程序。
using System.Drawing;
const int size = 150;
const int quality = 75;
using (var image = new Bitmap(System.Drawing.Image.FromFile(inputPath)))
{
int width, height;
if (image.Width > image.Height)
{
width = size;
height = Convert.ToInt32(image.Height * size / (double)image.Width);
}
else
{
width = Convert.ToInt32(image.Width * size / (double)image.Height);
height = size;
}
var resized = new Bitmap(width, height);
using (var graphics = Graphics.FromImage(resized))
{
graphics.CompositingQuality = CompositingQuality.HighSpeed;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.DrawImage(image, 0, 0, width, height);
using (var output = File.Open(
OutputPath(path, outputDirectory, SystemDrawing), FileMode.Create))
{
var qualityParamId = Encoder.Quality;
var encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(qualityParamId, quality);
var codec = ImageCodecInfo.GetImageDecoders()
.FirstOrDefault(codec => codec.FormatID == ImageFormat.Jpeg.Guid);
resized.Save(output, codec, encoderParameters);
}
}
}
参考:https://blogs.msdn.microsoft.com/dotnet/2017/01/19/net-core-image-processing/