zoukankan      html  css  js  c++  java
  • Asp.net core 学习笔记 Image processing (ImageSharp)

    .net 的生态烂是真的, 很多硬需求都没有人做, 开源的做着做着就闭源了的也很多. 

    今天说说 image processing 

    早年都是用 system.draw, 但由于它依赖 windows, 后来 .net core 来了就有其它 player 进来完了.

    https://devblogs.microsoft.com/dotnet/net-core-image-processing/

    2017 年的时候就有好几个选择, 当时很多还不成熟, 有些不能跨平台, 或者部分平台可以而已. 

    https://www.reddit.com/r/dotnet/comments/lmknjq/net_core_image_processing_2021_edition/

    2021 年有人对上面几个做了更新. 

    这里我主要记入一下我的 research 

    Magick.NET

    是我目前用着的. Magick 是一个图像处理程序, 用 c 语言写的. 1999 年成立的公司. 

    Magick.NET 是 Magick 的核心成员做出来的 port. 目前整个项目只有他一个人在维护. 

    很强大, 该有的功能都有. 只是风险大了一些. 毕竟不是什么大公司, 人员也很少. 

    SkiaSharp

    mono team 维护, 依靠 Google Skia 渲染. 功能很强. 也是属于 port 的 level. 比起 Magick.Net 风险少了很多.

    毕竟背靠大公司吗, 哪怕团队小不是主菜, 也不会太糟糕. 

    ImageSharp

    明日之星, 优点就是完全 c# 从 0 开发, 不依赖任何东西. 牛啊. 但是还很年轻. 

    很多功能都没有. 比如 webp 和 progressive jpeg 在 github issue 上最多 thumb. (webp 下一个版本就会支持了. )

    不管怎样, 火的东西都得试一试, 给点支持嘛. 真的不行大不了用 SkiaSharp 啦. 

    这里记入一下它的常用方法. 

    官网 https://docs.sixlabors.com/articles/imagesharp/index.html?tabs=tabid-1

    首先安装 nuget 

    dotnet add package SixLabors.ImageSharp

    基本的 load image, 查看 width, height, exif 

    var fileFullPath = @"C:keatkeatprojectsstooges-libstooges-aspnetcoreProjectwwwrootuploaded-filesvertical-huawei.jpg";
    using var image = Image.Load(fileFullPath);
    var w = image.Width;
    var h = image.Height;
    var exifOrientation = image.Metadata.ExifProfile.GetValue(ExifTag.Orientation);

    修改图片 : 

    var newImage = image.Clone(imageProcessing =>
    {
        imageProcessing.AutoOrient();
        imageProcessing.Resize((int)Decimal.Divide(image.Width, 2), (int)Decimal.Divide(image.Width, 2));
        imageProcessing.Crop(new Rectangle(x: 150, y: 150,  150, height: 150));
        imageProcessing.Rotate(RotateMode.Rotate90);
        imageProcessing.Flip(FlipMode.Vertical);
    });
    newImage.SaveAsJpeg(
        @"C:keatkeatprojectsstooges-libstooges-aspnetcoreProjectwwwrootuploaded-filesvertical-huawei-croped.jpg", new SixLabors.ImageSharp.Formats.Jpeg.JpegEncoder
        {
            Quality = 85
        }
    );

    Clone 就是复制多一张来改, 如果是直接改的话就把 Clone 换成 .Mutate()

    AutoOrient 就是依据 exif orientation 来旋转和 flip 图片, 很方便, 不需要自己搞. (refer: https://www.cnblogs.com/keatkeat/p/7532183.html)

    转换之后 exif orientation 会变成 1 (哪怕之前是 0, 比如 hua wei 手机是 0)

    resize, crop, rotate, flip 都是比较常会用到的. 

    它还有一个 crop avatar 的 sample https://github.com/SixLabors/Samples/tree/master/ImageSharp/AvatarWithRoundedCorner

    大概就是这样用呗.

  • 相关阅读:
    Java 9.10习题
    Java同步synchronized与死锁
    Java线程操作方法
    Java多线程
    Java——private default protected public访问控制权限
    Java——jar命令
    Java导包——import语句
    ubuntu删除输入法后,循环登陆
    ubuntu下Eclipse安装
    Java——包的概念及使用
  • 原文地址:https://www.cnblogs.com/keatkeat/p/14882828.html
Copyright © 2011-2022 走看看