一、NetVips介绍
NetVips是对图像处理库libvips的.Net的绑定,或者说封装。具有约300种运算,涵盖算术,直方图,卷积,形态运算,频率滤波,颜色,重采样,统计等;它支持各种图像格式,包括JPEG,TIFF,OME-TIFF,PNG,WebP,FITS,Matlab,OpenEXR,PDF,SVG,HDR,PPM,CSV,GIF,Analyze,DeepZoom和OpenSlide。
以上是官网介绍(官网地址:https://kleisauke.github.io/net-vips/index.html),下面是我个人的理解:
首先是优点:
1, 轻量级,易上手,安装部署简单;
2, 占内存小,相比于Bitmap那丧心病狂的内存占用量,netvips在内存优化方面确实相当优秀。
至于缺点,主要就是计算能力不是特别优秀,肯定不如opencv这样的库专业。
综上,选择netvips主要就是看重了它的性能,十分适合大量图片的处理。
二、安装部署
nuget搜索NetVips,安装下面3个包即可。
NetVips
NetVips.Native.win-x64
NetVips.Native.win-x86
三、拼接图片输出
/// <summary>
/// 图像拼接
/// </summary>
/// <param name="width">输出图像宽度</param>
/// <param name="height">输出图像高度</param>
/// <param name="col">拼接列数</param>
/// <param name="tol">拼接图像总数</param>
/// <param name="picname">图像名(编号从0-N)</param>
private static Image outimg = null;//输出图像
private void JoinPicture(int width,int height, int col,int tol, string picname)
{
int x ;//x轴位置
int y;//y轴位置
int picid =Convert.ToInt32( picname.Split('\\')[picname.Split('\\').Length - 1].Split('.')[0]);//获取图像编号,用来计算图像位置
x = picid % col;
y= picid / col;
Image im= Image.NewFromFile(picname).Embed(x* im.Width, y * im.Height, width, height, extend: Enums.Extend.Background);//嵌入图像到指定宽高
if(picid==0)
{
outimg = im;//先给outimg赋值
}
else
{
outimg += im;//进行加运算
};
if (picid == tol-1)
{
outimg.WriteToFile(picname.Replace(picname.Split('\\')[picname.Split('\\').Length - 1],"output.jpg"));//输出拼接好的图片到指定目录
}
else
{
return;
}
}
主要思路就是利用嵌入函数Embed把图片嵌入到一个指定宽高的背景下的相应位置,然后再逐个相加得到一张完整的大图。
关于上面用到的函数,具体参数指代请参考官网api(官网地址见一)。
四、总结
因为项目需求,最近接触了几个图片处理的库,实验下来这个netvips是最符合我需求的。因为时间有限我也没有深入去看源码和demo,只是从官网api上学习了一下,写了一个简单的小方法,如有不足还请指正。欢迎大家交流,共同进步。