首页 > 其他分享 >一个强大、支持100多种格式.Net图片操作库

一个强大、支持100多种格式.Net图片操作库

时间:2023-02-02 21:55:05浏览次数:57  
标签:Snakeware using image new var 格式 100 path Net

更多开源项目请查看:一个专注推荐优秀.Net开源项目的榜单

我们在项目开发中,对图片的操作可以说是非常常见,比如图片大小改变、图片合并、格式转换、添加水印等,自己开发都需要费不少时间,所以今天给大家介绍一个支持100多格式图片操作库,完全可以满足项目日常的开发。

项目简介

这是基于.NET Standard开发的开源项目,支持100的图片格式,可以在C#/VB.NET/.NET Core直接使用。

如果需要操作AI/EPS/PDF/PS、Video 格式,需要额外安装插件。

技术架构

1、跨平台:这是基于.NET Standard开发的系统,可以部署在Docker,Windows,Linux;

项目结构

图片

系统功能

1、读取:读取、图片信息、支持多层/帧、Exif数据、颜色;

2、调整:调整动画gif大小、指定图片大小;

3、转换:100多中格式互相转换、CMYK转换为RGB、CR2转换为JPG;

4、合并:图片合并、创建动画gif;

5、PDF:PDF转为一个/多个图片、一个/多个图片转为PDF;

6、压缩:无损压缩;

7、文本:添加文本、添加水印。

使用示例

图像读取

// 读取图片
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
}

using (var image = new MagickImage())
{
    image.Read("c:\path\to\Snakeware.jpg");
    image.Read(memStream);
    image.Read("xc:yellow", settings);

    using (var memStream = LoadMemoryStreamImage())
    {
        image.Read(memStream);
    }
}

大小改变

//gif图片大小改变
using (var collection = new MagickImageCollection("c:\path\to\SnakewareGif"))
{
    collection.Coalesce();
    foreach (var image in collection)
    {
        image.Resize(200, 0);
    }
    collection.Write("c:\path\to\Snakeware.resized.gif");}
    // png图片大小改变
    using (var image = new MagickImage("c:\path\to\SnakewarePng"))
    {
        var size = new MagickGeometry(100, 100);
        size.IgnoreAspectRatio = true;
        image.Resize(size);
        image.Write("c:\path\to\Snakeware.100x100.png");
    }
}

**图片格式互转
**

// gif 转 png
using (var image = new MagickImage("c:\path\to\Snakeware.gif"))
{
    // Save frame as jpg
    image.Write("c:\path\to\Snakeware.jpg");
}

// 转为png格式
var settings = new MagickReadSettings();
settings.Width = 800;
settings.Height = 600;

using (var memStream = new MemoryStream())
{
    using (var image = new MagickImage("xc:purple", settings))
    {
        image.Format = MagickFormat.Png;
        image.Write(memStream);
    }
}

// png 转 jpeg
using (var image = new MagickImage("c:\path\to\Snakeware.png"))
{
    image.Format = MagickFormat.Jpeg;
    byte[] data = image.ToByteArray();
}

PDF互转

//pdf 转化为 png、tif格式
var settings = new MagickReadSettings();
settings.Density = new Density(300, 300);

using (var images = new MagickImageCollection())
{
    images.Read("c:\path\to\Snakeware.pdf", settings);

    var page = 1;
    foreach (var image in images)
    {
        image.Write("c:\path\to\Snakeware.Page" + page + ".png");
        image.Format = MagickFormat.Ptif;
        image.Write("c:\path\to\Snakeware.Page" + page + ".tif");
        page++;
    }
}

// 图片转为pdf
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
    // Create pdf file with a single page
    image.Write("c:\path\to\Snakeware.pdf");
}

//读取指定pdf
using (var images = new MagickImageCollection())
{
    var settings = new MagickReadSettings();
    settings.FrameIndex = 0; 
    settings.FrameCount = 1; 
    images.Read("c:\path\to\Snakeware.pdf", settings);
    images.Clear();
    settings.FrameCount = 2; 
    images.Read("c:\path\to\Snakeware.pdf", settings);
}

添加水印、文本

