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

ASP.NET 使用 GDI+ 繪製太極圖並輸出 JPEG 串流

     編輯:ASP.NET 基礎

本文示範在 ASP.NET 頁面中使用 System.Drawing 命名空間繪製太極圖,並直接輸出 JPEG 影像串流至瀏覽器,無需實體儲存檔案。

關鍵設定

在 @Page 指示詞設定 ContentType="Image/Jpeg",讓頁面直接回傳影像:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TaiJiTu.aspx.cs" Inherits="TaiJiTu" ContentType="Image/Jpeg" %>

繪圖邏輯 (TaiJiTu.aspx.cs)

使用 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)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved