使用MagickNet編輯圖片

        ImageMagick是一個免費的建立、編輯、合成圖片的軟件。它能夠讀取、轉換、寫入多種格式的圖片。圖片切割、顏色替換、各類效果的應用,圖片的旋轉、組合,文本,直線,多邊形,橢圓,曲線,附加到圖片伸展旋轉。ImageMagick是免費軟件:所有源碼開放,能夠自由使用,複製,修改,發佈。它遵照GPL許可協議。它能夠運行於大多數的操做系統。ImageMagick的大多數功能的使用都來源於命令行工具。一般來講,它能夠支持如下程序語言: Perl, C, C++, Python, PHP, Ruby, Java;現成的ImageMagick接口(PerlMagick, Magick++, PythonMagick, MagickWand for PHP, RubyMagick, and JMagick)是可利用的。這使得自動的動態的修改建立圖片變爲可能。html

  雖然ImageMahick很強大,但卻不提供.Net接口,沒法使用C#進行開發。而今天介紹的MagickNet就是ImageMahick的.Net版本,它適用於使用.Net開發的Web應用或者WinForm。MagickNet是迄今爲止功能最強大、效果最好的開源組件,能夠在Github的項目地址下載源文件本身編譯或使用在VS的Nuget中下載的已經編譯好的DLL。git

       須要注意的是在Github上下載的源文件使用VS2010及更低版本是打不開的。VS2010中的Nuget版本太低沒法安裝須要先升級Nuget。github

       MagickNet依賴.Net Framework4.0,若是你的項目是2.0必須更改成高版本才能支持。個人項目是基於.Net Framework2.0的,本想將應用程序池的版本升級,卻沒想到報錯定義了重複的system.web.extensions/scripting/scriptResourceHandle,這是由於網站的配置文件web.config和Framework4.0的全局配置(C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config)中有相同的配置節點。而註釋了這些節點,致使網站的一些功能如用戶認證沒法正常使用。無奈只好使用2.0支持的低版本。web

       下面是下載連接:工具

       Magick.NET-Q16-AnyCPU.dll(依賴.Net Framework4.0)網站

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

       兩個類庫中基本功能都是同樣的,可是高版本的功能更強大。因爲個人項目比較老,所以下面介紹的是低版本的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中處理圖像的方法進行壓縮,點擊此處查看代碼code

文字水印

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);
          }
}

更多的經常使用操做請參考

lijinzhong的博客

相關文章
相關標籤/搜索