在.net core 2.x环境应该用什么图像处理库
用过.net core的都知道,坑还是比较多的,但是为了跨平台,为了牛b的vs2017,还是得用啊?
这不,现在碰到一个坑,就是.net core本身是没有图像处理的库的,于是上网搜搜看看有没有什么还用的第三方库,看到一篇文章写的很详细:《.NET Core Image Processing》
文章里面推荐了很多第三方的库,仔细有研究了一下,发现有些库我还是不用了啊。文章是17年1月写的,当时的.net core版本还是1.x版,里面记录的库好多都只能支持到1.x版,而我用的是2.0的环境,而且有些库不支持linux环境。选来选去,我最后选择了Magick.NET这个第三方库,他的项目地址在:https://github.com/dlemstra/Magick.NET
这个第三方库及支持linux环境,又能支持2.0的.net core环境,挺好的!
在nuget里面搜索Magick.NET, 我们可以搜到好多结果,读了magick.net的文档以后,了解到q8,q16和q16-hdri表示的是处理图像的质量,q8图像质量最低但处理速度最快,q16-hdri图像质量最高但处理速度最慢。结合我自己的使用情况,客户对图像的质量要求不高但是要快,对服务器压力要小,所有我选了Magick.NET-Q8-AnyCPU这个版本。
Package Manager下安装:
Install-Package Magick.NET-Q8-AnyCPU
Magick.NET其实也满坑,文档写的太不详细了,特别是关于透明度这一块,我可是花了好长时间才搞定透明度的问题。
接下来记录一下我用到的一些图像的操作吧:
1. 读取一个图像文件,保存图像到文件
using (var image = new MagickImage(GetImgPath("bg.jpg")))
{
// 。。。。 其他图像处理的代码
// 将图像文件写到指定路径
image.Write(savepath);
}
2. 旋转图像
image.Rotate(180);
3. 添加水印图片
// 读取水印图片
using (var one = new MagickImage(GetImgPath(img.ImgUrl)))
{
// 旋转水印图像
one.Rotate(180);
if (img.ImgWs != 100)
{
// 根据百分比缩放水印图像
one.Resize(new Percentage(img.ImgWs));
}
if (img.Dissolve != 100)
{
// 根据百分比不透明度的将水印图像画到背景图片上
image.Composite(one, img.Dx, img.Dy, CompositeOperator.Dissolve, img.Dissolve.ToString());
}
else
{
// 直接将水印图像画到背景图片上
image.Composite(one, img.Dx, img.Dy, CompositeOperator.Over);
}
}
4. 添加水印文字
new Drawables()
// 设置字体大小,单位:像素
.FontPointSize(img.TextSize)
// 设置字体,根据字体文件的绝对路径来
.Font(GetStaticPath("font/verdana.ttf"))
// 设置字体的颜色和透明度其中img.TextColor的颜色格式为"#FFFFFF", img.Dissolve表示透明度的百分比
.FillColor(new MagickColor(img.TextColor + (255 * img.Dissolve / 100).ToString("X2")))
// 设置文字对其方式
.TextAlignment(TextAlignment.Center)
// 设置文字的编码格式
.TextEncoding(System.Text.Encoding.UTF8)
// 设置文字的内容,和坐标
.Text(width - img.Dx, height - img.Dy, img.Text)
// 将文字画到图像上
.Draw(image);
好啦,这就是我使用Magick.NET的过程啦!