• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#(.net)水印图片的生成完整实例

C#(.net)水印图片的生成完整实例

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c#图片水印,c#textbox水印,c#添加水印,c#文字水印,c#加水印等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文以一个完整实例讲述了C#水印图片的生成方法。是非常实用的技巧。分享给大家供大家参考。

具体实例代码如下:

/*
* 
*  使用说明:
*  建议先定义一个WaterImage实例
*  然后利用实例的属性,去匹配需要进行操作的参数
*  然后定义一个WaterImageManage实例
*  利用WaterImageManage实例进行DrawImage(),印图片水印
*  DrawWords()印文字水印
* 
*/
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.IO;

namespace ABC
{

  /// <summary>
  /// 图片位置
  /// </summary>
  public enum ImagePosition
  {
    LeftTop,    //左上
    LeftBottom,  //左下
    RightTop,    //右上
    RigthBottom, //右下
    TopMiddle,   //顶部居中
    BottomMiddle, //底部居中
    Center      //中心
  }

  /// <summary>
  /// 水印图片的操作管理 Design by Gary Gong From Demetersoft.com
  /// </summary>
  public class WaterImageManage
  {
    /// <summary>
    /// 生成一个新的水印图片制作实例
    /// </summary>
    public WaterImageManage()
    {
      //
      // TODO: Add constructor logic here
      //
    }

    /// <summary>
    /// 添加图片水印
    /// </summary>
    /// <param name="sourcePicture">源图片文件名</param>
    /// <param name="waterImage">水印图片文件名</param>
    /// <param name="alpha">透明度(0.1-1.0数值越小透明度越高)</param>
    /// <param name="position">位置</param>
    /// <param name="PicturePath" >图片的路径</param>
    /// <returns>返回生成于指定文件夹下的水印文件名</returns>
    public string DrawImage(string sourcePicture,
                     string waterImage,
                     float alpha,

                     ImagePosition position,
                     string PicturePath)
    {
      //
      // 判断参数是否有效
      //
      if (sourcePicture == string.Empty || waterImage == string.Empty || alpha == 0.0 || PicturePath == string.Empty)
      {
        return sourcePicture;
      }

      //
      // 源图片,水印图片全路径
      //
      string sourcePictureName = PicturePath + sourcePicture;
      string waterPictureName = PicturePath + waterImage;
      string fileSourceExtension = System.IO.Path.GetExtension(sourcePictureName).ToLower();
      string fileWaterExtension = System.IO.Path.GetExtension(waterPictureName).ToLower();
      //
      // 判断文件是否存在,以及类型是否正确
      //
      if (System.IO.File.Exists(sourcePictureName) == false ||
        System.IO.File.Exists(waterPictureName) == false || (
        fileSourceExtension != ".gif" &&
        fileSourceExtension != ".jpg" &&
        fileSourceExtension != ".png") || (
        fileWaterExtension != ".gif" &&
        fileWaterExtension != ".jpg" &&
        fileWaterExtension != ".png")
        )
      {
        return sourcePicture;
      }

      //

      // 目标图片名称及全路径
      //
      string targetImage = sourcePictureName.Replace(System.IO.Path.GetExtension(sourcePictureName), "") + "_1101.jpg";

      //
      // 将需要加上水印的图片装载到Image对象中
      //
      Image imgPhoto = Image.FromFile(sourcePictureName);
      //
      // 确定其长宽
      //
      int phWidth = imgPhoto.Width;
      int phHeight = imgPhoto.Height;

      //
      // 封装 GDI+ 位图,此位图由图形图像及其属性的像素数据组成。
      //
      Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);

      //
      // 设定分辨率
      // 
      bmPhoto.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

      //
      // 定义一个绘图画面用来装载位图
      //
      Graphics grPhoto = Graphics.FromImage(bmPhoto);

      //
      //同样,由于水印是图片,我们也需要定义一个Image来装载它
      //
      Image imgWatermark = new Bitmap(waterPictureName);

      //
      // 获取水印图片的高度和宽度
      //
      int wmWidth = imgWatermark.Width;
      int wmHeight = imgWatermark.Height;

      //SmoothingMode:指定是否将平滑处理(消除锯齿)应用于直线、曲线和已填充区域的边缘。
      // 成员名称  说明 
      // AntiAlias   指定消除锯齿的呈现。 
      // Default    指定不消除锯齿。

      // HighQuality 指定高质量、低速度呈现。 
      // HighSpeed  指定高速度、低质量呈现。 
      // Invalid    指定一个无效模式。 
      // None     指定不消除锯齿。 
      grPhoto.SmoothingMode = SmoothingMode.AntiAlias;

 

      //
      // 第一次描绘,将我们的底图描绘在绘图画面上
      //
      grPhoto.DrawImage(imgPhoto,
                    new Rectangle(0, 0, phWidth, phHeight),
                    0,
                    0,
                    phWidth,
                    phHeight,
                    GraphicsUnit.Pixel);

