zoukankan      html  css  js  c++  java
  • C#给图片加文字水印

        public class TxtWaterMark
        {
            public enum WaterPositionMode
            {
                LeftTop,//左上
                LeftBottom,//左下
                RightTop,//右上
                RightBottom,//右下
                Center,//中间
                Other//其他,若选此项AddWaterText方法内自己把xValue和yValue穿进去
            }
            /// <summary>
            /// 给图片加文字水印
            /// </summary>
            /// <param name="oldpath">图片地址</param>
            /// <param name="savepath">加上文字水印以后图片保存地址</param>
            /// <param name="watertext">水印文字</param>
            /// <param name="position">水印位置</param>
            /// <param name="fontName">水印文字字体</param>
            /// <param name="fontSize">水印文字大小</param>
            /// <param name="color">水印文字颜色</param>
            /// <param name="alpha">水印文字透明度</param>
            /// <param name="isBold">水印文字是否加粗</param>
            /// <param name="xValue">水印位置position Other选项下设置</param>
            /// <param name="yValue">水印位置position Other选项下设置</param>
            public static void AddWaterText(string oldpath, string savepath, string watertext, WaterPositionMode position, string fontName, int fontSize, string fontColor, int alpha, bool isBold, float xValue = 0, float yValue = 0)
            {
                Image image = Image.FromFile(oldpath);
                Bitmap bitmap = new Bitmap(image.Width, image.Height);
                Graphics graphics = Graphics.FromImage(bitmap);
                graphics.Clear(Color.White);
                graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
                Font font = new Font(fontName, fontSize, FontStyle.Bold);
                if (!isBold)
                {
                    font = new Font(fontName, fontSize);
                }
    
                SizeF ziSizeF = new SizeF();
                ziSizeF = graphics.MeasureString(watertext, font);
                float x = 0f;
                float y = 0f;
                switch (position)
                {
    
                    case WaterPositionMode.LeftTop:
                        x = ziSizeF.Width / 2f;
                        y = 0f;
                        break;
                    case WaterPositionMode.LeftBottom:
                        x = ziSizeF.Width / 2f;
                        y = image.Height - ziSizeF.Height;
                        break;
                    case WaterPositionMode.RightTop:
                        x = image.Width * 1f - ziSizeF.Width / 2f;
                        y = 0f;
                        break;
                    case WaterPositionMode.RightBottom:
                        x = image.Width - ziSizeF.Width;
                        y = image.Height - ziSizeF.Height;
                        break;
                    case WaterPositionMode.Center:
                        x = image.Width / 2;
                        y = image.Height / 2 - ziSizeF.Height / 2;
                        break;
                    case WaterPositionMode.Other:
                        x = xValue + ziSizeF.Width / 2f;
                        y = yValue;
                        break;
                }
                try
                {
                    StringFormat stringFormat = new StringFormat { Alignment = StringAlignment.Center };
                    SolidBrush solidBrush = new SolidBrush(Color.FromArgb(alpha < 0 ? 0 : alpha, 0, 0, 0));
                    graphics.DrawString(watertext, font, solidBrush, x + 1f, y + 1f, stringFormat);
                    SolidBrush brush = new SolidBrush(Color.FromArgb(alpha < 0 ? 0 : alpha, ColorTranslator.FromHtml(fontColor)));
                    graphics.DrawString(watertext, font, brush, x, y, stringFormat);
                    solidBrush.Dispose();
                    brush.Dispose();
                    bitmap.Save(savepath, ImageFormat.Png);
                }
                catch (Exception e)
                {
    
    
                }
                finally
                {
                    bitmap.Dispose();
                    image.Dispose();
                }
    
            }
        }
  • 相关阅读:
    C++ UNREFERENCED_PARAMETER函数的作用
    Win32 Console Application、Win32 Application、MFC三者之间的联系和区别
    解决CSDN博客插入代码出现的问题
    C++ std::vector指定位置插入
    计算机如何与人沟通(1)
    C++ fstream文件操作
    using namespace std 和 include 的区别
    找不到windows.h源文件
    C++ 字符串转换
    WPF style 换肤
  • 原文地址:https://www.cnblogs.com/blazeZzz/p/9558050.html
Copyright © 2011-2022 走看看