/**********************Created by Chen**************************

*如果你觉得本人的文章好,要引用请尊重著作人的劳动果实,说明

*出处以及原创作者,Thank you!!!   email:aishen944-sohu.com

*******************************************************************/

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;
namespace ImageDrawing
{
 /// <summary>
 /// 图片修改类,主要是用来保护图片版权的
 /// </summary>
 public class ImageModification
 {
  #region "member fields"
  private string modifyImagePath=null;
  private string drawedImagePath=null;
  private int rightSpace;
  private int bottoamSpace;
  private int lucencyPercent=70;
  private string outPath=null;
  #endregion
  public ImageModification()
  {
  }
  #region "propertys"
  /// <summary>
  /// 获取或设置要修改的图像路径
  /// </summary>
  public string ModifyImagePath
  {
   get{return this.modifyImagePath;}
   set{this.modifyImagePath=value;}
  }
  /// <summary>
  /// 获取或设置在画的图片路径(水印图片)
  /// </summary>
  public string DrawedImagePath
  {
   get{return this.drawedImagePath;}
   set{this.drawedImagePath=value;}
  }
  /// <summary>
  /// 获取或设置水印在修改图片中的右边距
  /// </summary>
  public int RightSpace
  {
   get{return this.rightSpace;}
   set{this.rightSpace=value;}
  }
  //获取或设置水印在修改图片中距底部的高度
  public int BottoamSpace
  {
   get{return this.bottoamSpace;}
   set{this.bottoamSpace=value;}
  }
  /// <summary>
  /// 获取或设置要绘制水印的透明度,注意是原来图片透明度的百分比
  /// </summary>
  public int LucencyPercent
  {
   get{return this.lucencyPercent;}
   set
   {
    if(value>=0&&value<=100)
     this.lucencyPercent=value;
   }
  }
  /// <summary>
  /// 获取或设置要输出图像的路径
  /// </summary>
  public string OutPath
  {
   get{return this.outPath;}
   set{this.outPath=value;}
  }
  #endregion
  #region "methods"
  /// <summary>
  /// 开始绘制水印
  /// </summary>
  public void DrawImage()
  {
   Image modifyImage=null;
   Image drawedImage=null;
   Graphics g=null;
   try
   {    
    //建立图形对象
    modifyImage=Image.FromFile(this.ModifyImagePath);
    drawedImage=Image.FromFile(this.DrawedImagePath);
    g=Graphics.FromImage(modifyImage);
    //获取要绘制图形坐标
    int x=modifyImage.Width-this.rightSpace;
    int y=modifyImage.Height-this.BottoamSpace;
    //设置颜色矩阵
    float[][] matrixItems ={
             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, (float)this.LucencyPercent/100f, 0},
             new float[] {0, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(matrixItems);
    ImageAttributes imgAttr=new ImageAttributes();
    imgAttr.SetColorMatrix(colorMatrix,ColorMatrixFlag.Default,ColorAdjustType.Bitmap);
    //绘制阴影图像
    g.DrawImage(
     drawedImage,
     new Rectangle(x,y,drawedImage.Width,drawedImage.Height),
     0,0,drawedImage.Width,drawedImage.Height,
     GraphicsUnit.Pixel,imgAttr);
    //保存文件
    string[] allowImageType={".jpg",".gif",".png",".bmp",".tiff",".wmf",".ico"};
    FileInfo file=new FileInfo(this.ModifyImagePath);
    ImageFormat imageType=ImageFormat.Gif;
    switch(file.Extension.ToLower())
    {
     case ".jpg":
      imageType=ImageFormat.Jpeg;
      break;
     case ".gif":
      imageType=ImageFormat.Gif;
      break;
     case ".png":
      imageType=ImageFormat.Png;
      break;
     case ".bmp":
      imageType=ImageFormat.Bmp;
      break;
     case ".tif":
      imageType=ImageFormat.Tiff;
      break;
     case ".wmf":
      imageType=ImageFormat.Wmf;
      break;
     case ".ico":
      imageType=ImageFormat.Icon;
      break;
     default:
      break;
    }
    MemoryStream ms=new MemoryStream();
    modifyImage.Save(ms,imageType);
    byte[] imgData=ms.ToArray();
    modifyImage.Dispose();
    drawedImage.Dispose();
    g.Dispose();
    FileStream fs=null;
    if(this.OutPath==null || this.OutPath=="")
    {
     File.Delete(this.ModifyImagePath);
     fs=new FileStream(this.ModifyImagePath,FileMode.Create,FileAccess.Write);
    }
    else
    {
     fs=new FileStream(this.OutPath,FileMode.Create,FileAccess.Write);
    }
    if(fs!=null)
    {
     fs.Write(imgData,0,imgData.Length);
     fs.Close();
    }
   }
   finally
   {
    try
    {
     drawedImage.Dispose();
     modifyImage.Dispose();
     g.Dispose();
    }
    catch{;}
   }
  }
  #endregion
 }
}

图片的版权保护(添加水印)相关推荐

