首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

在图片上加水印有点有关问题

2011-12-27 
在图片上加水印有点问题//add_certify.aspx页面的内容如下:%@PageLanguage C# ResponseEncoding gb2

在图片上加水印有点问题
//add_certify.aspx页面的内容如下:
<%@   Page     Language= "C# "     ResponseEncoding= "gb2312 "   src= "add_certify.aspx.cs "   Inherits= "namespace.classname "%>  
<script   runat= "server ">
protected   void   Page_load(Object   Src,   EventArgs   E)  
{
................
}
void   UploadBtn_Click(Object   sender,EventArgs   e)
{  
AddTextToImg( "../img/1.gif ", "Family.Man ");  
}
</script>

//add_certify.aspx.cs页面的内容如下:
using   System.Drawing;  
using   System.IO;  
using   System.Drawing.Imaging;  

private   void   AddTextToImg(string   fileName,string   text)  
{  
 if(!File.Exists(MapPath(fileName)))  
 {  
  throw   new   FileNotFoundException( "The   file   don 't   exist! ");  
 }  

 if(   text   ==   string.Empty   )  
 {  
  return;  
 }  
 //还需要判断文件类型是否为图像类型,这里就不赘述了  

 System.Drawing.Image   image   =   System.Drawing.Image.FromFile(MapPath(fileName));  
 Bitmap   bitmap   =   new   Bitmap(image,image.Width,image.Height);  
 Graphics   g   =   Graphics.FromImage(bitmap);  

 float   fontSize   =   12.0f;   //字体大小  
 float   textWidth   =   text.Length*fontSize;   //文本的长度  
 //下面定义一个矩形区域,以后在这个矩形里画上白底黑字  
 float   rectX   =   0;  
 float   rectY   =   0;  
 float   rectWidth   =   text.Length*(fontSize+8);  
 float   rectHeight   =   fontSize+8;  
 //声明矩形域  
 RectangleF   textArea   =   new   RectangleF(rectX,rectY,rectWidth,rectHeight);  

 Font   font   =   new   Font( "宋体 ",fontSize);   //定义字体  
 Brush   whiteBrush   =   new   SolidBrush(Color.White);   //白笔刷,画文字用  
 Brush   blackBrush   =   new   SolidBrush(Color.Black);   //黑笔刷,画背景用  

 g.FillRectangle(blackBrush,rectX,rectY,rectWidth,rectHeight);  

 g.DrawString(text,font,whiteBrush,textArea);  
 MemoryStream   ms   =   new   MemoryStream(   );  
 //保存为Jpg类型  
 bitmap.Save(ms,ImageFormat.Jpeg);  

 //输出处理后的图像,这里为了演示方便,我将图片显示在页面中了  
 Response.Clear();  
 Response.ContentType   =   "image/jpeg ";  
 Response.BinaryWrite(   ms.ToArray()   );  

 g.Dispose();   
 bitmap.Dispose();  
 image.Dispose();  
}  

我对c#不是很熟悉(上面这些是用在web上的),我调试的时候的错误信息是:
编译器错误信息:   CS0116:   命名空间并不直接包含诸如字段或方法之类的成员

[解决办法]

[解决办法]
友情帮定一下
[解决办法]
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;

namespace Tutorial
{
class WaterMark
{

[STAThread]
static void Main(string[] args)
{
//set a working directory
string WorkingDirectory = @ "C:\Documents and Settings\administrator.JAZZMINE\My Documents\Projects\Tutorials\WaterMark ";



//define a string of text to use as the Copyright message
string Copyright = "Copyright ?2002 - AP Photo/David Zalubowski ";

//create a image object containing the photograph to watermark
Image imgPhoto = Image.FromFile(WorkingDirectory + "\\watermark_photo.jpg ");
int phWidth = imgPhoto.Width;
int phHeight = imgPhoto.Height;

//create a Bitmap the Size of the original photograph
Bitmap bmPhoto = new Bitmap(phWidth, phHeight, PixelFormat.Format24bppRgb);

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

//load the Bitmap into a Graphics object
Graphics grPhoto = Graphics.FromImage(bmPhoto);

//create a image object containing the watermark
Image imgWatermark = new Bitmap(WorkingDirectory + "\\watermark.bmp ");
int wmWidth = imgWatermark.Width;
int wmHeight = imgWatermark.Height;

//------------------------
//Step #1 - Insert Copyright message
//------------------------

//Set the rendering quality for this Graphics object
grPhoto.SmoothingMode = SmoothingMode.AntiAlias;

//Draws the photo Image object at original size to the graphics object.
grPhoto.DrawImage(
imgPhoto, // Photo Image object
new Rectangle(0, 0, phWidth, phHeight), // Rectangle structure
0, // x-coordinate of the portion of the source image to draw.
0, // y-coordinate of the portion of the source image to draw.
phWidth, // Width of the portion of the source image to draw.
phHeight, // Height of the portion of the source image to draw.
GraphicsUnit.Pixel); // Units of measure

//-------------------------------------------------------
//to maximize the size of the Copyright message we will
//test multiple Font sizes to determine the largest posible
//font we can use for the width of the Photograph
//define an array of point sizes you would like to consider as possiblities
//-------------------------------------------------------
int[] sizes = new int[]{16,14,12,10,8,6,4};

Font crFont = null;
SizeF crSize = new SizeF();

//Loop through the defined sizes checking the length of the Copyright string
//If its length in pixles is less then the image width choose this Font size.
for (int i=0 ;i <7; i++)
{
//set a Font object to Arial (i)pt, Bold
crFont = new Font( "arial ", sizes[i], FontStyle.Bold);
//Measure the Copyright string in this Font
crSize = grPhoto.MeasureString(Copyright, crFont);

if((ushort)crSize.Width < (ushort)phWidth)
break;
}

//Since all photographs will have varying heights, determine a
//position 5% from the bottom of the image
int yPixlesFromBottom = (int)(phHeight *.05);

//Now that we have a point size use the Copyrights string height
//to determine a y-coordinate to draw the string of the photograph
float yPosFromBottom = ((phHeight - yPixlesFromBottom)-(crSize.Height/2));

//Determine its x-coordinate by calculating the center of the width of the image
float xCenterOfImg = (phWidth/2);

//Define the text layout by setting the text alignment to centered
StringFormat StrFormat = new StringFormat();
StrFormat.Alignment = StringAlignment.Center;

//define a Brush which is semi trasparent black (Alpha set to 153)


SolidBrush semiTransBrush2 = new SolidBrush(Color.FromArgb(153, 0, 0, 0));

//Draw the Copyright string
grPhoto.DrawString(Copyright, //string of text
crFont, //font
semiTransBrush2, //Brush
new PointF(xCenterOfImg+1,yPosFromBottom+1), //Position
StrFormat);

//define a Brush which is semi trasparent white (Alpha set to 153)
SolidBrush semiTransBrush = new SolidBrush(Color.FromArgb(153, 255, 255, 255));

//Draw the Copyright string a second time to create a shadow effect
//Make sure to move this text 1 pixel to the right and down 1 pixel
grPhoto.DrawString(Copyright, //string of text
crFont, //font
semiTransBrush, //Brush
new PointF(xCenterOfImg,yPosFromBottom), //Position
StrFormat); //Text alignment



//------------------------
//Step #2 - Insert Watermark image
//------------------------


[解决办法]
你加上
simage.Dispose();
oldimage.Dispose();

加在
//===================水印图片结束==============================
的上面就行

但你这个程序好象不怎么合理

热点排行