asp.net core

用过.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的过程啦!