• .NET 调整图片尺寸(Resize)各种方法


    本文中如无特别说明 .NET 指 .NET 5或者更高版本,代码同样可用于 .NET Core

    前言

    调整图片尺寸最常用的场景就是生成缩略图,一般为保持纵横比缩小,如果图片放大会使图片变得模糊,如果确实有这方面的需求,可以寻找开源的AI放大图片的方法。

    1.ImageSharp

    开源地址:https://github.com/SixLabors/ImageSharp

    安装:

    dotnet add package SixLabors.ImageSharp
    

    使用:

    using var image = Image.Load<Rgba32>("<图片路径>");
    image.Mutate(x=>x.Resize(50,0));
    image.Save("<保存图片路径>");
    

    其中调用 Resize(width,height) 方法时,如果设置了宽或者高,然后另一个参数设置为 0 ,那么 ImageSharp 将会保持图片纵横比来进行调整大小。

    还有更多的设置,比如设置图片质量等,请参阅官方文档:https://docs.sixlabors.com/articles/imagesharp/resize.html

    使用此组件,可任意跨平台,无需安装外部依赖

    2.ImageProcessor

    此组件只能用于 .NET Framework

    开源地址:https://github.com/JimBobSquarePants/ImageProcessor

    安装:

    Install-Package ImageProcessor
    

    添加程序集:System.Drawing

    使用:

    using (var imageFactory = new ImageFactory(true))
    {
        imageFactory.Load("<图片路径>").Resize(new Size(50,50)).Save("<保存图片路径>");
    }
    

    3.SkiaSharp

    开源地址:https://github.com/mono/SkiaSharp

    安装:

    dotnet add package SkiaSharp 
    

    若在Linux出现依赖问题,可以使用包SkiaSharp.NativeAssets.Linux.NoDependencies

    使用:

    var image = SKBitmap.Decode("<图片路径>");
    //设置图片新的size
    var newImg = image.Resize(new SKSizeI(50, 50), SKFilterQuality.Medium);
    using var fs=new FileStream("<保存图片路径>",FileMode.Create);
    newImg.Encode(fs,SKEncodedImageFormat.Png, 100);
    fs.Flush();
    

    4.NetVips

    此组件是基于 C 的库 libvips 来封装的,性能高,资源占用低。并且经过完全测试,跨平台且没有内存泄漏。

    开源地址:https://github.com/kleisauke/net-vips

    安装:

    dotnet add package NetVips
    dotnet add package NetVips.Native
    

    两个包都需要安装

    使用:

    var image = NetVips.Image.NewFromFile("<图片路径>");
    var newImg = image.Resize(<图片缩放比例>);
    newImg.WriteToFile("<保存图片路径>");
    

    这里的Resize()方法设置的是缩放比例,如: 0.5。该组件额外提供了一个生成缩略图的方法ThumbnailImage(),可以自定义宽高,如果只穿宽度,那么将保持纵横比。

    var image = NetVips.Image.NewFromFile("<图片路径>");
    var newImg = image.ThumbnailImage(<图片宽度>);
    newImg.WriteToFile("<保存图片路径>");
    
  • 相关阅读:
    bzoj 1176 cdq分治套树状数组
    Codeforces 669E cdq分治
    Codeforces 1101D 点分治
    Codeforces 1100E 拓扑排序
    Codeforces 1188D Make Equal DP
    Codeforces 1188A 构造
    Codeforces 1188B 式子转化
    Codeforces 1188C DP 鸽巢原理
    Codeforces 1179D 树形DP 斜率优化
    git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题
  • 原文地址:https://www.cnblogs.com/stulzq/p/14283068.html
Copyright © 2020-2023  润新知