hano7758 发表于 2019-7-27 12:09

c# 添加文字水印

最近有个需求给图片加文字斜文字水印。并且需要铺满图片。
网上找的添加水印都是横的,并且是固定位置,只能自己写
Bitmap bitmap = new Bitmap(image);
                  //图片的宽度与高度
                  int width = bitmap.Width, height = bitmap.Height;
                  //水印文字
                  Graphics g = Graphics.FromImage(bitmap);
                  g.DrawImage(bitmap, 0, 0);
                  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
                  g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                  g.DrawImage(image, new Rectangle(0, 0, width, height), 0, 0, width, height, GraphicsUnit.Pixel);
                  Font crFont = new Font("微软雅黑", 22, FontStyle.Bold);
                  SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(255, 137, 131, 131));
                  //将原点移动 到图片中点
                  g.TranslateTransform(-80, 150);
                  //以原点为中心 转 -45度
                  g.RotateTransform(-45);
                  for (int i = 0; i < 50; i++)
                  {
                        g.DrawString(text, crFont, semiTransBrush, new PointF(0 - i * 300, 100 + i * 300));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(150 - i * 300, 500 + i * 300));
                        g.DrawString(text, crFont, semiTransBrush, new PointF(650 - i * 300, 600 + i * 300));
                  }
                  //保存文件
                  bitmap.Save(sImgPath, ImageFormat.Jpeg);


这代码的缺陷是,图片加的文字水印可能长,可能短,
如果图片分辨率高水印可能就占图片的左三分之一,分辨率低文字水印就出现前几个字。
有没有大神有更好的添加水印方法{:1_893:}

gana 发表于 2019-7-27 13:46

根据图片分辨率,动态调整水印文字字体大小。
看你的代码,应该是水印斜角45度,排了50行,每行三个。如果你要适配不同分辨率,那么这部分代码也要根据分辨率动态计算位置,每行水印数量和水印行数。

另一种方案,可以将文字水印转换为背景透明的图片,根据分辨率直接缩放贴图。或者根据分辨率生成合适大小的图片,贴图
页: [1]
查看完整版本: c# 添加文字水印