从百度搜索的信息得知,ImageMagick是一个免费开源的图片处理软件,据官方资料显示,可以支持多达90多种不同的图片格式;对于我们WEB开发,其实常用的只种就绰绰有余了;像鼎鼎大名的“智图”(http://zhitu.isux.us/)也是基于ImageMagick开发的;
首选我们通过几张小编做的实例图片,来看看可以实现什么功能!
小编截取的这部分的功能,只是其中的一部分,但是对于我们WEB开发,应该是足够了;包含:图片的尺寸压缩、缩略图生成、图片格式自动转换,webP格式的支持,图片的裁剪,文字水印,图片水印,水印位置,图片质量压缩,水印透明透,字体,字体颜色,字体大小等等...;我们这里只提应用到DTcms项目上这部分,其它的图片处理,自己可根据项目自行添加就好;
同样一张原图,333 KB,上传后,用系统自带的方法上传后,文件是264KB,缩略200x200的尺寸是43KB,而使用ImageMagick插件后,上传的文件只有86KB,缩略图只有10KB;(长期支持小编的人可能会有疑问,ImageMagick和我之前提过的FreeImage有什么区别,为什么小缟之前有提过FreeImage,后面又取消了,原因在于FreeImage对服务器的系统支持不是很好,而ImageMagick可以支持市面上大部分的虚拟空间,云主机);两副图我们同时把显示比例调整成500%,可以看出图片的差别非常细微;
下面是安装及简单的操作使用:
1、使用NUGET,下载引用Magick.NET,
using ImageMagick;
2、根据自己的项目做相应的调整,这里我把一些常用的方法写出来,调整还需要自己动手
图片格式的自动转换、图片质量:
using (MagickImage image = new MagickImage(bit)) { //图片格式 //image.Format = MagickFormat.Png; //自动转换成PNG格式 //image.Format = MagickFormat.Jpg; //自动转换成Jpg格式 //image.Format = MagickFormat.WebP; //自动转换成WebP格式 //图片质量 if (siteConfig.watermarkimgquality > 0) { image.Quality = siteConfig.watermarkimgquality; } image.Write(fullUpLoadPath + newFileName); }
文字水印
using (MagickImage image = new MagickImage(bit)) { Drawables draw = new Drawables(); //字号 draw.FontPointSize(this.siteConfig.watermarkfontsize); //字体 draw.Font(this.siteConfig.watermarkfont); draw.StrokeColor(new MagickColor(Color.White)); draw.FillColor(Color.Black); //起始X、Y坐标,水印文字 draw.Text(0, 0, this.siteConfig.watermarktext); //水印位置 draw.Gravity(WatermarkPosition(siteConfig.watermarkposition)); draw.Draw(image); image.Write(fullUpLoadPath + newFileName); }
图片水印
using (MagickImage image = new MagickImage(bit)) { string watermarkFilename = this.siteConfig.watermarkpic; if (watermarkFilename.StartsWith("/") == false) { watermarkFilename = "/" + watermarkFilename; } watermarkFilename = Utils.GetMapPath(watermarkFilename); if (File.Exists(watermarkFilename)) { using (MagickImage watermark = new MagickImage(watermarkFilename)) { watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, this.siteConfig.watermarktransparency); image.Composite(watermark, WatermarkPosition(siteConfig.watermarkposition), CompositeOperator.Over); //设置水印位置 } } }