ASP.NET图片上传与缩略图、水印生成

需积分: 9 3 下载量 114 浏览量 更新于2024-07-31 收藏 24KB DOCX 举报
"ASP.NET 图片上传与处理技术,包括生成缩略图和添加水印" 在ASP.NET中,处理用户上传的图片是一项常见的任务,尤其是对于那些包含图像展示或编辑功能的Web应用。该资源描述了一个方法,用于在用户上传图片时,同时生成缩略图并可添加水印,以满足多种显示需求。以下是对这段代码的详细解释和扩展: 首先,我们需要一个HTML Input File控件(HtmlInputFile)来让用户选择要上传的图片。在提交表单时,`HtmlInputFile`的`PostedFile`属性会包含用户选定的文件信息。 ```csharp HtmlInputFile upImage; HttpPostedFile myFile = upImage.PostedFile; ``` 检查`myFile`是否为空以及文件长度,确保有文件被选中并且非零大小。接着,获取文件的扩展名,以判断是否为支持的图片格式: ```csharp string extendName = System.IO.Path.GetExtension(myFile.FileName).ToLower(); if (extendName != ".jpg" && extendName != ".jpge" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png") return "图片格式不正确"; ``` 这段代码仅支持`.jpg`, `.jpge`, `.gif`, `.bmp` 和 `.png` 格式的图片,如果用户上传了其他格式的文件,会返回错误信息。 然后,读取文件内容到字节数组,以便进一步处理: ```csharp byte[] myData; // 读取文件到myData ``` 生成缩略图通常涉及调整图片尺寸,以保持原始宽高比。这里的方法接受缩略图的宽度和高度作为参数: ```csharp int intThumbWidth, int intThumbHeight; ``` 接下来,可以使用`System.Drawing`命名空间中的类来处理图片。首先,创建一个`Image`对象来表示上传的图片: ```csharp using System.Drawing; Image originalImage = Image.FromStream(myFile.InputStream); ``` 为了生成缩略图,我们需要创建一个新的`Bitmap`对象,设置其宽度和高度,并保持原始比例: ```csharp Size newSize = GetNewSize(originalImage.Size, intThumbWidth, intThumbHeight); Bitmap thumbnail = new Bitmap(newSize.Width, newSize.Height); Graphics graphics = Graphics.FromImage(thumbnail); graphics.DrawImage(originalImage, 0, 0, newSize, GraphicsUnit.Pixel); ``` `GetNewSize`函数用于计算缩放后的尺寸,保持原始宽高比: ```csharp private Size GetNewSize(Size originalSize, int maxWidth, int maxHeight) { float ratioX = (float)maxWidth / originalSize.Width; float ratioY = (float)maxHeight / originalSize.Height; float ratio = Math.Min(ratioX, ratioY); return new Size((int)(originalSize.Width * ratio), (int)(originalSize.Height * ratio)); } ``` 生成缩略图后,可以将其保存到服务器的指定路径,并返回缩略图文件名: ```csharp string sSavePath, sThumbExtension; string thumbFileName = Guid.NewGuid().ToString() + sThumbExtension; thumbnail.Save(sSavePath + thumbFileName, ImageFormat.Jpeg); stringsThumbFile = thumbFileName; ``` 至于添加水印,可以创建一个文本框或图像(例如公司Logo),将其绘制到缩略图上。这个过程涉及到对`Graphics`对象的更多操作,包括字体设置、透明度控制和位置计算。 ```csharp using (Font font = new Font("Arial", 24)) { StringFormat sf = new StringFormat(); sf.Alignment = StringAlignment.Center; sf.LineAlignment = StringAlignment.Center; graphics.DrawString("Watermark Text", font, new SolidBrush(Color.Gray), new RectangleF(0, 0, thumbnail.Width, thumbnail.Height), sf); } ``` 最后,记得释放所有资源,避免内存泄漏: ```csharp graphics.Dispose(); originalImage.Dispose(); thumbnail.Dispose(); ``` 这个函数不仅实现了图片上传,还提供了生成清晰缩略图的功能,可以作为一个基础框架进行扩展,如添加水印、图片质量控制、多格式支持等。通过适当的优化,它可以在实际项目中有效提高图片处理的效率和用户体验。