C#图片加文字图片水印.docx

上传人:b****7 文档编号:23897210 上传时间:2023-05-22 格式:DOCX 页数:21 大小:20.17KB
下载 相关 举报
C#图片加文字图片水印.docx_第1页
第1页 / 共21页
C#图片加文字图片水印.docx_第2页
第2页 / 共21页
C#图片加文字图片水印.docx_第3页
第3页 / 共21页
C#图片加文字图片水印.docx_第4页
第4页 / 共21页
C#图片加文字图片水印.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

C#图片加文字图片水印.docx

《C#图片加文字图片水印.docx》由会员分享,可在线阅读,更多相关《C#图片加文字图片水印.docx(21页珍藏版)》请在冰豆网上搜索。

C#图片加文字图片水印.docx

C#图片加文字图片水印

usingSystem;

usingSystem.Drawing;

usingSystem.Drawing.Imaging;

usingSystem.Drawing.Drawing2D;

usingSystem.IO;

///

///图片位置

///

publicenumImagePosition

{

LeftTop,//左上

LeftBottom,//左下

RightTop,//右上

RigthBottom,//右下

TopMiddle,//顶部居中

BottomMiddle,//底部居中

Center//中心

}

///

///水印图片的操作管理DesignbyGaryGongFromD

///

publicclassWaterImageManage

{

///

///生成一个新的水印图片制作实例

///

publicWaterImageManage()

{

//

//TODO:

Addconstructorlogichere

//

}

///

///添加图片水印

///

///源图片文件名

///水印图片文件名

///透明度(0.1-1.0数值越小透明度越高)

///位置

///图片的路径

///返回生成于指定文件夹下的水印文件名

publicstringDrawImage(stringsourcePicture,

stringwaterImage,

floatalpha,

ImagePositionposition,

stringPicturePath)

{

//

//判断参数是否有效

//

if(sourcePicture==string.Empty||waterImage==string.Empty||alpha==0.0||PicturePath==string.Empty)

{

returnsourcePicture;

}

//

//源图片,水印图片全路径

//

stringsourcePictureName=PicturePath+sourcePicture;

stringwaterPictureName=PicturePath+waterImage;

stringfileSourceExtension=System.IO.Path.GetExtension(sourcePictureName).ToLower();

stringfileWaterExtension=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")

{

returnsourcePicture;

}

//

//目标图片名称及全路径

//

stringtargetImage=sourcePictureName.Replace(System.IO.Path.GetExtension(sourcePictureName),"")+"_1101.jpg";

//

//将需要加上水印的图片装载到Image对象中

//

ImageimgPhoto=Image.FromFile(sourcePictureName);

//

//确定其长宽

//

intphWidth=imgPhoto.Width;

intphHeight=imgPhoto.Height;

//

//封装GDI+位图,此位图由图形图像及其属性的像素数据组成。

//

BitmapbmPhoto=newBitmap(phWidth,phHeight,PixelFormat.Format24bppRgb);

//

//设定分辨率

//

bmPhoto.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);

//

//定义一个绘图画面用来装载位图

//

GraphicsgrPhoto=Graphics.FromImage(bmPhoto);

//

//同样,由于水印是图片,我们也需要定义一个Image来装载它

//

ImageimgWatermark=newBitmap(waterPictureName);

//

//获取水印图片的高度和宽度

//

intwmWidth=imgWatermark.Width;

intwmHeight=imgWatermark.Height;

//SmoothingMode:

指定是否将平滑处理(消除锯齿)应用于直线、曲线和已填充区域的边缘。

//成员名称说明

//AntiAlias指定消除锯齿的呈现。

//Default指定不消除锯齿。

//HighQuality指定高质量、低速度呈现。

//HighSpeed指定高速度、低质量呈现。

//Invalid指定一个无效模式。

//None指定不消除锯齿。

grPhoto.SmoothingMode=SmoothingMode.AntiAlias;

//

//第一次描绘,将我们的底图描绘在绘图画面上

//

grPhoto.DrawImage(imgPhoto,

newRectangle(0,0,phWidth,phHeight),

0,

0,

phWidth,

phHeight,

GraphicsUnit.Pixel);

//

//与底图一样,我们需要一个位图来装载水印图片。

并设定其分辨率

//

BitmapbmWatermark=newBitmap(bmPhoto);

bmWatermark.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);

//

//继续,将水印图片装载到一个绘图画面grWatermark

//

GraphicsgrWatermark=Graphics.FromImage(bmWatermark);

//

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

//

ImageAttributesimageAttributes=newImageAttributes();

//

//Colormap:

定义转换颜色的映射

//

ColorMapcolorMap=newColorMap();

//

//我的水印图被定义成拥有绿色背景色的图片被替换成透明

//

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={

newfloat[]{1.0f,0.0f,0.0f,0.0f,0.0f},//red红色

newfloat[]{0.0f,1.0f,0.0f,0.0f,0.0f},//green绿色

newfloat[]{0.0f,0.0f,1.0f,0.0f,0.0f},//blue蓝色

newfloat[]{0.0f,0.0f,0.0f,alpha,0.0f},//透明度

newfloat[]{0.0f,0.0f,0.0f,0.0f,1.0f}};//

//ColorMatrix:

定义包含RGBA空间坐标的5x5矩阵。

//ImageAttributes类的若干方法通过使用颜色矩阵调整图像颜色。

ColorMatrixwmColorMatrix=newColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(wmColorMatrix,ColorMatrixFlag.Default,

ColorAdjustType.Bitmap);

//

//上面设置完颜色,下面开始设置位置

//

intxPosOfWm;

intyPosOfWm;

switch(position)

{

caseImagePosition.BottomMiddle:

xPosOfWm=(phWidth-wmWidth)/2;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.Center:

xPosOfWm=(phWidth-wmWidth)/2;

yPosOfWm=(phHeight-wmHeight)/2;

break;

caseImagePosition.LeftBottom:

xPosOfWm=10;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.LeftTop:

xPosOfWm=10;

yPosOfWm=10;

break;

caseImagePosition.RightTop:

xPosOfWm=phWidth-wmWidth-10;

yPosOfWm=10;

break;

caseImagePosition.RigthBottom:

xPosOfWm=phWidth-wmWidth-10;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.TopMiddle:

xPosOfWm=(phWidth-wmWidth)/2;

yPosOfWm=10;

break;

default:

xPosOfWm=10;

yPosOfWm=phHeight-wmHeight-10;

break;

}

//

//第二次绘图,把水印印上去

//

grWatermark.DrawImage(imgWatermark,

newRectangle(xPosOfWm,

yPosOfWm,

wmWidth,

wmHeight),

0,

0,

wmWidth,

wmHeight,

GraphicsUnit.Pixel,

imageAttributes);

imgPhoto=bmWatermark;

grPhoto.Dispose();

grWatermark.Dispose();

//

//保存文件到服务器的文件夹里面

//

imgPhoto.Save(targetImage,ImageFormat.Jpeg);

imgPhoto.Dispose();

imgWatermark.Dispose();

returntargetImage.Replace(PicturePath,"");

}

///

///在图片上添加水印文字

///

///源图片文件

///需要添加到图片上的文字

///透明度

///位置

///文件路径

///

publicstringDrawWords(stringsourcePicture,

stringwaterWords,

floatalpha,

ImagePositionposition,

stringPicturePath)

