在DTcms项目中增加ImageMagick插件的支持

Hailin 发表于 2017-07-21 09:25:36 来源于CMS插件网 评论 0 点击 1910
摘要:ImageMagick插件,这是一款免费开源的图片处理插件,可以支持达90多种图片格式;使用PHP、JAVA开发的,应该比较了解,今天小编来说说如何在DTcms系统中使用这款插件来处理图片!

从百度搜索的信息得知,ImageMagick是一个免费开源的图片处理软件,据官方资料显示,可以支持多达90多种不同的图片格式;对于我们WEB开发,其实常用的只种就绰绰有余了;像鼎鼎大名的“智图”(http://zhitu.isux.us/)也是基于ImageMagick开发的;

首选我们通过几张小编做的实例图片,来看看可以实现什么功能!

QQ截图20170721161259.png

小编截取的这部分的功能,只是其中的一部分,但是对于我们WEB开发,应该是足够了;包含:图片的尺寸压缩、缩略图生成、图片格式自动转换,webP格式的支持,图片的裁剪,文字水印,图片水印,水印位置,图片质量压缩,水印透明透,字体,字体颜色,字体大小等等...;我们这里只提应用到DTcms项目上这部分,其它的图片处理,自己可根据项目自行添加就好;

QQ截图20170721132346.png

同样一张原图,333 KB,上传后,用系统自带的方法上传后,文件是264KB,缩略200x200的尺寸是43KB,而使用ImageMagick插件后,上传的文件只有86KB,缩略图只有10KB;(长期支持小编的人可能会有疑问,ImageMagick和我之前提过的FreeImage有什么区别,为什么小缟之前有提过FreeImage,后面又取消了,原因在于FreeImage对服务器的系统支持不是很好,而ImageMagick可以支持市面上大部分的虚拟空间,云主机);两副图我们同时把显示比例调整成500%,可以看出图片的差别非常细微;

QQ截图20170721133043.png

下面是安装及简单的操作使用:

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);  //设置水印位置
        }
    }
}

热门资讯