更多开源项目请查看:一个专注推荐优秀.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 -

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

一个强大、支持100多种格式.Net图片操作库的更多相关文章

  1. media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面

    一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...

  2. 一个.Net简单、易用的配置文件操作库

    在我们日常项目开发中,操作INI/CFG配置文件,往往会通过调用WinAPI来实现,WinAPI接口参数只支持字符串,而我们项目中,往往数据类型是多种多样的,在保存和获取配置值,我们就要进行类型的转换 ...

  3. 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

    毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...

  4. VC下加载多种格式图片的方法总结IPicture, CxImage, CImage(AtlImage), CPictureEx

    尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用 ...

  5. C# VB .NET生成条形码,支持多种格式类型

    条形码简单,方便印刷,因此在各个领域得到了广泛的应用.我们自己的项目里也可以将一些特定的数据以条形码的方式来展示和应用,实现一码走天下.那么如何在C#,.Net平台代码里生成条形码呢?答案是使用Sha ...

  6. FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库

    FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库:1. 安装faad2 # wget http://downloads.sourceforge.net/fa ...

  7. 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理

    本文目录 NSData+ImageContentType: 根据NSData获取MIME UIImage+GIF UIImage+WebP UIImage+MultiFormat:根据NSData相应 ...

  8. 一般源码安装添加的GD库 是不支持 jpeg 格式的图片的

    一般源码安装添加的GD库 是不支持 jpeg 格式的图片的,只支持如下格式 GD Support enabled GD Version bundled (2.0.34 compatible) GIF ...

  9. java基础小练习,1-打印一百次(1~10)的随机数,2-固定一个随机数(1~100),然后猜出他,3-定义以指定格式打印集合(ArrayList类型作为参数),使用{}括起来,使用@代替,分隔每个元素

    推荐自己码一下,可以使用别的方法,面向对象,不需要注重过程 /* 题目:我需要打印一百次(1~10)的随机数 */ import java.util.Random; public class demo ...

  10. 火狐不支持webp格式的图片

    <!DOCTYPE html> <html lang="en"> <style> ul{list-style: none;} li{float: ...

随机推荐

  1. 是技术牛人,如何拿到国内IT巨头的Offer

    不久前,byvoid面阿里星计划的面试结果截图泄漏,引起无数IT屌丝的羡慕敬仰.看看这些牛人,NOI金牌,开源社区名人,三年级开始写Basic...在跪拜之余我们不禁要想,和这些牛人比,作为绝大部分技 ...

  2. Go 闭包捕获问题

    在 Go 语言中,闭包(closure)是一个函数值,它引用了其外部作用域中的变量.简而言之,闭包能够"捕获"并"记住"其外部作用域中的变量,即使这个变量的生命 ...

  3. Linux 扩展磁盘分区

    之前安装 Ubuntu 虚拟机时使用的都是默认配置,虚拟机硬盘分配了 60 GB.后来想要扩容,特此记录一下扩容过程. 在操作前请做好备份 首先在 VMware 中修改虚拟硬盘大小. 然后进入虚拟机, ...

  4. 【Python】Selenium自动化测试之动态识别验证码图片方法(附静态图片文字获取)

    目录 一.前提 二.获取验证码 三.获取4位验证码 四.判断验证码是否正确 五.输入验证码登录 六.登录页面类 七.完整的获取验证码类代码 八.附录:静态图片文字提取 一.前提 返回目录 经常会遇到登 ...

  5. docker高级篇-docker-compose容器编排介绍及实战

    Docker-compose是什么?能干嘛?解决了哪些痛点? 是什么? Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用.你需要编写一个一 ...

  6. java 知识

    1. 单文件java 例子和简单项目例子 http://kleinfelter.com/java-hello-world-with-visual-studio-code-and-eclipse jav ...

  7. 使用gin实现简单的注册和登录功能

    一.前言 使用了gorm操作数据库,后端基于gin框架,只是一个简单的注册和登录与数据库交互的后端实现例子. 二.目录结构 -templates --regist.html --login.html ...

  8. Google sheet

    最近做比较多 data migration 的东西. 当我们开发一个新的系统去替代一个旧系统时,通常就需要做大量的 migration 动作. 有好几个做法 我之前比较常用的的工具是 sql 和 c# ...

  9. ASP.NET Core – Web API 冷知识

    Under/Over Posting 参考: .NET Core WebApi Action is executed even with missing properties in the reque ...

  10. 浅谈舞蹈链(DLX)

    名字: \(DL\),\(Dancing\space Link\),舞蹈链,是由\(Donald\space Knuth\)提出的数据结构,用来优化 \(X\) 算法,所以叫\(DLX\) \(X\) ...