{

//

//判断参数是否有效

//

if(sourcePicture==string.Empty||waterWords==string.Empty||alpha==0.0||PicturePath==string.Empty)

{

returnsourcePicture;

}

//

//源图片全路径

//

stringsourcePictureName=PicturePath+sourcePicture;

stringfileExtension=System.IO.Path.GetExtension(sourcePictureName).ToLower();

//

//判断文件是否存在,以及文件名是否正确

//

if(System.IO.File.Exists(sourcePictureName)==false||(

fileExtension!

=".gif"&&

fileExtension!

=".jpg"&&

fileExtension!

=".png"))

{

returnsourcePicture;

}

//

//目标图片名称及全路径

//

stringtargetImage=sourcePictureName.Replace(System.IO.Path.GetExtension(sourcePictureName),"")+"_0703.jpg";

//创建一个图片对象用来装载要被添加水印的图片

ImageimgPhoto=Image.FromFile(sourcePictureName);

//获取图片的宽和高

intphWidth=imgPhoto.Width;

intphHeight=imgPhoto.Height;

//

//建立一个bitmap,和我们需要加水印的图片一样大小

BitmapbmPhoto=newBitmap(phWidth,phHeight,PixelFormat.Format24bppRgb);

//SetResolution:

设置此Bitmap的分辨率

//这里直接将我们需要添加水印的图片的分辨率赋给了bitmap

bmPhoto.SetResolution(imgPhoto.HorizontalResolution,imgPhoto.VerticalResolution);

//Graphics:

封装一个GDI+绘图图面。

GraphicsgrPhoto=Graphics.FromImage(bmPhoto);

//设置图形的品质

grPhoto.SmoothingMode=SmoothingMode.AntiAlias;

//将我们要添加水印的图片按照原始大小描绘(复制)到图形中

grPhoto.DrawImage(

imgPhoto,//要添加水印的图片

newRectangle(0,0,phWidth,phHeight),//根据要添加的水印图片的宽和高

0,//X方向从0点开始描绘

0,//Y方向

phWidth,//X方向描绘长度

phHeight,//Y方向描绘长度

GraphicsUnit.Pixel);//描绘的单位,这里用的是像素

//根据图片的大小我们来确定添加上去的文字的大小

//在这里我们定义一个数组来确定

int[]sizes=newint[]{16,14,12,10,8,6,4};

//字体

FontcrFont=null;

//矩形的宽度和高度,SizeF有三个属性,分别为Height高,width宽,IsEmpty是否为空

SizeFcrSize=newSizeF();

//利用一个循环语句来选择我们要添加文字的型号

//直到它的长度比图片的宽度小

for(inti=0;i<7;i++)

{

crFont=newFont("arial",sizes[i],FontStyle.Bold);

//测量用指定的Font对象绘制并用指定的StringFormat对象格式化的指定字符串。

crSize=grPhoto.MeasureString(waterWords,crFont);

//ushort关键字表示一种整数数据类型

if((ushort)crSize.Width<(ushort)phWidth)

break;

}

//截边5%的距离,定义文字显示(由于不同的图片显示的高和宽不同,所以按百分比截取)

intyPixlesFromBottom=(int)(phHeight*.05);

//定义在图片上文字的位置

floatwmHeight=crSize.Height;

floatwmWidth=crSize.Width;

floatxPosOfWm;

floatyPosOfWm;

switch(position)

{

caseImagePosition.BottomMiddle:

xPosOfWm=phWidth/2;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.Center:

xPosOfWm=phWidth/2;

yPosOfWm=phHeight/2;

break;

caseImagePosition.LeftBottom:

xPosOfWm=wmWidth;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.LeftTop:

xPosOfWm=wmWidth/2;

yPosOfWm=wmHeight/2;

break;

caseImagePosition.RightTop:

xPosOfWm=phWidth-wmWidth-10;

yPosOfWm=wmHeight;

break;

caseImagePosition.RigthBottom:

xPosOfWm=phWidth-wmWidth-10;

yPosOfWm=phHeight-wmHeight-10;

break;

caseImagePosition.TopMiddle:

xPosOfWm=phWidth/2;

yPosOfWm=wmWidth;

break;

default:

xPosOfWm=wmWidth;

yPosOfWm=phHeight-wmHeight-10;

break;

}

//封装文本布局信息(如对齐、文字方向和Tab停靠位),显示操作(如省略号插入和国家标准(National)数字替换)和OpenType功能。

StringFormatStrFormat=newStringFormat();

//定义需要印的文

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1