读书人

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

发布时间: 2011-12-27 22:22:55 作者: rapoo

在图片上加水印有点问题
//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();

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

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

读书人网 >C#

热点推荐