//添加水印
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
    using (var watermark = new MagickImage("c:\path\to\Magick.NET.png"))
    {
        image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over);
        watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4);
        image.Composite(watermark, 200, 50, CompositeOperator.Over);
    }
    image.Write("c:\path\to\Snakeware.watermark.jpg");
}

//添加文字
using (var image = new MagickImage(new MagickColor("#ff00ff"), 512, 128))
{
    new Drawables()
      .FontPointSize(72)
      .Font("Comic Sans")
      .StrokeColor(new MagickColor("yellow"))
      .FillColor(MagickColors.Orange)
      .TextAlignment(TextAlignment.Center)
      .Text(256, 64, "Magick.NET")
      .StrokeColor(new MagickColor(0, Quantum.Max, 0))
      .FillColor(MagickColors.SaddleBrown)
      .Ellipse(256, 96, 192, 8, 0, 360)
      .Draw(image);
}

图片合并

using (var images = new MagickImageCollection())
{
    var first = new MagickImage("c:\path\to\Snakeware.png");
    images.Add(first);
    var second = new MagickImage("c:\path\to\Snakeware.png");
    images.Add(second);
    using(var result = images.Mosaic())
    {
      result.Write("Mosaic.png");
   }
}

项目地址

https://github.com/dlemstra/Magick.NET

- End -

文章首发于公众号【编程乐趣】,欢迎大家关注。
图片

标签:Snakeware,using,image,new,var,格式,100,path,Net
From: https://www.cnblogs.com/chingho/p/17052408.html

相关文章

  • 8种专坑同事的 SQL 写法,性能降低100倍,不来看看?
    原文地址:yq.aliyun.com/articles/725011、LIMIT语句2、隐式转换3、关联更新、删除4、混合排序5、EXISTS语句6、条件下推7、提前缩小范围8、中间结果集下推总结......
  • VS 禁止自动创建平台子文件夹“net48”
    问题:最近在创建vb.net或者c#项目的时候,总是会在设定的输出路径下自动创建一个“net48”的平台文件夹,并将dll生成在这个文件夹里面,而调试启动的exe在设定的输出路径下,导致调......
  • kubetpl - kubernetes 模板管理工具
    目录Helm、Kustomize、KubetplHelmKustomizeKubetpl安装KubetplKubetpl命令参数参数选项completion-参数自动补齐render-渲染模板go-template语法注释引用变量在te......
  • kubernetes-dashboard 实现 http 访问以及免 token 登录
    目录下载官方yaml文件修改yaml文件修改service端口修改clusterrolebinding修改deployment内容修改探针检测修改镜像拉取策略修改容器端口关闭token登录增加ing......
  • Efficient training of physics-informed neural networks via importance sampling
     因为看着作者是英伟达的,便看了一下。总体感觉没有什么新意,改进幅度也很小,但是理论推导可以看一下。可以借鉴一下。本文通过重要性采样对PINN进行高效计算,本文提出的......
  • kubernetes关于eks一次异常问题的复盘
    背景:海外新加坡有一套aws的eks集群,很小的规模托管的三节点(172-31-16-189节点为最近才加的,忽略):[root@ip-172-31-10-1~]#kubectlgetnodesNAME......
  • kubernetes(四)
    一、基于StatefulSet部署有状态访问、基于DaemonSet在每一个node节点部署一个prometheusnode-exporter1.1StatefulSethttps://kubernetes.io/zh-cn/docs/concepts/work......
  • .net7 htt2.0 htt3.0
    服务器端代码配置varbuilder=WebApplication.CreateBuilder(args);builder.WebHost.ConfigureKestrel((context,options)=>{......
  • BFC - 块级格式上下文
    1.什么是BFC?浮动元素和绝对定位元素,非块级盒子的块级容器,以及overflow值不为visible的块级盒子,都会为他们的内容创建新的BFC2.触发条件?根元素浮动元素......
  • 解决Vscode中代码格式化时老换行
    问题:小颖用vscode的格式化代码后发现代码老是换行,有时看起来就很难受,比如下面的: 问度娘后终于弄好啦,记录下,省的以后换电脑了重装了vscode又不会了,主要是百度给的解决方......