C#.net Core圆角图像

时间:2018-10-27 16:17:33

标签: c# .net-core

我保存了来自社交网络的图像,并且想对图像进行圆角处理并将其保存到数据库中。例如,我在Api上从https://www.npmjs.com/package/pm2的Facebook上获得了一张照片,我想处理该图像

.net Core上如何实现

下面,我期望什么结果

之前的图片:

url

后图:

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用 SixLabors.ImageSharp 库,该库可用于.NET Core:

  

PM>安装软件包SixLabors.ImageSharp

这是示例代码:

public static void ApplyRoundedCorners(Image<Rgba32> img, float cornerRadius)
{
    IPathCollection corners = BuildCorners(img.Width, img.Height, cornerRadius);
    var graphicOptions = new GraphicsOptions(true) { BlenderMode = PixelBlenderMode.Src };
    img.Mutate(x => x.Fill(graphicOptions, Rgba32.Transparent, corners));
}

public static IPathCollection BuildCorners(int imageWidth, int imageHeight, float cornerRadius)
{
    var rect = new RectangularPolygon(-0.5f, -0.5f, cornerRadius, cornerRadius);

    IPath cornerToptLeft = rect.Clip(new EllipsePolygon(cornerRadius - 0.5f, cornerRadius - 0.5f, cornerRadius));

    var center = new Vector2(imageWidth / 2F, imageHeight / 2F);

    float rightPos = imageWidth - cornerToptLeft.Bounds.Width + 1;
    float bottomPos = imageHeight - cornerToptLeft.Bounds.Height + 1;

    IPath cornerTopRight = cornerToptLeft.RotateDegree(90).Translate(rightPos, 0);
    IPath cornerBottomLeft = cornerToptLeft.RotateDegree(-90).Translate(0, bottomPos);
    IPath cornerBottomRight = cornerToptLeft.RotateDegree(180).Translate(rightPos, bottomPos);

    return new PathCollection(cornerToptLeft, cornerBottomLeft, cornerTopRight, cornerBottomRight);
}

private static IImageProcessingContext<Rgba32> ConvertToAvatar(this IImageProcessingContext<Rgba32> processingContext, Size size, float cornerRadius)
{
    return processingContext.Resize(new ResizeOptions
    {
        Size = size,
        Mode = ResizeMode.Crop
    }).Apply(i => ApplyRoundedCorners(i, cornerRadius));
}

您可以像这样使用它:

 using (var img = Image.Load("fb.jpg"))
 {
     using (Image<Rgba32> destRound = img.Clone(x => x.ConvertToAvatar(new Size(200, 200), 100)))
     {
         destRound.Save("output/fb-round.png");
     }
 }

可以找到更多示例here