C# 添加图片水印类实现代码

 更新时间:2009年05月20日 00:45:41   作者:  
图片水印类实现代码,需要的朋友可以参考下。
复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;
using System.Web;
using System.Drawing.Drawing2D;
using System.Reflection;
namespace Chen
{
public class warterPic
{
/// <summary>
/// 给图片上水印
/// </summary>
/// <param name="filepath">原图片地址</param>
/// <param name="waterfile">水印图片地址</param>
///
public void markwater(string filepath, string waterfile)
{
//gif不水印
int i = filepath.LastIndexOf(".");
string ex = filepath.Substring(i, filepath.Length - i);
if (string.Compare(ex, ".gif", true) == 0)
{
return;
}
string modifyimagepath = filepath;//修改的图像路径
int lucencypercent = 25;
Image modifyimage = null;
Image drawedimage = null;
Graphics g = null;
try
{
//建立图形对象
modifyimage = Image.FromFile(modifyimagepath, true);
drawedimage = Image.FromFile(waterfile, true);
g = Graphics.FromImage(modifyimage);
//获取要绘制图形坐标
int x = modifyimage.Width - drawedimage.Width;
int y = modifyimage.Height - drawedimage.Height; //设置颜色矩阵
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)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), 10, 10, drawedimage.Width, drawedimage.Height, GraphicsUnit.Pixel, imgattr); //保存文件
string[] allowimagetype ={ ".jpg", ".gif", ".png", ".bmp", ".tiff", ".wmf", ".ico" };
FileInfo fi = new FileInfo(modifyimagepath);
ImageFormat imagetype = ImageFormat.Gif;
switch (fi.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;
//File.Delete(modifyimagepath);
fs = new FileStream(modifyimagepath, FileMode.Create, FileAccess.Write);
if (fs != null)
{
fs.Write(imgdata, 0, imgdata.Length);
fs.Close();
}
}
finally
{
try
{
drawedimage.Dispose();
modifyimage.Dispose();
g.Dispose();
}
catch
{ }
}
}
}
}

相关文章

  • 压力测试中需要掌握的几个基本概念

    压力测试中需要掌握的几个基本概念

    一个asp.net的页面。对于压力测试,必须时时刻刻做,如果不知道自己的应用能够承载多少的并发用户数,那基本上就是在扔定时炸弹
    2011-09-09
  • 浅谈.Net中的序列化和反序列化

    浅谈.Net中的序列化和反序列化

    这篇文章主要介绍了.Net中的序列化和反序列化的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 值类型和引用类型的区别深入理解

    值类型和引用类型的区别深入理解

    值类型通常被分配在栈上,它的变量直接包含变量的实例,使用效率比较高;引用类型分配在托管堆上,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例,需要的朋友可以了解下
    2012-12-12
  • ASP.NET MVC实现横向展示购物车

    ASP.NET MVC实现横向展示购物车

    这篇文章介绍了ASP.NET MVC实现横向展示购物车的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • ASP.NET生成树形显示的GridView实现思路

    ASP.NET生成树形显示的GridView实现思路

    生成树形结构的表格数据(EasyUI也有TreeGrid,此处只是提供一个思路),可以扩展单击展开/收缩节点,喜欢的朋友可以了解下啊,或许本文对你学习GridView有所帮助
    2013-02-02
  • ASP.NET 4.0配置文件中的ClientIDMode属性详解

    ASP.NET 4.0配置文件中的ClientIDMode属性详解

    在ASP.NET 4.0中的每个控件上都多了一个叫做ClientIDMode的属性,本文主要介绍了ASP.NET 4.0配置文件中的ClientIDMode属性详解,非常具有实用价值,需要的朋友可以参考下
    2018-11-11
  • asp.net音频转换之.amr转.mp3(利用ffmpeg转换法)

    asp.net音频转换之.amr转.mp3(利用ffmpeg转换法)

    AMR转MP3可实现将手机上的AMR录音转换成流行的MP3格式,以适用更广泛的应用。AMR的体积非常小,适用于存储在手机中,当我们想将在手机上的音频上传到网络,就需要将其转换成MP3等流行的格式,本文就是介绍asp.net利用ffmpeg转换法将.amr转.mp3的方法,下面来一起看看吧。
    2016-12-12
  • .NET Framework 的项目如何使用 FTP 下载文件

    .NET Framework 的项目如何使用 FTP 下载文件

    本文专门针对面向 .NET Framework 的项目, 对于面向 .NET 6 及更高版本的项目,不再支持 FTP,此示例演示如何从 FTP 服务器下载文件,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • ASP.Net的Application介绍

    ASP.Net的Application介绍

    注:这个事件,写不写On是一样的。如Application_End与Application_OnEnd是一样的
    2013-07-07
  • 使用DataAdapter填充多个表(利用DataRelation)的实例代码

    使用DataAdapter填充多个表(利用DataRelation)的实例代码

    使用DataAdapter填充多个表(利用DataRelation)的实例代码,需要的朋友可以参考一下
    2013-03-03

最新评论