天天看點

一個強大、支援100多種格式.Net圖檔操作庫

作者:程式設計樂趣
我是程式設計樂趣,一個10年.Net開發經驗老程式員,點選右上方“關注”,每天為你分享開源項目和程式設計知識。

我們在項目開發中,對圖檔的操作可以說是非常常見,比如圖檔大小改變、圖檔合并、格式轉換、添加水印等,自己開發都需要費不少時間,是以今天給大家介紹一個支援100多格式圖檔操作庫,完全可以滿足項目日常的開發。

項目簡介

這是基于.NET Standard開發的開源項目,支援100的圖檔格式,可以在C#/VB.NET/.NET Core直接使用。

如果需要操作AI/EPS/PDF/PS、Video 格式,需要額外安裝插件。

技術架構

1、跨平台:這是基于.NET Standard開發的系統,可以部署在Docker,Windows,Linux;

項目結構

一個強大、支援100多種格式.Net圖檔操作庫

系統功能

1、讀取:讀取、圖檔資訊、支援多層/幀、Exif資料、顔色;

2、調整:調整動畫gif大小、指定圖檔大小;

3、轉換:100多中格式互相轉換、CMYK轉換為RGB、CR2轉換為JPG;

4、合并:圖檔合并、建立動畫gif;

5、PDF:PDF轉為一個/多個圖檔、一個/多個圖檔轉為PDF;

6、壓縮:無損壓縮;

7、文本:添加文本、添加水印。

使用示例

圖像讀取

// 讀取圖檔
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
}


using (var image = new MagickImage())
{
    image.Read("c:\path\to\Snakeware.jpg");
    image.Read(memStream);
    image.Read("xc:yellow", settings);


    using (var memStream = LoadMemoryStreamImage())
    {
        image.Read(memStream);
    }
}           

大小改變

//gif圖檔大小改變
using (var collection = new MagickImageCollection("c:\path\to\SnakewareGif"))
{   
  collection.Coalesce();    
  foreach (var image in collection)    
  {       
    image.Resize(200, 0);    
  }    
  collection.Write("c:\path\to\Snakeware.resized.gif");}
// png圖檔大小改變
using (var image = new MagickImage("c:\path\to\SnakewarePng"))
{    
  var size = new MagickGeometry(100, 100);    
  size.IgnoreAspectRatio = true;    
  image.Resize(size);    
  image.Write("c:\path\to\Snakeware.100x100.png");
}           

圖檔格式互轉

// gif 轉 png
using (var image = new MagickImage("c:\path\to\Snakeware.gif"))
{
    // Save frame as jpg
    image.Write("c:\path\to\Snakeware.jpg");
}


// 轉為png格式
var settings = new MagickReadSettings();
settings.Width = 800;
settings.Height = 600;


using (var memStream = new MemoryStream())
{
    using (var image = new MagickImage("xc:purple", settings))
    {
        image.Format = MagickFormat.Png;
        image.Write(memStream);
    }
}


// png 轉 jpeg
using (var image = new MagickImage("c:\path\to\Snakeware.png"))
{
    image.Format = MagickFormat.Jpeg;
    byte[] data = image.ToByteArray();
}           

PDF互轉

//pdf 轉化為 png、tif格式
var settings = new MagickReadSettings();
settings.Density = new Density(300, 300);


using (var images = new MagickImageCollection())
{
    images.Read("c:\path\to\Snakeware.pdf", settings);


    var page = 1;
    foreach (var image in images)
    {
        image.Write("c:\path\to\Snakeware.Page" + page + ".png");
        image.Format = MagickFormat.Ptif;
        image.Write("c:\path\to\Snakeware.Page" + page + ".tif");
        page++;
    }
}


// 圖檔轉為pdf
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
    // Create pdf file with a single page
    image.Write("c:\path\to\Snakeware.pdf");
}


//讀取指定pdf
using (var images = new MagickImageCollection())
{
    var settings = new MagickReadSettings();
    settings.FrameIndex = 0; 
    settings.FrameCount = 1; 
    images.Read("c:\path\to\Snakeware.pdf", settings);
    images.Clear();
    settings.FrameCount = 2; 
    images.Read("c:\path\to\Snakeware.pdf", settings);
}           

添加水印、文本

//添加水印
using (var image = new MagickImage("c:\path\to\Snakeware.jpg"))
{
    using (var watermark = new MagickImage("c:\path\to\Magick.NET.png"))
    {
        image.Composite(watermark, Gravity.Southeast, CompositeOperator.Over);
        watermark.Evaluate(Channels.Alpha, EvaluateOperator.Divide, 4);
        image.Composite(watermark, 200, 50, CompositeOperator.Over);
    }
    image.Write("c:\path\to\Snakeware.watermark.jpg");
}


//添加文字
using (var image = new MagickImage(new MagickColor("#ff00ff"), 512, 128))
{
    new Drawables()
      .FontPointSize(72)
      .Font("Comic Sans")
      .StrokeColor(new MagickColor("yellow"))
      .FillColor(MagickColors.Orange)
      .TextAlignment(TextAlignment.Center)
      .Text(256, 64, "Magick.NET")
      .StrokeColor(new MagickColor(0, Quantum.Max, 0))
      .FillColor(MagickColors.SaddleBrown)
      .Ellipse(256, 96, 192, 8, 0, 360)
      .Draw(image);
}           

圖檔合并

using (var images = new MagickImageCollection())
{    
  var first = new MagickImage("c:\path\to\Snakeware.png");
  images.Add(first);
  var second = new MagickImage("c:\path\to\Snakeware.png");
  images.Add(second);
  using(var result = images.Mosaic())
  {      
    result.Write("Mosaic.png");
  }
}           

開源項目

私信回複:1081,擷取

我是程式設計樂趣,一個10年.Net開發經驗老程式員,專注開源項目和程式設計知識分享。

私信回複:【888】,領取.Net視訊教程。

- End -

推薦閱讀

一個.Net簡單、易用的配置檔案操作庫

一款類似蘋果螢幕使用時間的Windows開源項目

一個變量命名神器:支援中文轉變量名

推薦一個用C#開發作業系統的開源項目

收錄常用代碼片段,每個程式員都要知道的一個網站

繼續閱讀