项目中有个添加水印的需求,需要给图片铺满斜水印。

网上搜了半天全是添加在图片上、下、左、右的案例。

于是按照网上的某一段案例自己修改了一些代码。

                     Bitmap bitmap = new Bitmap(image);
int degree = ;
//图片的宽度与高度
int width = bitmap.Width, height = bitmap.Height;
//水印文字
string text = string.Format("仅供“{0}”使用", projectName);
Graphics g = Graphics.FromImage(bitmap);
g.DrawImage(bitmap, , );
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.DrawImage(image, new Rectangle(, , width, height), , , width, height, GraphicsUnit.Pixel);
Font crFont = new Font("微软雅黑", , FontStyle.Bold);
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(, , , ));
//将原点移动 到图片中点
g.TranslateTransform(, height);
//以原点为中心 转 -45度
g.RotateTransform(-);
for (int i = ; i < ; i++)
{
g.DrawString(text, crFont, semiTransBrush, new PointF( - i * , + i * ));
g.DrawString(text, crFont, semiTransBrush, new PointF( - i * , + i * ));
g.DrawString(text, crFont, semiTransBrush, new PointF( - i * , + i * ));
}
//保存文件
bitmap.Save(sImgPath, ImageFormat.Jpeg);
return sImgPath;

本来想法是画一个 g.DrawString从上至下的斜水印,铺满图片左边三分之一。

再画两个g.DrawString各占三分二,这样水印会铺满整张图片,效果也不错。

但项目的需求是水印文字是动态变化的,导致水印长度会长会短,长了第一个水印的尾部会把第二个水印覆盖掉一点。

这样就非常难看,调试了几天还是没有进展,最后只能画三个水印,让三条水印交错不在一个水平线上,缺点就是不太铺满图片。

希望有高手有更简便的方法可以交流一下。

下面是加完水印的效果图

最新文章

  1. es查询命令备份(只需要网页9200/_plugin/head/就可以访问)
  2. 数据字典生成工具之旅(5):DocX组件读取与写入Word
  3. 使用Redux管理你的React应用(转载)
  4. Monkey测试4——Monkey命令行可用的全部选项
  5. Druid 介绍及配置
  6. iOS:OC Lib:MagicalRecord
  7. codeforces B. Friends and Presents(二分+容斥)
  8. UITableViewCell实现3D缩放动画
  9. ssh的学习
  10. 定义Java类的数组的问题
  11. [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
  12. 使用requireJs的方法
  13. 10位时间戳使用moment转化为日期
  14. 使用JsonProperty Attribute修改返回json
  15. springboot打包去除资源文件,启动时指定配置文件位置,使用log4j2替换默认logback
  16. HTML5服务器消息推送(java版)
  17. Spark学习之路 (七)Spark 运行流程
  18. 使用SqlBulkCopy批量插入数据,测试20万条用时5秒
  19. mysql中字符串类型char(n)和varchar(n)的区别
  20. python文本 maketrans和translate

热门文章

  1. 客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)
  2. Win8 Metro(C#)数字图像处理--2.38Hough变换直线检测
  3. 什么是AIFF?
  4. memcached对中文key的支持问题
  5. TIME WINAPI
  6. 使用WebBrowser并调用网页中的JS函数
  7. 开源中国的 IT 公司开源软件整理计划介绍
  8. XPath概述
  9. C++中的new,operator new与placement new
  10. 台电P89s mini root教程