• .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("<保存图片路径>");
    
  • 相关阅读:
    《大型网站技术架构》学习笔记——架构演化
    ASP.NET MVC之Html.RenderAction
    设计模式学习笔记——面向对象设计原则
    设计模式学习笔记——类图
    观察者模式
    泛型接口
    泛型的实例化应用
    多线程第二种方式-实现runnable
    对象中的某个属性不希望被序例化--transient
    对象序例化
  • 原文地址:https://www.cnblogs.com/stulzq/p/14283068.html
Copyright © 2020-2023  润新知