      //
      // 与底图一样,我们需要一个位图来装载水印图片。并设定其分辨率
      //
      Bitmap bmWatermark = new Bitmap(bmPhoto);
      bmWatermark.SetResolution(imgPhoto.HorizontalResolution, imgPhoto.VerticalResolution);

      //
      // 继续,将水印图片装载到一个绘图画面grWatermark
      //
      Graphics grWatermark = Graphics.FromImage(bmWatermark);

      //
      //ImageAttributes 对象包含有关在呈现时如何操作位图和图元文件颜色的信息。
      //   

      ImageAttributes imageAttributes = new ImageAttributes();

      //
      //Colormap: 定义转换颜色的映射
      //
      ColorMap colorMap = new ColorMap();

      //
      //我的水印图被定义成拥有绿色背景色的图片被替换成透明
      //
      colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);
      colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);

      ColorMap[] remapTable = { colorMap };

      imageAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);

      float[][] colorMatrixElements = { 
      new float[] {1.0f, 0.0f, 0.0f, 0.0f, 0.0f}, // red红色
      new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f}, //green绿色
      new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f}, //blue蓝色    
      new float[] {0.0f, 0.0f, 0.0f, alpha, 0.0f}, //透明度   
      new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}};//

      // ColorMatrix:定义包含 RGBA 空间坐标的 5 x 5 矩阵。
      // ImageAttributes 类的若干方法通过使用颜色矩阵调整图像颜色。
      ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);


      imageAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default,
       ColorAdjustType.Bitmap);

      //
      //上面设置完颜色,下面开始设置位置
      //
      int xPosOfWm;
      int yPosOfWm;

      switch (position)
      {
        case ImagePosition.BottomMiddle:
          xPosOfWm = (phWidth - wmWidth) / 2;
          yPosOfWm = phHeight - wmHeight - 10;
          break;

        case ImagePosition.Center:
          xPosOfWm = (phWidth - wmWidth) / 2;
          yPosOfWm = (phHeight - wmHeight) / 2;
          break;
        case ImagePosition.LeftBottom:
          xPosOfWm = 10;
          yPosOfWm = phHeight - wmHeight - 10;
          break;
        case ImagePosition.LeftTop:
          xPosOfWm = 10;
          yPosOfWm = 10;
          break;
        case ImagePosition.RightTop:
          xPosOfWm = phWidth - wmWidth - 10;
          yPosOfWm = 10;
          break;
        case ImagePosition.RigthBottom:
          xPosOfWm = phWidth - wmWidth - 10;
          yPosOfWm = phHeight - wmHeight - 10;
          break;
        case ImagePosition.TopMiddle:
          xPosOfWm = (phWidth - wmWidth) / 2;
          yPosOfWm = 10;
          break;
        default:
          xPosOfWm = 10;
          yPosOfWm = phHeight - wmHeight - 10;
          break;
      }

      // 第二次绘图,把水印印上去
      //
      grWatermark.DrawImage(imgWatermark,
       new Rectangle(xPosOfWm,
                 yPosOfWm,
                 wmWidth,
                 wmHeight),
                 0,
                 0,
        



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#实现手机拍照并且保存水印照片
  • C#如何给word文档添加水印
  • C#如何给PDF文件添加水印
  • C#中给Excel添加水印的具体方法
  • C#向图片添加水印的两种不同场景与解决方法
  • C#给图片加水印的简单实现方法
  • C#(.net)水印图片的生成完整实例
  • c#图片添加水印的实例代码

相关文章

  • 2017-05-28C#中控制远程计算机的服务的方法
  • 2017-05-28C#形状原点变换的方法
  • 2017-05-28C# 为String类型增加方法详解
  • 2017-05-28c#图片处理之图片裁剪成不规则图形
  • 2017-05-28C#读取数据库返回泛型集合详解(DataSetToList)
  • 2017-05-28C#实现读取指定盘符硬盘序列号的方法
  • 2017-05-28c# 两个数组比较,将重复部分去掉,返回不重复部分的实现
  • 2017-05-28C#程序连接数据库及读取数据库中字段的简单方法总结
  • 2017-05-28c#格式化数字的方法
  • 2017-05-28c#执行外部命令示例分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#6 null 条件运算符
    • C# 参数按照ASCII码从小到大排序(字典序)
    • http图片上传安全性问题 根据ContentType (MIME) 判断其实不准确、不安全
    • 基于switch你可能不知道的一些用法
    • C#计算汽车行驶方向的方法分析
    • 理解C#生成验证码的过程
    • C#4.0新特性之协变与逆变实例分析
    • C#验证码识别基础方法实例分析
    • C#编程自学之运算符和表达式
    • C#使用DropDownList绑定添加新数据的方法汇总

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有