public abstract class PicUpload
19 ...{
20 /**//// <summary>
21 /// 类型
22 /// </summary>
23 protected readonly string[] availExtension =...{ "jpg","gif","png","jpeg","bmp" };
24 /**//// <summary>
25 /// 大小
26 /// </summary>
27 protected readonly int size = 1024 * 5 * 1000;
28 /**//// <summary>
29 /// 根目录
30 /// </summary>
31 protected string RootDir
32 ...{
33 get
34 ...{
35 return JuSNS.Config.UiConfig.RootDir;
36 }
37 }
38 private string _server;
39 /**//// <summary>
40 /// 要上传到的服务器
41 /// </summary>
42 public string server
43 ...{
44 get ...{ return _server; }
45 set ...{ _server = value; }
46 }
47 /**//// <summary>
48 /// 上传的文件
49 /// </summary>
50 protected HttpFileCollection hfc;
51 /**//// <summary>
52 /// 输出的文件名
53 /// </summary>
54 public string OutFileName
55 ...{
56 get ...{ return _FileName[_FileName.Length - 1]; }
57 }
58 protected int _SuccessNum;
59 /**//// <summary>
60 /// 上传成功数量
61 /// </summary>
62 public int SuccessNum
63 ...{
64 get ...{ return _SuccessNum; }
65 }
66 protected int[] _Width;
67 /**//// <summary>
68 /// 输出图片的宽度
69 /// </summary>
70 public int[] Width
71 ...{
72 get ...{ return _Width; }
73 }
74 protected int[] _Height;
75 /**//// <summary>
76 /// 输出图片的高度
77 /// </summary>
78 public int[] Height
79 ...{
80 get ...{ return _Height; }
81 }
82 /**//// <summary>
83 /// 输入最后一个图片的高
84 /// </summary>
85 public int LastHeight
86 ...{
87 get ...{ return _Height[_Height.Length - 1]; }
88 }
89 /**//// <summary>
90 /// 输出最后一个图片的宽
91 /// </summary>
92 public int LastWidth
93 ...{
94 get ...{ return _Width[_Width.Length - 1]; }
95 }
96 protected string[] _FileName;
97 /**//// <summary>
98 /// 输出的文件名
99 /// </summary>
100 public string[] FileName
101 ...{
102 get ...{ return _FileName; }
103 }
104 protected int[] _ContentLength;
105 /**//// <summary>
106 /// 图片内存大小
107 /// </summary>
108 public int[] ContentLength
109 ...{
110 get ...{ return _ContentLength; }
111 }
112 /**//// <summary>
113 /// 最后一个图片内存大小
114 /// </summary>
115 public int LastContentLength
116 ...{
117 get ...{ return _ContentLength[_ContentLength.Length - 1]; }
118 }
119 protected string _errmsg;
120 /**//// <summary>
121 /// 最后一个错误信息
122 /// </summary>
123 protected string errmsg
124 ...{
125 get ...{ return _errmsg; }
126 }
127 public PicUpload(HttpFileCollection hfc)
128 ...{
129 this.hfc = hfc;
130 _Width = new int[1];
131 _Height = new int[1];
132 }
133 public PicUpload()
134 ...{
135 this.hfc = HttpContext.Current.Request.Files;
136 }
137 /**//// <summary>
138 /// 开始上传
139 /// </summary>
140 abstract public void Start();
141 /**//// <summary>
142 /// 生成剪切图
143 /// </summary>
144 /// <param name="data">输入图数据</param>
145 /// <param name="bit">生成的文件</param>
146 /// <param name="x">坐标X</param>
147 /// <param name="y">坐标Y</param>
148 /// <param name="w">宽</param>
149 /// <param name="h">高</param>
150 static public void makeRectImage(byte[] data, out byte[] bit, int x, int y, int w, int h)
151 ...{
152 Bitmap bmp = Bitmap.FromStream(new MemoryStream(data)) as System.Drawing.Bitmap;
153 Rectangle rec = new Rectangle(x, y, w, h);
154 if (bmp.Width < w || bmp.Height < h)
155 ...{
156 int rx, ry, rw, rh;
157 if (bmp.Width > bmp.Height)
158 ...{
159 rx = (bmp.Width - bmp.Height) / 2;
160 ry = 0;
161 rw = bmp.Height;
162 rh = bmp.Height;
163 rec = new Rectangle(rx, ry, rw, rh);
164 }
165 else
166 ...{
167 rx = 0;
168 ry = (bmp.Height - bmp.Width) / 2;
169 rw = bmp.Width;
170 rh = bmp.Width;
171 rec = new Rectangle(rx, ry, rw, rh);
172 }
173 }
174 Bitmap bmp1 = bmp.Clone(rec, bmp.PixelFormat);
175 MemoryStream ms = new MemoryStream();
176 ImageCodecInfo myImageCodecInfo;
177 System.Drawing.Imaging.Encoder myEncoder;
178 EncoderParameter myEncoderParameter;
179 EncoderParameters myEncoderParameters;
180 myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
181 myEncoder = System.Drawing.Imaging.Encoder.Quality;
182 myEncoderParameters = new EncoderParameters(1);
183 myEncoderParameter = new EncoderParameter(myEncoder, 100L);
184 myEncoderParameters.Param[0] = myEncoderParameter;
185 bmp1.Save(ms, myImageCodecInfo, myEncoderParameters);
186 bit = ms.ToArray();
187 bmp1.Dispose();
188 ms.Dispose();
189 }
190 /**//// <summary>
191 /// 允许的文件类型
192 /// </summary>
193 /// <param name="ext">文件类型</param>
194 /// <returns></returns>
195 protected bool AllowExt(string ext)
196 ...{
197 foreach (string s in availExtension)
198 ...{
199 if (s.ToLower() == ext.ToLower())
200 ...{
201 return true;
202 }
203 }
204 return false;
205 }
206 /**//// <summary>
207 /// 取得文件扩展名
208 /// </summary>
209 /// <param name="filename">文件名</param>
210 /// <returns></returns>
211 protected string GetExt(string filename)
212 ...{
213 int pos = filename.LastIndexOf(".");
214 return filename.Substring(pos + 1);
215 }
216 /**//// <summary>
217 /// 取得主文件名
218 /// </summary>
219 /// <param name="filename"></param>
220 /// <returns></returns>
221 protected string GetMainName(string filename)
222 ...{
223 int pos = filename.LastIndexOfAny(new char[] ...{ '\\', '/' });
224 int pos1 = 0;
225 int len = pos - pos1;
226 return filename.Substring(pos1 + 1, len);
227 }
228 /**//// <summary>
229 /// 取得新文件名
230 /// </summary>
231 /// <returns></returns>
232 protected string GetNewName()
233 ...{
234 string s = DateTime.Now.ToString("yyyyMMddhhmmss") + Common.Rand.Str(5);
235 return s;
236 }
237 /**//// <summary>
238 /// 上传到远程
239 /// </summary>
240 /// <param name="data"></param>
241 /// <param name="filename"></param>
242 protected int UploadService(byte[] data, string filename)
243 ...{
244 JuSNS.Common.WebService.UploadService upservice = new JuSNS.Common.WebService.UploadService();
245 upservice.Url = server;
246 JuSNS.Common.WebService.MySoapHeader soapheader = new JuSNS.Common.WebService.MySoapHeader();
247 soapheader.Password = PicConfig.SoapPass;
248 upservice.MySoapHeaderValue = soapheader;
249 upservice.SaveFile(data, filename);
250 return 1;
251 }
19 ...{
20 /**//// <summary>
21 /// 类型
22 /// </summary>
23 protected readonly string[] availExtension =...{ "jpg","gif","png","jpeg","bmp" };
24 /**//// <summary>
25 /// 大小
26 /// </summary>
27 protected readonly int size = 1024 * 5 * 1000;
28 /**//// <summary>
29 /// 根目录
30 /// </summary>
31 protected string RootDir
32 ...{
33 get
34 ...{
35 return JuSNS.Config.UiConfig.RootDir;
36 }
37 }
38 private string _server;
39 /**//// <summary>
40 /// 要上传到的服务器
41 /// </summary>
42 public string server
43 ...{
44 get ...{ return _server; }
45 set ...{ _server = value; }
46 }
47 /**//// <summary>
48 /// 上传的文件
49 /// </summary>
50 protected HttpFileCollection hfc;
51 /**//// <summary>
52 /// 输出的文件名
53 /// </summary>
54 public string OutFileName
55 ...{
56 get ...{ return _FileName[_FileName.Length - 1]; }
57 }
58 protected int _SuccessNum;
59 /**//// <summary>
60 /// 上传成功数量
61 /// </summary>
62 public int SuccessNum
63 ...{
64 get ...{ return _SuccessNum; }
65 }
66 protected int[] _Width;
67 /**//// <summary>
68 /// 输出图片的宽度
69 /// </summary>
70 public int[] Width
71 ...{
72 get ...{ return _Width; }
73 }
74 protected int[] _Height;
75 /**//// <summary>
76 /// 输出图片的高度
77 /// </summary>
78 public int[] Height
79 ...{
80 get ...{ return _Height; }
81 }
82 /**//// <summary>
83 /// 输入最后一个图片的高
84 /// </summary>
85 public int LastHeight
86 ...{
87 get ...{ return _Height[_Height.Length - 1]; }
88 }
89 /**//// <summary>
90 /// 输出最后一个图片的宽
91 /// </summary>
92 public int LastWidth
93 ...{
94 get ...{ return _Width[_Width.Length - 1]; }
95 }
96 protected string[] _FileName;
97 /**//// <summary>
98 /// 输出的文件名
99 /// </summary>
100 public string[] FileName
101 ...{
102 get ...{ return _FileName; }
103 }
104 protected int[] _ContentLength;
105 /**//// <summary>
106 /// 图片内存大小
107 /// </summary>
108 public int[] ContentLength
109 ...{
110 get ...{ return _ContentLength; }
111 }
112 /**//// <summary>
113 /// 最后一个图片内存大小
114 /// </summary>
115 public int LastContentLength
116 ...{
117 get ...{ return _ContentLength[_ContentLength.Length - 1]; }
118 }
119 protected string _errmsg;
120 /**//// <summary>
121 /// 最后一个错误信息
122 /// </summary>
123 protected string errmsg
124 ...{
125 get ...{ return _errmsg; }
126 }
127 public PicUpload(HttpFileCollection hfc)
128 ...{
129 this.hfc = hfc;
130 _Width = new int[1];
131 _Height = new int[1];
132 }
133 public PicUpload()
134 ...{
135 this.hfc = HttpContext.Current.Request.Files;
136 }
137 /**//// <summary>
138 /// 开始上传
139 /// </summary>
140 abstract public void Start();
141 /**//// <summary>
142 /// 生成剪切图
143 /// </summary>
144 /// <param name="data">输入图数据</param>
145 /// <param name="bit">生成的文件</param>
146 /// <param name="x">坐标X</param>
147 /// <param name="y">坐标Y</param>
148 /// <param name="w">宽</param>
149 /// <param name="h">高</param>
150 static public void makeRectImage(byte[] data, out byte[] bit, int x, int y, int w, int h)
151 ...{
152 Bitmap bmp = Bitmap.FromStream(new MemoryStream(data)) as System.Drawing.Bitmap;
153 Rectangle rec = new Rectangle(x, y, w, h);
154 if (bmp.Width < w || bmp.Height < h)
155 ...{
156 int rx, ry, rw, rh;
157 if (bmp.Width > bmp.Height)
158 ...{
159 rx = (bmp.Width - bmp.Height) / 2;
160 ry = 0;
161 rw = bmp.Height;
162 rh = bmp.Height;
163 rec = new Rectangle(rx, ry, rw, rh);
164 }
165 else
166 ...{
167 rx = 0;
168 ry = (bmp.Height - bmp.Width) / 2;
169 rw = bmp.Width;
170 rh = bmp.Width;
171 rec = new Rectangle(rx, ry, rw, rh);
172 }
173 }
174 Bitmap bmp1 = bmp.Clone(rec, bmp.PixelFormat);
175 MemoryStream ms = new MemoryStream();
176 ImageCodecInfo myImageCodecInfo;
177 System.Drawing.Imaging.Encoder myEncoder;
178 EncoderParameter myEncoderParameter;
179 EncoderParameters myEncoderParameters;
180 myImageCodecInfo = ImageCodecInfo.GetImageEncoders()[0];
181 myEncoder = System.Drawing.Imaging.Encoder.Quality;
182 myEncoderParameters = new EncoderParameters(1);
183 myEncoderParameter = new EncoderParameter(myEncoder, 100L);
184 myEncoderParameters.Param[0] = myEncoderParameter;
185 bmp1.Save(ms, myImageCodecInfo, myEncoderParameters);
186 bit = ms.ToArray();
187 bmp1.Dispose();
188 ms.Dispose();
189 }
190 /**//// <summary>
191 /// 允许的文件类型
192 /// </summary>
193 /// <param name="ext">文件类型</param>
194 /// <returns></returns>
195 protected bool AllowExt(string ext)
196 ...{
197 foreach (string s in availExtension)
198 ...{
199 if (s.ToLower() == ext.ToLower())
200 ...{
201 return true;
202 }
203 }
204 return false;
205 }
206 /**//// <summary>
207 /// 取得文件扩展名
208 /// </summary>
209 /// <param name="filename">文件名</param>
210 /// <returns></returns>
211 protected string GetExt(string filename)
212 ...{
213 int pos = filename.LastIndexOf(".");
214 return filename.Substring(pos + 1);
215 }
216 /**//// <summary>
217 /// 取得主文件名
218 /// </summary>
219 /// <param name="filename"></param>
220 /// <returns></returns>
221 protected string GetMainName(string filename)
222 ...{
223 int pos = filename.LastIndexOfAny(new char[] ...{ '\\', '/' });
224 int pos1 = 0;
225 int len = pos - pos1;
226 return filename.Substring(pos1 + 1, len);
227 }
228 /**//// <summary>
229 /// 取得新文件名
230 /// </summary>
231 /// <returns></returns>
232 protected string GetNewName()
233 ...{
234 string s = DateTime.Now.ToString("yyyyMMddhhmmss") + Common.Rand.Str(5);
235 return s;
236 }
237 /**//// <summary>
238 /// 上传到远程
239 /// </summary>
240 /// <param name="data"></param>
241 /// <param name="filename"></param>
242 protected int UploadService(byte[] data, string filename)
243 ...{
244 JuSNS.Common.WebService.UploadService upservice = new JuSNS.Common.WebService.UploadService();
245 upservice.Url = server;
246 JuSNS.Common.WebService.MySoapHeader soapheader = new JuSNS.Common.WebService.MySoapHeader();
247 soapheader.Password = PicConfig.SoapPass;
248 upservice.MySoapHeaderValue = soapheader;
249 upservice.SaveFile(data, filename);
250 return 1;
251 }
11 /**//// <summary>
12 /// 照片上传
13 /// </summary>
14 public class PhotoUpload : PicUpload
15 ...{
16 public PhotoUpload(HttpFileCollection hfc)
17 : base(hfc)
18 ...{
19 server = PicConfig.PhotoServer;
20 }
21 public PhotoUpload()
22 : base()
23 ...{
24 server = PicConfig.PhotoServer;
25 }
26
27 public override void Start()
28 ...{
29 string dir=string.Empty;
30 dir = PicConfig.PhotoRoot;
31 string path = RootDir + "/" + dir;
32 path = HttpContext.Current.Server.MapPath(path);
33 Dictionary<string, PicConfigInfo> pci = PicConfig.Photo;
34 int j = 0;
35 for (int i = 0; i < hfc.Count; i++)
36 ...{
37
38 string fileMainName = GetNewName();
39 string fileExtName = GetExt(hfc[i].FileName);
40 string filename = fileMainName + "." + fileExtName;
41 if (i > 0 && hfc[i].ContentLength == 0)
42 ...{
43 _errmsg = "图片文件太小";
44 continue;
45 }
46 if (hfc[i].ContentLength > size)
47 ...{
48 _errmsg = "图片文件占用内存超过" + (size / 1000) + "KB";
49 continue;
50 }
51 if (!AllowExt(fileExtName))
52 ...{
53 _errmsg = "图片格式不正确";
54 continue;
55 }
56 bool issuc = false;
57 if (string.IsNullOrEmpty(server) || server == "~")
58 ...{
59 上传for本地#region 上传for本地
60 Upload up = new Upload();
61 up.PostedFile = hfc[i];
62 up.Extension = fileExtName;
63 up.FileLength = up.PostedFile.ContentLength;
64 up.FileName = filename;
65 up.SavePath = path;
66 string err = up.UploadStart();
67 if (err.IndexOf('$') != -1)
68 ...{
69 Thumbnail.MakeAllThumbnail(path, filename);
70 _SuccessNum++;
71 issuc = true;
72 }
73 #endregion
74 }
75 else
76 ...{
77 上传for远程#region 上传for远程
78 byte[] data = new byte[hfc[i].ContentLength];
79 hfc[i].InputStream.Write(data, 0, hfc[i].ContentLength);
80 int n = UploadService(data, RootDir + "/" + dir + "/" + filename);
81 foreach (string k in pci.Keys)
82 ...{
83 if (k != string.Empty)
84 ...{
85 string tmDir = RootDir + "/" + pci[k].Directory;
86 byte[] tmData;
87 Thumbnail.CreateThumbnail(data, out tmData, pci[k].X, pci[k].Y);
88 UploadService(tmData, tmDir + "/" + filename);
89 }
90 }
91 if (n > 0)
92 ...{
93 _SuccessNum++;
94 issuc = true;
95 }
96 #endregion
97 }
98 if (issuc)
99 ...{
100 Array.Resize<int>(ref _Width, j + 1);
101 Array.Resize<int>(ref _Height, j + 1);
102 Array.Resize<string>(ref _FileName, j + 1);
103 Array.Resize<int>(ref _ContentLength, j + 1);
104 System.Drawing.Image image = Bitmap.FromStream(hfc[i].InputStream);
105 _Width[j] = image.Width;
106 _Height[j] = image.Height;
107 _FileName[j] = filename;
108 _ContentLength[j] = hfc[i].ContentLength;
109 j++;
110 }
111 }
112 }
113 }现在 这个可以实现图片上传功能 如果要增加个水印功能 该怎么做? 是在父类中加这个功能 还是 子类
共四张
分别是 原图 缩略图 水印文字 水印图片
这个 感觉很难看懂 敬请回复
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.IO;namespace NewRay.utils
{
/// <summary>
/// MakeThumbnails 的摘要说明
/// </summary>
public class MakeThumbnails
{
public MakeThumbnails()
{ } /// <summary>
/// 生成缩略图(最终图片固定大小,图片按比例缩小,并为缩略图加上边框,以jpg格式保存)
/// </summary>
/// <param name="sourceImg">原图片(物理路径)</param>
/// <param name="toPath">缩略图存放地址(物理路径,带文件名)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="backColor">如果图片按比例缩小后不能填充满缩略图,则使用此颜色填充(比如"#FFFFFF")</param>
/// <param name="borderColor">边框颜色(比如"#999999")</param>
public static int MakePic(string sourceImg, string toPath, int pW, int pH)
{
System.Drawing.Image originalImage = null;
System.Drawing.Image bitmap = null;
System.Drawing.Graphics g = null;
try
{
originalImage = System.Drawing.Image.FromFile(sourceImg);
int oW = originalImage.Width;//原始图片宽
int oH = originalImage.Height;//原始图片高
int tW = oW;//最终显示到页面宽
int tH = oH;//最终显示到页面高
if (oW > pW)//如果原始宽度大于固定宽度
{
tW = pW;//最终的宽度等于固定的宽度
tH = pW * oH / oW;//最终的高度等于固定宽度乘以原始高度除以原始宽度
if (tH > pH)
{
tH = pH;
tW = pH * oW / oH;//最终的宽度等于固定高度乘以原始宽度除以原始高度
} }
else if (oW < pW)//如果原始宽度小于固定宽度
{
tW = oW;
if (oH > pH)
{
tH = pH;
tW = pH * oW / oH;//最终的宽度等于固定高度乘以原始宽度除以原始高度
}
}
else//如果原始宽度等于固定宽度
{
if (oH > pH)
{
tH = pH;
tW = pH * oW / oH;//最终的宽度等于固定高度乘以原始宽度除以原始高度
}
if (oH < pH)
{
tH = oH;
tW = pH * oW / oH;//最终的宽度等于固定高度乘以原始宽度除以原始高度
}
if (oH == pH)
{
tH = oH;
tW = oW;
}
}
//新建一个bmp图片
bitmap = new System.Drawing.Bitmap(tW, tH);
//新建一个画板
g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
//if (backColor != "")
//{
// //清空画布并以指定颜色填充
// g.Clear(ColorTranslator.FromHtml(backColor));
//}
//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, tW, tH),
new System.Drawing.Rectangle(0, 0, oW, oH),
System.Drawing.GraphicsUnit.Pixel);
//以jpg格式保存缩略图
bitmap.Save(toPath, System.Drawing.Imaging.ImageFormat.Jpeg);
return 1;
}
catch
{
return -1;
}
finally
{
if (originalImage != null)
{ originalImage.Dispose();
}
if (bitmap != null)
{
bitmap.Dispose();
}
if (g != null)
{
g.Dispose();
}
}
}
/// <summary>
/// 生成缩略图(最终图片固定大小,图片按比例缩小,并为缩略图加上边框,以jpg格式保存)
/// </summary>
/// <param name="sourceImg">原图片(物理路径)</param>
/// <param name="toPath">缩略图存放地址(物理路径,带文件名)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="backColor">如果图片按比例缩小后不能填充满缩略图,则使用此颜色填充(比如"#FFFFFF")</param>
/// <param name="borderColor">边框颜色(比如"#999999")</param>
public static int MakePicOnlyWidth(string sourceImg, string toPath, int width, string backColor, string borderColor)
{ //创建一个bitmap类型的bmp变量来读取文件。
//Bitmap bmp = new Bitmap(openFileDialog1 .FileName );
////新建第二个bitmap类型的bmp2变量,我这里是根据我的程序需要设置的。
//Bitmap bmp2 = new Bitmap(1024, 768, PixelFormat.Format16bppRgb555);
////将第一个bmp拷贝到bmp2中
//Graphics draw = Graphics.FromImage(bmp2);
//draw.DrawImage(bmp,0,0);
//pictureBox1.Image = (Image)bmp2 ;//读取bmp2到picturebox
//FILE = openFileDialog1.FileName;
//openFileDialog1.Dispose();
//draw.Dispose();
//bmp.Dispose();//释放bmp文件资源
System.Drawing.Image originalImage = null;
System.Drawing.Image bitmap = null;
System.Drawing.Graphics g = null;
try
{
originalImage = System.Drawing.Image.FromFile(sourceImg);
//width = originalImage.Width > width ? width : originalImage.Width;
//height = originalImage.Height > height ? height : originalImage.Height;
int height = originalImage.Height * 80 / originalImage.Width;
int towidth = width;
int toheight = height; int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height; string mode; if (ow < towidth || oh < toheight)
{
return -1;
}
else
{
if (originalImage.Width / originalImage.Height >= width / height)
{
mode = "W";
}
else
{
mode = "H";
}
switch (mode)
{
//原始: 宽度:200 高度:100
//缩略后:宽度:80 高度:100*80/200=40 case "W"://指定宽,高按比例
toheight = originalImage.Height * 80 / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
default:
break;
}
//新建一个bmp图片
bitmap = new System.Drawing.Bitmap(width, height); //新建一个画板
g = System.Drawing.Graphics.FromImage(bitmap);
//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; if (backColor != "")
{
//清空画布并以指定颜色填充
g.Clear(ColorTranslator.FromHtml(backColor));
}
//在指定位置并且按指定大小绘制原图片的指定部分
int top = (height - toheight) / 2;
int left = (width - towidth) / 2;
g.DrawImage(originalImage, new System.Drawing.Rectangle(left, top, towidth, toheight),
new System.Drawing.Rectangle(x, y, ow, oh),
System.Drawing.GraphicsUnit.Pixel); //Pen pen = new Pen(ColorTranslator.FromHtml(borderColor));
// g.DrawRectangle(pen, 0, 0, width - 1, height - 1);
//以jpg格式保存缩略图
bitmap.Save(toPath, System.Drawing.Imaging.ImageFormat.Jpeg);
return toheight;
}
}
catch
{
return -1;
}
finally
{
if (originalImage != null)
{ originalImage.Dispose();
}
if (bitmap != null)
{
bitmap.Dispose();
}
if (g != null)
{
g.Dispose();
}
}
}
/// <summary>
/// 判断是否有图片
/// </summary>
/// <param name="folderPath">指定文件夹路径</param>
/// <returns>bool</returns>
public static bool judgeExpensionName(string folderPath)
{
bool isTp = false; if (Directory.Exists(folderPath))
{
foreach (string itemFilePath in Directory.GetFiles(folderPath))
{
FileInfo fi = new FileInfo(itemFilePath); //创建时间 fi.CreationTime;
//获取上次访问当前目录时间 fi.LastAccessTime
//获取上次写入文件目录的时间 fi.LastWriteTime
if (fi.Extension.Equals(".jpg") || fi.Extension.Equals(".JPG") || fi.Extension.Equals(".jpge") || fi.Extension.Equals(".JPEG") || fi.Extension.Equals(".gif") || fi.Extension.Equals(".GIF"))
{
isTp = true;
break;
} else
isTp = false;
}
} return isTp;
}
/// <summary>
/// 加水印
/// </summary>
/// <param name="yuanpath"></param>
/// <param name="newpath"></param>
/// <param name="waterimage"></param>
public static void makewaterimage(string yuanpath, string newpath, string waterimage)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(yuanpath);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile(waterimage);
Graphics g = Graphics.FromImage(image);
g.DrawImage(copyImage, new Rectangle(image.Width / 2 - copyImage.Width / 2, image.Height / 2 - copyImage.Height / 2, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
g.Dispose(); //保存加水印过后的图片,删除原始图片
image.Save(newpath); image.Dispose(); if (File.Exists(yuanpath))
{
File.Delete(yuanpath);
}
} }
}
//调用:
//MakeThumbnails.MakePic(来源路径(绝对),保存路径(绝对), 800(高度), 600(宽度), "#FFFFFF"(可为空), "#999999"(可为空));
///**/
/// <summary>
/// 在图片上增加文字水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_sy">生成的带文字水印的图片路径</param>
protected void AddShuiYinWord(string Path, string Path_sy)
{ FileStream stream = File.OpenRead(Path);
System.Drawing.Image original = System.Drawing.Image.FromStream(stream, true);
stream.Close();
stream.Dispose();
stream = null;
Bitmap image = new Bitmap(original);
original.Dispose();
original = null;
string addText = "http://shop59691092.taobao.com/";
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
g.DrawString(addText, f, b, 15, 15);
g.Dispose();
image.Save(Path_sy);
image.Dispose();
}
g.DrawString(addText, f, b, 15, 15);
addText:水印文字
f:字体
b:颜色
15 15 是位置坐标
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)
{
string fileContentType = FileUpload1.PostedFile.ContentType;
if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/pjpeg")
{
string name = FileUpload1.PostedFile.FileName; // 客户端文件路径 FileInfo file = new FileInfo(name);
string fileName = file.Name; // 文件名称
string fileName_s = "s_" + file.Name; // 缩略图文件名称
string fileName_sy = "sy_" + file.Name; // 水印图文件名称(文字)
string fileName_syp = "syp_" + file.Name; // 水印图文件名称(图片)
string webFilePath = Server.MapPath("file/" + fileName); // 服务器端文件路径
string webFilePath_s = Server.MapPath("file/" + fileName_s); // 服务器端缩略图路径
string webFilePath_sy = Server.MapPath("file/" + fileName_sy); // 服务器端带水印图路径(文字)
string webFilePath_syp = Server.MapPath("file/" + fileName_syp); // 服务器端带水印图路径(图片)
string webFilePath_sypf = Server.MapPath("file/shuiyin.jpg"); // 服务器端水印图路径(图片) if (!File.Exists(webFilePath))
{
try
{
FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件
AddShuiYinWord(webFilePath, webFilePath_sy);//文字水印
AddShuiYinPic(webFilePath, webFilePath_syp, webFilePath_sypf);//图片水印
MakeThumbnail(webFilePath, webFilePath_s, 130, 130, "Cut"); // 生成缩略图方法
Label1.Text = "提示:文件“" + fileName + "”成功上传,并生成“" + fileName_s + "”缩略图,文件类型为:" + FileUpload1.PostedFile.ContentType + ",文件大小为:" + FileUpload1.PostedFile.ContentLength + "B";
}
catch (Exception ex)
{
Label1.Text = "提示:文件上传失败,失败原因:" + ex.Message;
}
}
else
{
Label1.Text = "提示:文件已经存在,请重命名后上传";
}
}
else
{
Label1.Text = "提示:文件类型不符";
}
}
}
/**/
/**/
/**/
/// <summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
{
System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath); int towidth = width;
int toheight = height; int x = 0;
int y = 0;
int ow = originalImage.Width;
int oh = originalImage.Height; switch (mode)
{
case "HW"://指定高宽缩放(可能变形)
break;
case "W"://指定宽,高按比例
toheight = originalImage.Height * width / originalImage.Width;
break;
case "H"://指定高,宽按比例
towidth = originalImage.Width * height / originalImage.Height;
break;
case "Cut"://指定高宽裁减(不变形)
if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
{
oh = originalImage.Height;
ow = originalImage.Height * towidth / toheight;
y = 0;
x = (originalImage.Width - ow) / 2;
}
else
{
ow = originalImage.Width;
oh = originalImage.Width * height / towidth;
x = 0;
y = (originalImage.Height - oh) / 2;
}
break;
default:
break;
} //新建一个bmp图片
System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight); //新建一个画板
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap); //设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; //设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //清空画布并以透明背景色填充
g.Clear(System.Drawing.Color.Transparent); //在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
new System.Drawing.Rectangle(x, y, ow, oh),
System.Drawing.GraphicsUnit.Pixel); try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
} /**/
/**/
/**/
/// <summary>
/// 在图片上增加文字水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_sy">生成的带文字水印的图片路径</param>
protected void AddShuiYinWord(string Path, string Path_sy)
{
string addText = "测试水印";
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(image, 0, 0, image.Width, image.Height);
System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);//水印文字大小
System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);//水印文字颜色
g.DrawString(addText, f, b, image.Width / 2, image.Height / 2);//image.Width / 2, image.Height/2是文字水印在图片的中间位置,此处修改添加入
//g.DrawString(addText, f, b, 15, 15);//数字是文字水印的位置
g.Dispose(); image.Save(Path_sy);
image.Dispose();
} /**/
/**/
/**/
/// <summary>
/// 在图片上生成图片水印
/// </summary>
/// <param name="Path">原服务器图片路径</param>
/// <param name="Path_syp">生成的带图片水印的图片路径</param>
/// <param name="Path_sypf">水印图片路径</param>
protected void AddShuiYinPic(string Path, string Path_syp, string Path_sypf)
{
System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
g.Dispose(); image.Save(Path_syp);
image.Dispose();
}}
不过我想知道 是我说的那个类 怎么去改实现 水印功能