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

C# 圖片加文字浮水印完整實作:自適應字體、陰影效果、透明度控制

     編輯:關於C#

功能特色

  • 支援文字水印(圖片水印程式碼預留介面)
  • 自動計算最大適應字體大小
  • 繪製多層陰影文字增強可讀性
  • 水印圖片疊加支援透明度矩陣
  • 四角/置中定位列舉
  • 同步提供縮圖生成功能

核心類別架構

public enum WaterMarkType { TextMark /*, ImageMark */ }
public enum WaterMarkPosition { LeftTop, LeftBottom, RightTop, RightBottom }

public class ImageWaterMark
{
    // 公開進入點
    public void AddWaterMark(string oldPath, string newPath, WaterMarkType type, string content)

    // 內部實作
    private void AddWatermarkText(Graphics g, string text, string position, int width, int height)
    private void AddWatermarkImage(Graphics g, Image watermark, string position, int width, int height)
    private void AddWatermarkImage(Graphics g, string imgPath, string position, int width, int height)

    // 縮圖功能
    public void ToThumbnailImages(string source, string dest, int thumbWidth)
}

關鍵演算法細節

1. 自適應字體大小


int[] sizes = {32,30,28,26,24,22,20,18,16,14,12,10,8,6,4};
Font font = null; SizeF size;
for (int i=0; i

2. 陰影文字繪製(立體感)


Bitmap shadowBmp = new Bitmap((int)size.Width+3, (int)size.Height+3, PixelFormat.Format32bppArgb);
Graphics fg = Graphics.FromImage(shadowBmp);
Brush blackBrush = new SolidBrush(Color.FromArgb(255, Color.Black));
Brush grayBrush = new SolidBrush(Color.FromArgb(255, Color.Black)); // 可調透明度

// 多偏移繪製形成陰影
fg.DrawString(text, font, blackBrush, 0, 1);
fg.DrawString(text, font, blackBrush, 1, 0);
fg.DrawString(text, font, grayBrush, 1, 1);
fg.DrawString(text, font, grayBrush, 0, 2);
fg.DrawString(text, font, grayBrush, 2, 0);

// 最後繪製白色主文字
fg.DrawString(text, font, new SolidBrush(Color.White), 0, 0);

3. 水印疊加與透明度矩陣


ColorMatrix cm = new ColorMatrix(new float[][] {
    new float[]{1,0,0,0,0},
    new float[]{0,1,0,0,0},
    new float[]{0,0,1,0,0},
    new float[]{0,0,0,0.3f,0}, // Alpha 縮放 0.3 = 30% 不透明
    new float[]{0,0,0,0,1}
});
ImageAttributes ia = new ImageAttributes();
ia.SetColorMatrix(cm, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
g.DrawImage(watermark, destRect, 0,0, watermark.Width, watermark.Height, GraphicsUnit.Pixel, ia);

4. 縮圖等比縮放


double ratio = (double)thumbWidth / image.Width;
int thumbHeight = (int)(image.Height * ratio);
// 高品質插值
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(image, 0, 0, thumbWidth, thumbHeight);

使用範例


var wm = new ImageWaterMark();
wm.AddWaterMark(@"C:\src.jpg", @"C:\dst.jpg", WaterMarkType.TextMark, "Copyright © 2024");
wm.ToThumbnailImages(@"C:\src.jpg", @"C:\thumb.jpg", 200);

結語

結合 Graphics 繪圖、ColorMatrix 色彩調整、ImageAttributes 影像屬性,即可構建專業級的水印與縮圖元件。程式碼已模組化,易於整合至 ASP.NET Core、WPF 或桌面應用的圖片處理管線中。

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