  1. 网络图片版权保护的主要问题

    近段时间由人类历史上首张黑洞照片的发布而引发版权争议的话题愈演愈烈.自事情发生以来,关注图片版权的话题也持续升温,引起来各大媒体.群中和相关机构的引论.为了更好的规范图片版权问题,国家版权局也借此契机 ...

  2. 在CSDN中增加图片版权保护的方法

    简 介: CSDN图床对于Markdown编辑器粘贴的图片强行增加白色的字符水印,给文章中图片显示带来了干扰,特别是深色背景的图片.本文介绍了通过对图像进行缩小或者放大来消除或者减轻这种干扰的方法. ...

  3. 报告如何单独添加水印?永洪BIV9.2解锁版权保护新方式

    为了给报告添加版权保护信息,防止企业报告被他人盗用,永洪BIV8.0版本水印功能应运而生,解决了企业数据版权问题,但随着使用场景多元化,简单的统一设置水印方式已无法满足大家的需求,备受吐槽. 历经多个 ...

  4. 图片版权保护 用这个盲水印API就够了

    "图片是我辛苦拍摄的,熬夜处理的,但是在其它网站居然被轻松挪用,严重者甚至整个一个山寨版摄影专栏!但是举证艰难,官网客服根本不予理睬,真是欲哭无泪!"这是一位摄影师曾经面临图片侵权 ...

  5. 各种途径的图片版权保护措施

    随着互联网应用的发展,图片素材的网络化和数字化成为了一种常态,这种现象也使得相应的版权问题应运而生,网络技术的快速发展对网络图片的版权保护产生了前所未有的影响.版权验证,交易和补救是在线图像版权保护的 ...

  6. 巴比特 | 元宇宙每日必读:美版权局判定用AI工具生成的图片不受版权保护,官方解释:AI生成具有不可预测性,但并非一刀切...

    摘要:据GameLook报道,一名图书作者Kristina Kashtanova此前为其创作的漫画书<Zarya of the Dawn>向美国版权局提起注册,书中使用了部分由Midjou ...

  7. 图片版权保护工具ImageCopyRight

    ImagesCopyRight 选择目标图片 设置水印位置 添加水印文字 或者图片水印图片 添加水印特效 保存生成好的特效图片 smartsofthelp 开发辅助工具 下载地址: https://p ...

  8. 爱奇艺视频版权保护技术与维权实践

    随着海量多媒体应用内容的产生,对内容的安全性要求也相应提高.爱奇艺技术产品中心高级经理 陈赫从多个方面介绍了爱奇艺在版权保护上的技术探索与维权实践.本文来自陈赫在LiveVideoStack线上交流分 ...

  9. .NET 产品版权保护方案 (.NET源码加密保护)

    一.   前言 大家好,我是康世杰,大家可以叫我Jason. 我和大家一样,都是搞技术出身,也未当过讲师,所以口材有限,如果讲得不好之处,还希望大家多多海含,谢谢. 今天是我们第一次见面,能认识你们, ...

最新文章

  1. SQL 的Over 子句
  2. 文件格式 tar.gz zip zp2 zip rar
  3. 这只机械手太硬核!失去手指的机械工程师独立打造,网友:赛博朋克,太酷了...
  4. matlab显示mat
  5. c语言普通变量间接访问,C语言学习笔记-指针
  6. 服务器发消息给所有人,我需要服务器向所有客户端(Python、sockets)发送消息...
  7. python处理excel的工具-基于Python的Excel处理工具
  8. 进阶Frida--Android逆向之动态加载dex Hook(三)
  9. 【数据结构与算法】之深入解析“相交链表”的求解思路与算法示例
  10. NOI2006 最大获利
  11. 请问,现在android流行什么开源框架?
  12. idea无法创建class
  13. 【英语之夜】遇见--Peter
  14. Linux系统无法载入nvidia-smi驱动
  15. 验证码图片不显示解决问题
  16. lisp天正图元位置修改_关于图元改层的,请求大佬帮助 - AutoLISP/Visual LISP 编程技术 - CAD论坛 - 明经CAD社区 - Powered by Discuz!...
  17. 肝移植笔记1:论文阅读-对率回归预测移植物失功概率
  18. MAC锁屏不断网(快捷键启用屏保)
  19. 基于中医药知识图谱智能问答(二)
  20. Android -- GridLayoutManager

热门文章

  1. 一组关于温度、性别和心率的数据集分析
  2. 第 4 章 jQuery
  3. 江苏省计算机一级三月份考试时间,江苏省3月计算机考试时间安排
  4. 今天跟蚂蚁金服安全同学聊聊WAF
  5. Python备份文件,复制文件的操作
  6. uvm_tlm_req_rsp_channel
  7. C 如何判断编译器是否支持C90 C99?
  8. 此计算机策略设置不允许安装win,系统管理员设置了系统策略,禁止进行此项安装”windows installer被禁用解决办法...
  9. 企业能耗在线监测系统
  10. 数理方程:二阶线性偏微分方程的分类和标准式