首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

C# 將文字檔內容繪製成圖片儲存的實用方法

     編輯:ASP.NET 基礎

前言

將純文字或 Log 檔案轉換為圖片,適用於防止內容被複製、產生驗證碼圖片、生成報表快照等場景。.NET System.Drawing 命名空間提供 GDI+ 繪圖功能,可輕鬆實現「量測文字尺寸 → 建立對應大小位圖 → 繪製文字 → 儲存」的完整流程。

完整實作程式碼

using System.Drawing;
using System.Drawing.Text;
using System.IO;

/// 
/// 將指定文字檔內容繪製為 PNG 圖片
/// 
/// 來源文字檔完整路徑
/// 輸出圖片完整路徑
public void ConvertTextFileToImage(string textFile, string imageFile)
{
    // 1. 設定字型與預測尺寸
    Font drawFont = new Font("標楷體", 12); // 中文建議使用標楷體或微軟正黑體
    Bitmap img = new Bitmap(1, 1);          // 1x1 像素暫時畫布
    Graphics g = Graphics.FromImage(img);

    // 讀取檔案內容(指定編碼避免亂碼)
    string text = File.ReadAllText(textFile, Encoding.GetEncoding("GB2312")); // 或 UTF-8

    // 量測文字在指定寬度下的實際高度
    SizeF sf = g.MeasureString(text, drawFont, 1024); // 限制最大寬度 1024px

    // 2. 建立實際尺寸的位圖並重新取得 Graphics
    img.Dispose(); // 釋放 1x1 畫布
    img = new Bitmap(img, new Size((int)Math.Ceiling(sf.Width), (int)Math.Ceiling(sf.Height)));
    g = Graphics.FromImage(img);

    // 3. 繪圖設定
    g.Clear(Color.White);                            // 白底
    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit; // 反鋸齒
    g.DrawString(text, drawFont, Brushes.Black, new RectangleF(PointF.Empty, sf));

    // 4. 儲存與資源釋放
    img.Save(imageFile, System.Drawing.Imaging.ImageFormat.Png);
    g.Dispose();
    img.Dispose();
}

呼叫範例

// 在 ASP.NET 頁面中呼叫
ConvertTextFileToImage(Server.MapPath("~/Log.txt"), Server.MapPath("~/Log.png"));

關鍵技術點解析

步驟關鍵 API說明
量測文字Graphics.MeasureString傳入最大寬度可獲得自動換行後的實際高度,避免文字被截斷。
建立位圖new Bitmap(width, height)依量測結果動態決定圖片大小,不浪費空間。
繪製品質TextRenderingHint.AntiAliasGridFit開啟次像素反鋸齒,中文顯示更銳利。
編碼處理Encoding.GetEncoding("GB2312")依實際檔案編碼調整,現代專案建議統一 UTF-8。
資源釋放Dispose()GDI+ 物件屬非託管資源,必須明確釋放,避免記憶體洩漏。

常見問題與優化

  • 長文字截斷:MeasureString 的寬度參數需足夠大,或改用 StringFormat 設定換行規則。
  • 字型缺失:伺服器需安裝指定字型;雲端/容器環境建議將 .ttf 檔隨專案部署,改用 PrivateFontCollection 載入。
  • 效能:大量轉換時,重複建立 Font/Brush 物件成本高,可改為靜態快取或物件池。
  • 跨平台:System.Drawing.Common 僅支援 Windows;Linux/Docker 需安裝 libgdiplus 或改用 SkiaSharp/ImageSharp 等跨平台庫。

擴充應用

  • 加入浮水印、頁首頁尾、頁碼。
  • 支援多欄排版、表格繪製(需自行計算座標)。
  • 輸出 PDF:搭配 PdfSharp 或 iTextSharp 將同樣 Graphics 邏輯導向 PDF 頁面。

總結

利用 System.Drawing 將文字檔轉圖片只需 20 行核心程式碼,關鍵在於「先量測後建立位圖」與「正確釋放資源」。根據部署環境選擇相容的繪圖庫,即可穩定應用於生產系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved