有谁知道如何在c#asp.net核心中压缩任何类型的图像(jpg,png,gif等)。 WebP并不适用于核心。我下载了ImageProcessor Core库,但可以弄清楚如何压缩/降低图像质量。这些是我们可以使用的代码的一部分,但实际上并不起作用。
newImage.Quality = old_image.Quality-20;
newImage.HorizontalResolution = 0;
newImage.VerticalResolution = 0;
答案 0 :(得分:3)
我们使用Magic.Net来压缩jpeg,gif和png图像。它支持.Net Core,可通过Nuget获得。
示例:
import xml.etree.ElementTree as ET
tree = ET.parse('topo.xml')
root = tree.getroot()
graph={}
app=[]
for vertex in root.findall('g/node'):
key = vertex.find('id').text
答案 1 :(得分:1)
寻找相同的解决方案,我在微软的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/