本文示範在 ASP.NET 頁面中使用 System.Drawing 命名空間繪製太極圖,並直接輸出 JPEG 影像串流至瀏覽器,無需實體儲存檔案。
在 @Page 指示詞設定 ContentType="Image/Jpeg",讓頁面直接回傳影像:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TaiJiTu.aspx.cs" Inherits="TaiJiTu" ContentType="Image/Jpeg" %>
使用 GraphicsPath 建立太極的曲線路徑,再以 FillPath 填充紅藍兩色,最後繪製雙魚眼:
protected void Page_Load(object sender, EventArgs e) {
int imgWidth = 400;
int eyeRadius = imgWidth / 20;
int headDiameter = imgWidth / 2;
using (var image = new Bitmap(imgWidth, imgWidth)) {
image.SetResolution(300, 300);
using (var g = Graphics.FromImage(image)) {
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.AntiAlias;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
// 底色白
g.FillRectangle(Brushes.White, 0, 0, imgWidth, imgWidth);
// 整圓藍色
g.FillPie(Brushes.Blue, 0, 0, imgWidth, imgWidth, 0, 360);
// 右半部紅色路徑
var redPath = new GraphicsPath();
redPath.AddArc(0, 0, imgWidth, imgWidth, 0, -180);
redPath.AddArc(0, headDiameter / 2, headDiameter, headDiameter, 0, -180);
redPath.AddArc(headDiameter, headDiameter / 2, headDiameter, headDiameter, 0, 180);
g.FillPath(Brushes.Red, redPath);
// 雙魚眼
g.FillPie(Brushes.Red, headDiameter/2 - eyeRadius, headDiameter - eyeRadius, eyeRadius*2, eyeRadius*2, 0, 360);
g.FillPie(Brushes.Blue, headDiameter + headDiameter/2 - eyeRadius, headDiameter - eyeRadius, eyeRadius*2, eyeRadius*2, 0, 360);
}
// 高品質 JPEG 輸出
var codec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == ImageFormat.Jpeg.Guid);
var eps = new EncoderParameters(1) { Param = new[] { new EncoderParameter(Encoder.Quality, 100L) } };
image.Save(Response.OutputStream, codec, eps);
}
}

ashx 通用處理常式提供影像服務System.Drawing 在 Linux 容器需安裝 libgdiplus,或改用跨平台庫 (ImageSharp, SkiaSharp)