ASP.NET 缩小照片上传功能的二种方式!
方法一:
002 /// asp.net上传图片并生成缩略图
003 /// </summary>
004 /// <param name="upImage">HtmlInputFile控件</param>
005 /// <param name="sSavePath">保存的路径,些为相对服务器路径的下的文件夹</param>
006 /// <param name="sThumbExtension">缩略图的thumb</param>
007 /// <param name="intThumbWidth">生成缩略图的宽度</param>
008 /// <param name="intThumbHeight">生成缩略图的高度</param>
009 /// <returns>缩略图名称</returns>
服务器端控件:fileupload
public string UpLoadImage(FileUpload fileupload,string sSavePath,string sThumbExtension,int intThumbWidth,int intThumbHeight)
public string UpLoadImage(HtmlInputFile upImage,string sSavePath,string sThumbExtension,int intThumbWidth,int intThumbHeight)
{
string sThumbFile ="";
string sFilename ="";
if(upImage.PostedFile !=null)
{
HttpPostedFile myFile = upImage.PostedFile;
int nFileLen = myFile.ContentLength;
if(nFileLen == 0)
return"没有选择上传图片";
//获取upImage选择文件的扩展名
string extendName = System.IO.Path.GetExtension(myFile.FileName).ToLower();
//判断是否为图片格式
if(extendName !=".jpg"&& extendName !=".jpge"&& extendName !=".gif"&& extendName !=".bmp"&& extendName !=".png")
return"图片格式不正确";
byte[] myData =new Byte[nFileLen];
myFile.InputStream.Read(myData,0 , nFileLen);
sFilename = System.IO.Path.GetFileName(myFile.FileName);
int file_append = 0;
//检查当前文件夹下是否有同名图片,有则在文件名+
while(System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
{
file_append++;
sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)
+ file_append.ToString() + extendName;
}
System.IO.FileStream newFile
=new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename),
System.IO.FileMode.Create, System.IO.FileAccess.Write);
newFile.Write(myData,0 , myData.Length);
newFile.Close();
//以上为上传原图
try
{
//原图加载
using(System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))
{
//原图宽度和高度
int width = sourceImage.Width;
int height = sourceImage.Height;
int smallWidth;
int smallHeight;
//获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽 和 原图的高/缩略图的高)
if(((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight)
{
smallWidth = intThumbWidth;
smallHeight = intThumbWidth * height / width;
}
else
{
smallWidth = intThumbHeight * width / height;
smallHeight = intThumbHeight;
}
//判断缩略图在当前文件夹下是否同名称文件存在
file_append =0 ;
sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + extendName;
while(System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))
{
file_append++;
sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +
file_append.ToString() + extendName;
}
//缩略图保存的绝对路径
string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile;
//新建一个图板,以最小等比例压缩大小绘制原图
using(System.Drawing.Image bitmap =new System.Drawing.Bitmap(smallWidth, smallHeight))
{
//绘制中间图
using(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(Color.Black);
g.DrawImage(
sourceImage,
new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight),
new System.Drawing.Rectangle(0,0 , width, height),
System.Drawing.GraphicsUnit.Pixel
);
}
//新建一个图板,以缩略图大小绘制中间图
using(System.Drawing.Image bitmap1 =new System.Drawing.Bitmap(intThumbWidth, intThumbHeight))
{
//绘制缩略图
using(System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1))
{
//高清,平滑
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.Clear(Color.Black);
int lwidth = (smallWidth - intThumbWidth) /2 ;
int bheight = (smallHeight - intThumbHeight) /2 ;
g.DrawImage(bitmap,new Rectangle(0,0 , intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel);
g.Dispose();
bitmap.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
}
}
}
catch
{
//出错则删除
System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));
return"图片格式不正确";
}
//返回缩略图名称
return sThumbFile;
}
return"没有选择图片";
}
方法二:
/// <summary>
/// 图片上传,带缩略图自定义处理
/// </summary>
/// <param name="fileupload">上传控件</param>
/// <param name="pictureDirectoryAbsolutePath">站点下绝对目录路径 eg: "/pics/a/"</param>
/// <param name="newPictureName">新命名图片(不带格式部分,格式维持原来的)</param>
/// <param name="supportPictureType">eg: "|gif|jpg|png",如果为空,默认支持以上三种</param>
/// <param name="message">返回消息</param>
/// <param name="isCreateDefaultThumb">是否立即生成缩略图</param>
public static bool PictrueUpload(FileUpload fileupload, string pictureDirectoryAbsolutePath, string newPictureName, string supportPictureType,
out string pictureAbsolutePath, out string message,
bool isCreateDefaultThumb, string thumbPhysicalFullPath, int thumbWidth, int thumbHeight, out string thumbAbsolutePath)
{
message = "图片上传成功";
pictureAbsolutePath = "";
thumbAbsolutePath = "";
#region 参数验证
string picturePhysicalFullPath = "";
if (string.IsNullOrEmpty(fileupload.FileName))
{
message = "请选择待上传图片";
return false; ;
}
if (String.IsNullOrEmpty(pictureDirectoryAbsolutePath))
{
message = "pictureDirectoryAbsolutePath参数不能为空";
return false;
}
if (String.IsNullOrEmpty(newPictureName))
{
message = "newPictureName参数不能为空";
return false;
}
#endregion
//存储目录创建
string pictureDirectoryPhysicalPath = HttpContext.Current.Server.MapPath(pictureDirectoryAbsolutePath);
if (!Directory.Exists(pictureDirectoryPhysicalPath))
{
Directory.CreateDirectory(pictureDirectoryPhysicalPath);
}
string fileName = fileupload.FileName.Trim();
string typeName = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower();
//上传图片格式验证
if (!PictureSupportFormatToValidate(typeName, supportPictureType, out message))
{
return false;
}
//原始图片上传后的物理地址
picturePhysicalFullPath = pictureDirectoryPhysicalPath + newPictureName + "." + typeName;
//原始图片上传
fileupload.SaveAs(picturePhysicalFullPath);
//返回的图片绝对地址
pictureAbsolutePath = pictureDirectoryAbsolutePath + newPictureName + "." + typeName;
#region 缩略图处理
//缩略图生成处理
if (isCreateDefaultThumb)
{
if (String.IsNullOrEmpty(thumbPhysicalFullPath))
{
string thumbDirectoryPhysicalPath = String.Format("{0}thumb/", pictureDirectoryPhysicalPath);
//缩略图目录创建
if (!Directory.Exists(thumbDirectoryPhysicalPath))
{
Directory.CreateDirectory(thumbDirectoryPhysicalPath);
}
//缩略图存储地址
thumbPhysicalFullPath = String.Format("{0}{1}.jpg", thumbDirectoryPhysicalPath, newPictureName);
}
using (StreamReader sr = new StreamReader(picturePhysicalFullPath))
{
CustomPictureManager.ThumbAsJPG(sr.BaseStream, thumbPhysicalFullPath, thumbWidth, thumbHeight);
thumbAbsolutePath = pictureDirectoryAbsolutePath + "thumb/" + newPictureName + "." + typeName;
}
}
#endregion 缩略图处理
return true;
}