ASP.NET图片上传与缩略图、水印生成
需积分: 9 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();
```
这个函数不仅实现了图片上传,还提供了生成清晰缩略图的功能,可以作为一个基础框架进行扩展,如添加水印、图片质量控制、多格式支持等。通过适当的优化,它可以在实际项目中有效提高图片处理的效率和用户体验。
2011-11-16 上传
点击了解资源详情
2013-01-23 上传
2021-10-10 上传
2012-03-28 上传
2019-07-30 上传
2012-04-07 上传
点击了解资源详情
czfczx_1221
- 粉丝: 0
- 资源: 7
最新资源
- ES2015:ES2015片段和简短说明
- Android-ListViewDemo.zip_android开发_Java_
- torch_sparse-0.6.11-cp37-cp37m-win_amd64whl.zip
- tinyusb-sys:Rust FFI绑定到tinyusb USB堆栈
- Page Marker-crx插件
- dndhelper:DM的简单工具
- Tea.zip_加密解密_C#_
- 一文彻底搞懂快速幂(原理实现、矩阵快速幂)
- angular-reactions:BuzzfeedOnedio风格的用户React模块作为AngularJS框架的指令
- SpringCloud学习.zip
- BtoBdigitaleconomy
- microfrontend-event-bus
- torch_scatter-2.0.7-cp37-cp37m-macosx_10_9_x86_64whl.zip
- QuantResearchDev:定量加密机器人程序框架
- chatterbox-client
- Timed-rounds-alarm-program.rar_LabView编程_LabView_