使用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:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.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);
          }
}

更多的常用操作請參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章