一个强大、支持100多种格式.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");
}
}
项目地址
- End -
文章首发于公众号【编程乐趣】,欢迎大家关注。

一个强大、支持100多种格式.Net图片操作库的更多相关文章
- media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面
一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...
- 一个.Net简单、易用的配置文件操作库
在我们日常项目开发中,操作INI/CFG配置文件,往往会通过调用WinAPI来实现,WinAPI接口参数只支持字符串,而我们项目中,往往数据类型是多种多样的,在保存和获取配置值,我们就要进行类型的转换 ...
- 毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选
毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.i ...
- VC下加载多种格式图片的方法总结IPicture, CxImage, CImage(AtlImage), CPictureEx
尽管VC有提供相应的API和类来操作bmp位图.图标和(增强)元文件,但却不支持jpg.gif和png等格式的图片,而这几种格式却是常常要用到的.这里我给大家介绍两种办法来操作这些格式的图片. 1.用 ...
- C# VB .NET生成条形码,支持多种格式类型
条形码简单,方便印刷,因此在各个领域得到了广泛的应用.我们自己的项目里也可以将一些特定的数据以条形码的方式来展示和应用,实现一码走天下.那么如何在C#,.Net平台代码里生成条形码呢?答案是使用Sha ...
- FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库
FFmpeg软件只是个解码编码软件,如果支持多种格式必须先安装好对应的库,下面就说下我装的库:1. 安装faad2 # wget http://downloads.sourceforge.net/fa ...
- 通读SDWebImage③--gif和webP的支持、不同格式图片的处理、方向处理
本文目录 NSData+ImageContentType: 根据NSData获取MIME UIImage+GIF UIImage+WebP UIImage+MultiFormat:根据NSData相应 ...
- 一般源码安装添加的GD库 是不支持 jpeg 格式的图片的
一般源码安装添加的GD库 是不支持 jpeg 格式的图片的,只支持如下格式 GD Support enabled GD Version bundled (2.0.34 compatible) GIF ...
- java基础小练习,1-打印一百次(1~10)的随机数,2-固定一个随机数(1~100),然后猜出他,3-定义以指定格式打印集合(ArrayList类型作为参数),使用{}括起来,使用@代替,分隔每个元素
推荐自己码一下,可以使用别的方法,面向对象,不需要注重过程 /* 题目:我需要打印一百次(1~10)的随机数 */ import java.util.Random; public class demo ...
- 火狐不支持webp格式的图片
<!DOCTYPE html> <html lang="en"> <style> ul{list-style: none;} li{float: ...
随机推荐
- 2023 ECF 游记
录播 闭幕式 回顾 1.11 本来计划下午 vp 去年的 ecf,结果 zjj 忘记买票来投奔我了,所以鸽了.分块和莫队也没看 晚上收拾东西,完全装不下,应该早点寄走一些东西的 1.12 昨晚还想着别 ...
- WPF使用Grid布局
WPF布局 WPF布局基础 布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 布局容器 StackPanel: 水平或垂直排列元素.Orient ...
- MarginNote 4 内存泄露?
在床上用电脑的时候突然发现电脑风扇呼呼响,一摸很烫,以为是被子把出风口堵住了,于是调整角度继续用.结果一段时间之后风扇还是狂转不停,然后收到了这样的提示.不看不知道一看吓一跳,MarginNote 4 ...
- [WPF]数据绑定时为何会出现StringFormat失效
在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如 Button的 Content属性以及ToolTi ...
- 浅谈下市面上流行的各种Linux操作系统
当前最流行的Linux操作系统之一是Ubuntu.它是一个基于Debian的开源操作系统,它的用户界面和易用性使得它成为许多用户的首选. 其他流行的Linux操作系统包括: Debian:一个稳定和可 ...
- 微信小程序之无需服务端支持实现内容安全检查
微信小程序之无需服务端支持实现内容安全检查 微信小程序审核未通过,原因如下: 为避免您的小程序被滥用,请你完善内容审核机制,如调用小程序内容安全API,或使用其他技术.人工审核手段,过滤色情.违法等有 ...
- 设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后;在k1值相同的情况下,再看k2,k2值小的在前,大的在后。满足这种要求的
题目: 设线性表中每个元素有两个数据项k1和k2,现对线性表按一下规则进行排序:先看数据项k1,k1值小的元素在前,大的在后:在k1值相同的情况下,再看k2,k2值小的在前,大的在后.满足这种要求的排 ...
- manim边学边做--角度标记
manim中绘制一个角度其实就是绘制两条直线,本篇介绍的不是绘制角度,而是绘制角度标记. 对于锐角和钝角,角度标记是一个弧,弧的度数与角的度数一样: 对于直角,角度标记是一个垂直的拐角. manim中 ...
- 支付宝携手HarmonyOS SDK打造高效便捷的扫码支付体验
背景 在日常的购物转账.生活缴费等在线支付中,用户在正式拉起支付界面前,均需要至少经历一次"识别"+两次"寻找",即识别归属应用.寻找应用.寻找扫码入口,才能完 ...
- GPT-SoVITS语音合成模型实践
1.概述 GPT-SoVITS是一款开源的语音合成模型,结合了深度学习和声学技术,能够实现高质量的语音生成.其独特之处在于支持使用参考音频进行零样本语音合成,即使没有直接的训练数据,模型仍能生成相似风 ...