图片去水印软件怎么加水印

在项目中先创建一个Imag_writer 类库
在该类库下分别创建两个枚举类型WaterMarkType (水印的类型)、WaterMarkPosition (水印的位置)。代码如下:
using System.Collections.G
using System.L
using System.T
namespace Imag_writer
/// &summary&
/// 水印的类型
/// &/summary&
public enum WaterMarkType
/// &summary&
/// 文字水印
/// &/summary&
/// &summary&
/// 图片水印
/// &/summary&
ImageMark // 暂时只能添加文字水印
using System.Collections.G
using System.L
using System.T
namespace Imag_writer
/// &summary&
/// 水印的位置
/// &/summary&
public enum WaterMarkPosition
/// &summary&
/// 左上角
/// &/summary&
WMP_Left_Top,
/// &summary&
/// 左下角
/// &/summary&
WMP_Left_Bottom,
/// &summary&
/// 右上角
/// &/summary&
WMP_Right_Top,
/// &summary&
/// 右下角
/// &/summary&
WMP_Right_Bottom
再创建一个ImageWaterMark 类(用来处理图片添加水印的类),代码如下:
using System.Collections.G
using System.L
using System.T
using System.IO;
using System.C
using System.D
using System.Drawing.Drawing2D;
using System.Drawing.I
namespace Imag_writer
//// &summary&
/// 处理图片的类(包括加水印,生成缩略图)
/// &/summary&
public class ImageWaterMark
public ImageWaterMark()
// TODO: 在此处添加构造函数逻辑
/// &summary&
/// 添加水印(分图片水印与文字水印两种)
/// &/summary&
/// &param name="oldpath"&原图片绝对地址&/param&
/// &param name="newpath"&新图片放置的绝对地址(不可与原图片名相同)&/param&
/// &param name="wmtType"&要添加的水印的类型&/param&
/// &param name="sWaterMarkContent"&水印内容,此即为要添加的文字&/param&
public void AddWaterMarkText(string oldpath, string newpath,WaterMarkType wmtType, string sWaterMarkContent)
Image image = Image.FromFile(oldpath);
Bitmap b = new Bitmap(image.Width, image.Height,PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(b);
g.Clear(Color.White);
g.SmoothingMode = SmoothingMode.HighQ
g.InterpolationMode = InterpolationMode.H
g.DrawImage(image, 0, 0, image.Width, image.Height);
switch (wmtType)
/*case WaterMarkType.ImageMark:
//图片水印
this.addWatermarkImage(g,
Page.Server.MapPath(Watermarkimgpath),
WatermarkPosition,image.Width,image.Height);
case WaterMarkType.TextMark:
//文字水印
this.addWatermarkText(g, sWaterMarkContent, "WM_BOTTOM_RIGHT",
image.Width, image.Height);
b.Save(newpath);
b.Dispose();
image.Dispose();
if (File.Exists(oldpath))
//File.Delete(oldpath);
if (File.Exists(oldpath))
// File.Delete(oldpath);
//--------------------------------------------------------------------------------------
/// 在图片上生成图片水印
&/summary&
&param name="Path"&原服务器图片路径 &/param&
&param name="Path_syp"&生成的带图片水印的图片路径 &/param&
&param name="Path_sypf"&水印图片路径 &/param&
public void AddWaterPic(string Path, string Path_syp, string Path_sypf)
Image image = Image.FromFile(Path);
Image copyImage = Image.FromFile(Path_sypf);
Graphics g = Graphics.FromImage(image);
Rectangle rect = new Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height);
g.DrawImage(copyImage, rect, 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
g.Dispose();
image.Save(Path_syp);
image.Dispose();
// 给图片加水印#region 给图片加水印
/// &summary&
/// 添加水印(分图片水印与文字水印两种)
/// &/summary&
/// &param name="oldpath"&原图片绝对地址&/param&
/// &param name="newpath"&新图片放置的绝对地址(不可与原图片名相同)&/param&
/// &param name="wmtType"&要添加的水印的类型&/param&
/// &param name="sWaterMarkContent"&水印内容,若添加文字水印,此即为要添加的文字;
/// 若要添加图片水印,此为图片的路径(图片水印暂不可用)&/param&
public void addWaterMark(string oldpath, string newpath,
WaterMarkType wmtType, string sWaterMarkContent)
Image image = Image.FromFile(oldpath);
Bitmap b = new Bitmap(image.Width, image.Height,
PixelFormat.Format24bppRgb);
Graphics g = Graphics.FromImage(b);
g.Clear(Color.White);
g.SmoothingMode = SmoothingMode.HighQ
g.InterpolationMode = InterpolationMode.H
g.DrawImage(image, 0, 0, image.Width, image.Height);
switch (wmtType)
/**//*case WaterMarkType.ImageMark:
//图片水印
this.addWatermarkImage(g,
Page.Server.MapPath(Watermarkimgpath),
WatermarkPosition,image.Width,image.Height);
case WaterMarkType.TextMark:
//文字水印
this.addWatermarkText(g, sWaterMarkContent, "WM_BOTTOM_RIGHT",
image.Width, image.Height);
b.Save(newpath);
b.Dispose();
image.Dispose();
if(File.Exists(oldpath))
//File.Delete(oldpath);
if(File.Exists(oldpath))
// File.Delete(oldpath);
/**//// &summary&
加水印文字
/// &/summary&
/// &param name="picture"&imge 对象&/param&
/// &param name="_watermarkText"&水印文字内容&/param&
/// &param name="_watermarkPosition"&水印位置&/param&
/// &param name="_width"&被加水印图片的宽&/param&
/// &param name="_height"&被加水印图片的高&/param&
private void addWatermarkText(Graphics picture, string _watermarkText,
string _watermarkPosition, int _width, int _height)
// 确定水印文字的字体大小
int[] sizes = new int[]{32, 30, 28, 26, 24, 22, 20, 18, 16, 14, 12, 10, 8, 6, 4};
Font crFont = null;
SizeF crSize = new SizeF();
for (int i = 0;i & sizes.L i++)
crFont = new Font("Arial Black", sizes[i], FontStyle.Bold);
crSize = picture.MeasureString(_watermarkText, crFont);
if((ushort)crSize.Width & (ushort)_width)
// 生成水印图片(将文字写到图片中)
Bitmap floatBmp = new Bitmap((int)crSize.Width + 3,
(int)crSize.Height + 3, PixelFormat.Format32bppArgb);
Graphics fg=Graphics.FromImage(floatBmp);
PointF pt=new PointF(0,0);
// 画阴影文字
Brush TransparentBrush0 = new SolidBrush(Color.FromArgb(255, Color.Black));
Brush TransparentBrush1 = new SolidBrush(Color.FromArgb(255, Color.Black));
fg.DrawString(_watermarkText,crFont,TransparentBrush0, pt.X, pt.Y + 1);
fg.DrawString(_watermarkText,crFont,TransparentBrush0, pt.X + 1, pt.Y);
fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X + 1, pt.Y + 1);
fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X, pt.Y + 2);
fg.DrawString(_watermarkText,crFont,TransparentBrush1, pt.X + 2, pt.Y);
TransparentBrush0.Dispose();
TransparentBrush1.Dispose();
fg.SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.HighQ
fg.DrawString(_watermarkText,
crFont, new SolidBrush(Color.White),
pt.X, pt.Y, StringFormat.GenericDefault);
// 保存刚才的操作
fg.Save();
fg.Dispose();
// floatBmp.Save("d://WebSite//DIGITALKM//ttt.jpg");
// 将水印图片加到原图中
this.addWatermarkImage(
new Bitmap(floatBmp),
"WM_BOTTOM_RIGHT",
/**//// &summary&
加水印图片
/// &/summary&
/// &param name="picture"&imge 对象&/param&
/// &param name="iTheImage"&Image对象(以此图片为水印)&/param&
/// &param name="_watermarkPosition"&水印位置&/param&
/// &param name="_width"&被加水印图片的宽&/param&
/// &param name="_height"&被加水印图片的高&/param&
private void addWatermarkImage( Graphics picture,Image iTheImage,
string _watermarkPosition,int _width,int _height)
Image watermark = new Bitmap(iTheImage);
ImageAttributes imageAttributes = new ImageAttributes();
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},
new float[] {0.0f, 1.0f, 0.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 1.0f, 0.0f, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, 0.3f, 0.0f},
new float[] {0.0f, 0.0f, 0.0f, 0.0f, 1.0f}
ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);
imageAttributes.SetColorMatrix(colorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);
int xpos = 0;
int ypos = 0;
int WatermarkWidth = 0;
int WatermarkHeight = 0;
double bl = 1d;
//计算水印图片的比率
//取背景的1/4宽度来比较
if ((_width & watermark.Width * 4) && (_height & watermark.Height * 4))
else if ((_width & watermark.Width * 4) && (_height&watermark.Height * 4))
bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height);
else if ((_width & watermark.Width * 4) && (_height & watermark.Height * 4))
bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width);
if ((_width * watermark.Height) & (_height * watermark.Width))
bl = Convert.ToDouble(_height / 4) / Convert.ToDouble(watermark.Height);
bl = Convert.ToDouble(_width / 4) / Convert.ToDouble(watermark.Width);
WatermarkWidth = Convert.ToInt32(watermark.Width * bl);
WatermarkHeight = Convert.ToInt32(watermark.Height * bl);
switch (_watermarkPosition)
case "WM_TOP_LEFT":
xpos = 10;
ypos = 10;
case "WM_TOP_RIGHT":
xpos = _width - WatermarkWidth - 10;
ypos = 10;
case "WM_BOTTOM_RIGHT":
xpos = _width - WatermarkWidth - 10;
ypos = _height -WatermarkHeight - 10;
case "WM_BOTTOM_LEFT":
xpos = 10;
ypos = _height - WatermarkHeight - 10;
picture.DrawImage(
watermark,
new Rectangle(xpos, ypos, WatermarkWidth, WatermarkHeight),
watermark.Width,
watermark.Height,
GraphicsUnit.Pixel,
imageAttributes);
watermark.Dispose();
imageAttributes.Dispose();
/**//// &summary&
加水印图片
/// &/summary&
/// &param name="picture"&imge 对象&/param&
/// &param name="WaterMarkPicPath"&水印图片的地址&/param&
/// &param name="_watermarkPosition"&水印位置&/param&
/// &param name="_width"&被加水印图片的宽&/param&
/// &param name="_height"&被加水印图片的高&/param&
private void addWatermarkImage( Graphics picture,string WaterMarkPicPath,
string _watermarkPosition,int _width,int _height)
Image watermark = new Bitmap(WaterMarkPicPath);
this.addWatermarkImage(picture, watermark, _watermarkPosition, _width,
//生成缩略图#region 生成缩略图
/**//// &summary&
/// 保存图片
/// &/summary&
/// &param name="image"&Image 对象&/param&
/// &param name="savePath"&保存路径&/param&
/// &param name="ici"&指定格式的编解码参数&/param&
private void SaveImage(Image image, string savePath, ImageCodecInfo ici)
//设置 原图片 对象的 EncoderParameters 对象
EncoderParameters parameters = new EncoderParameters(1);
parameters.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, ((long) 90));
image.Save(savePath, ici, parameters);
parameters.Dispose();
/**//// &summary&
/// 获取图像编码解码器的所有相关信息
/// &/summary&
/// &param name="mimeType"&包含编码解码器的多用途网际邮件扩充协议 (MIME) 类型的字符串&/param&
/// &returns&返回图像编码解码器的所有相关信息&/returns&
private ImageCodecInfo GetCodecInfo(string mimeType)
ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders();
foreach(ImageCodecInfo ici in CodecInfo)
if(ici.MimeType == mimeType)
return null;
/**//// &summary&
/// 生成缩略图
/// &/summary&
/// &param name="sourceImagePath"&原图片路径(相对路径)&/param&
/// &param name="thumbnailImagePath"&生成的缩略图路径,如果为空则保存为原图片路径(相对路径)&/param&
/// &param name="thumbnailImageWidth"&缩略图的宽度(高度与按源图片比例自动生成)&/param&
public void ToThumbnailImages(
string SourceImagePath,
string ThumbnailImagePath,
int ThumbnailImageWidth)
Hashtable htmimes = new Hashtable();
htmimes[".jpeg"] = "image/jpeg";
htmimes[".jpg"] = "image/jpeg";
htmimes[".png"] = "image/png";
htmimes[".tif"] = "image/tiff";
htmimes[".tiff"] = "image/tiff";
htmimes[".bmp"] = "image/bmp";
htmimes[".gif"] = "image/gif";
// 取得原图片的后缀
string sExt = SourceImagePath.Substring(
SourceImagePath.LastIndexOf(".")).ToLower();
//从 原图片 创建 Image 对象
Image image = Image.FromFile(SourceImagePath);
int num = ((ThumbnailImageWidth / 4) * 3);
int width = image.W
int height = image.H
//计算图片的比例
if ((((double) width) / ((double) height)) &= 1.3333f)
num = ((height * ThumbnailImageWidth) / width);
ThumbnailImageWidth = ((width * num) / height);
if ((ThumbnailImageWidth & 1) || (num & 1))
//用指定的大小和格式初始化 Bitmap 类的新实例
Bitmap bitmap = new Bitmap(ThumbnailImageWidth, num,
PixelFormat.Format32bppArgb);
//从指定的 Image 对象创建新 Graphics 对象
Graphics graphics = Graphics.FromImage(bitmap);
//清除整个绘图面并以透明背景色填充
graphics.Clear(Color.Transparent);
graphics.SmoothingMode = SmoothingMode.HighQ
graphics.InterpolationMode = InterpolationMode.H
//在指定位置并且按指定大小绘制 原图片 对象
graphics.DrawImage(image, new Rectangle(0, 0, ThumbnailImageWidth, num));
image.Dispose();
//将此 原图片 以指定格式并用指定的编解码参数保存到指定文件
SaveImage(bitmap, ThumbnailImagePath,
GetCodecInfo((string)htmimes[sExt]));
catch(System.Exception e)
最后在客户端调用时的代码如下( 在页面加载时去处理添加图片水印,也可以根据自己的需要去写要某个事件中):
protected void Page_Load(object sender, EventArgs e)
//新的文件名称
string newfileName = Server.MapPath("img/") + DateTime.Now.Millisecond + "" + DateTime.Now.Second + ".jpg";
ImageWaterMark iwm = new ImageWaterMark();
//原图片路径,新图片路径,要添加的水印类型,要添加的文字内容或是水印图片的路径(加图片水印时用到的)
iwm.addWaterMark(Server.MapPath("img/Chrysanthemum.jpg"), newfileName, WaterMarkType.TextMark, "shiqiang");
阅读(...) 评论()用PS在图片中添加水印
本节介绍用PS在图片中添加水印
1.打开一张图片
2.选择文本工具,在图片上点击,输入文字,并移好位置。
3.在图层面板中把“不透明度”改小。
4.如果要旋转文字,先栅格化图层,右键点击文字图层,选择下拉菜单中的“栅格化图层”。
5.选择主菜单中“编辑”下的自由变换,就可实现旋转了。
6.添加图片水印。在主菜单中点击“图层”下的“打开图片到图层”,打开水印图片。
7.选择移动工具,把水印图片移好位置
8.在图层面板中把修改“不透明度”。
更多教程&&&&&&&&&&&&&&&&&&&&
QQ在线帮助当前位置:
[task]前两天给大家推荐了一款”的工具,传送门:
但是只能添加静态图片水印,处理动态图片的话,只能截取第一帧画面。[/task]
所以,现在给大家推荐一款给动态GIF图片添加水印的工具,下载地址往下翻。
这款软件名字为”Image ready”,是一款处理网络图形为主的图像编辑软件,今天我们就用这款软件来实现对动态GIF图片添加水印的操作。
当然软件还有其他很多功能,感兴趣的朋友可以自行研究,这里就不再介绍了。
动态GIF图片添加水印步骤:
1.打开软件,选择”文件”下面的”打开”选项,打开需要添加水印的动态GIF图片。
2.单击左侧”条形工具栏”中的”文字”工具(大写T),如下图所示:
3.在图片适当位置单击鼠标,输入要添加的水印文字。
4.选择”主面板”上面的”四联”选项卡,选择优化效果最好的一个(也就是文字水印最清晰的)
5.单击”文件”菜单下面的”将优化结果存储为”选项,保存图片到适当位置。
6.大功告成,浏览一下自己的杰作吧。
[Downlink href=’/s/1o6jZCIQ’]软件下载地址[/Downlink]The page is temporarily unavailable
nginx error!
The page you are looking for is temporarily unavailable.
Please try again later.
Website Administrator
Something has triggered an error on your
This is the default error page for
nginx that is distributed with
It is located
/usr/share/nginx/html/50x.html
You should customize this error page for your own
site or edit the error_page directive in
the nginx configuration file
/etc/nginx/nginx.conf.当前位置:
→ 图片怎么加水印-美图淘淘瞬间给图片加水印
本类常用软件
下载量:584204
下载量:416902
下载量:366961
下载量:365699
下载量:325855
图片怎么加水印-美图淘淘瞬间给图片加水印
11:21:49&&出处:&&&人气:1726次&&&&字号:&&&&
类别: 图像处理 &&&大小:2.7M
&&&语言: 中文
一、批量导入图片到美图淘淘首先大家将要处理的图片批量导入美图淘淘中,美图淘淘拥有一键批量导入功能,所以大家可以轻松导入大量图片哦。如下图所示,大家只需点击“批量导入图片”这个按钮,这样就可以将大量的图片导入啦!二、为图片批量添加文字水印美图淘淘这款软件拥有两种自由的水印添加方法,小编今天主要介绍的的方法是自行输入文字法。美图淘淘具有文字编辑的功能,大家可以随心所欲的为图片输入自己想要的文字样式,另外,文字在图片上的位置以及大小都是可以调整的哦!当有了水印内容后,我们接下来要做的就是调整水印的效果啦!大家可以在美图淘淘的“素材编辑”中来调整水印部分在图片中的透明度哦,小编觉得水印部分应该是要以不影响图片的整体观看效果为原则。因为只有这样,才能使图片主体的美感得到展示,同时也能呈现水印的内容哦。如下图所示:另外,要跟大家提一下的是,当大家对批量处理的任意一张图片进行水印处理时,那么其他的图片都会默认为相同的效果哦,这样也就不需要大家进行重复操作了,真的很方便哦!三、批量应用水印效果当然以上的功能都属于基本功能啦,美图淘淘还有一个特别的功能,那就是大家可以把当前制作好的文字内容保存为水印图片,那么怎么保存呢?很简单,大家只要点击素材编辑框右下角的“存为水印”这个按钮就可以实现了哦!那么当下次大家需要使用同样水印的时候,只需进入“水印”功能页面,就可以轻松调用了哦!如下图所示:除了可以调用自己之前保存的水印外,大家还可以通过单击“新增水印”按钮,把自己制作的或者是从网络上下载的其他水印图片直接导入哦~相信大家如果使用美图淘淘这款软件的话应该就再也不用为一些基本的图片处理而发愁了哦!
江苏盐城明达职业技术学院 网友 客人 发表于:
可以加我QQ吗?有问题请&#990
东坡下载 & 分享互联网
Copyright(C)
All Rights Reserved! 网站备案/许可证号:鄂ICP备号-1

我要回帖

更多关于 图片去水印软件 的文章

 

随机推荐