• 使用MagickNet编辑图片


       ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。ImageMagick是免费软件:全部源码开放,可以自由使用,复制,修改,发布。它遵守GPL许可协议。它可以运行于大多数的操作系统。ImageMagick的大多数功能的使用都来源于命令行工具。通常来说,它可以支持以下程序语言: Perl, C, C++, Python, PHP, Ruby, Java;现成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。这使得自动的动态的修改创建图片变为可能。

      虽然ImageMahick很强大,但却不提供.Net接口,无法使用C#进行开发。而今天介绍的MagickNet就是ImageMahick的.Net版本,它适用于使用.Net开发的Web应用或者WinForm。MagickNet是迄今为止功能最强大、效果最好的开源组件,可以在Github的项目地址下载源文件自己编译或使用在VS的Nuget中下载的已经编译好的DLL。

           需要注意的是在Github上下载的源文件使用VS2010及更低版本是打不开的。VS2010中的Nuget版本过低无法安装需要先升级Nuget。

           MagickNet依赖.Net Framework4.0,如果你的项目是2.0必须更改为高版本才能支持。我的项目是基于.Net Framework2.0的,本想将应用程序池的版本升级,却没想到报错定义了重复的system.web.extensions/scripting/scriptResourceHandle,这是因为网站的配置文件web.config和Framework4.0的全局配置(C:WindowsMicrosoft.NETFramework64v4.0.30319Configmachine.config)中有相同的配置节点。而注释了这些节点,导致网站的一些功能如用户认证无法正常使用。无奈只好使用2.0支持的低版本。

           下面是下载链接:

           Magick.NET-Q16-AnyCPU.dll(依赖.Net Framework4.0)

           MagickNet.dll (兼容.Net Framework2.0)

           两个类库中基本功能都是一样的,但是高版本的功能更强大。由于我的项目比较老,因此下面介绍的是低版本的MagickNet的一些基本操作。

    缩略图

    using(MagickNet.Image img = new MagickNet.Image(filename))
    {
          int width = 300; //定义宽度
          int height = 400; //定义高度
          img.Resize(new MagickNet.Geometry(width, height)); //调整图片尺寸
          img.Write(filepath); //保存图片
    }

        需要注意的是,虽然调整了尺寸,但得到的缩略图中仍保留了相机曝光时间、光圈值、焦距等exif信息,这使得缩略图也占用了较大的磁盘空间。这就需要将exif信息清除掉。高版本中有一个strike()方法,可以清除所有图片中包含的多余的信息,使图片在保持较高的清晰度下得到更大的压缩比率。由于低版本中没有提供strike()方法,我只好采用.Net中处理图像的方法进行压缩,点击此处查看代码

    文字水印

    public void AddWordWater(MagickNet.Image img,string word)
     {
          img.FontPointSize = 20;
          img.FillColor = new MagickNet.Color(255, 255, 255);
          img.Annotate(word, new MagickNet.Geometry(0 , 0, img.Size.Width - 300, img.Size.Height - 50));
    }

    图片水印

    public void AddPictureWater(MagickNet.Image img)
    {
             int xOffset = 100;
             int yOffset = 50;
             using (MagickNet.Image water = new MagickNet.Image(water_filename))
              {
                    //右下角添加
                    //img.Composite(water, MagickNet.GravityType.SouthEastGravity, MagickNet.CompositeOperator.OverCompositeOp);
                    //自定义位置添加
                    img.Composite(water, xOffset, yOffset,MagickNet.CompositeOperator.OverCompositeOp);
              }
    }

    更多的常用操作请参考

  • 相关阅读:
    python读取csv数据(添加列名,指定分隔方式)
    loc_survived
    数据预处理
    hadoop 指令
    pd.concat
    DataFrame
    SQL左连接
    mysql mysql之把查询的结果保存到新表(小知识点)
    啦啦啦啦 mysql 授权
    ArrayList和LinkedList的区别以及优缺点
  • 原文地址:https://www.cnblogs.com/siyunianhua/p/15428528.html
Copyright © 2020-2023  润新知