int target_width = 100; //缩略图宽
int target_height = 75; //缩略图高
1.修改类Thumbnail,添加缩略图成员
2.修改上传控件,创建内存流存储缩略图数据流
3.上传保存,从Thumbnail类中读取数据流,使用文件流保存图片
并保存到数据库中。
1.修改类 Thumbnail
using System;
using System.Data;
using System.Configuration;
using System.Collections;
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;
using System.Collections.Generic;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public partial class upload : System.Web.UI.Page
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
protected void Page_Load(object sender, EventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
System.Drawing.Image thumbnail_image = null;
System.Drawing.Image original_image = null;
System.Drawing.Bitmap final_image = null;
System.Drawing.Graphics graphic = null;
MemoryStream ms = null;
MemoryStream maxms = null;
try
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// Get the data
HttpPostedFile jpeg_image_upload = Request.Files["Filedata"];
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Retrieve the uploaded image
original_image = System.Drawing.Image.FromStream(jpeg_image_upload.InputStream);
// Calculate the new width and height
int width = original_image.Width;
int height = original_image.Height;
int target_width = 100;
int target_height = 75;
int new_width, new_height;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
float target_ratio = (float)target_width / (float)target_height;
float image_ratio = (float)width / (float)height;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
if (target_ratio > image_ratio)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
new_height = target_height;
new_width = (int)Math.Floor(image_ratio * (float)target_height);
}
else
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
new_height = (int)Math.Floor((float)target_width / image_ratio);
new_width = target_width;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
new_width = new_width > target_width ? target_width : new_width;
new_height = new_height > target_height ? target_height : new_height;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Create the thumbnail
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Old way
//thumbnail_image = original_image.GetThumbnailImage(new_width, new_height, null, System.IntPtr.Zero);
// We don't have to create a Thumbnail since the DrawImage method will resize, but the GetThumbnailImage looks better
// I've read about a problem with GetThumbnailImage. If a jpeg has an embedded thumbnail it will use and resize it which
// can result in a tiny 40x40 thumbnail being stretch up to our target size
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
final_image = new System.Drawing.Bitmap(target_width, target_height);
graphic = System.Drawing.Graphics.FromImage(final_image);
graphic.FillRectangle(new System.Drawing.SolidBrush(System.Drawing.Color.Black), new System.Drawing.Rectangle(0, 0, target_width, target_height));
int paste_x = (target_width - new_width) / 2;
int paste_y = (target_height - new_height) / 2;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; /**//* new way */
//graphic.DrawImage(thumbnail_image, paste_x, paste_y, new_width, new_height);
graphic.DrawImage(original_image, paste_x, paste_y, new_width, new_height);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Store the thumbnail in the session (Note: this is bad, it will take a lot of memory, but this is just a demo)#
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ms = new MemoryStream();
//final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
final_image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
修改部分开始#region 修改部分开始
maxms = new MemoryStream();
original_image.Save(maxms, System.Drawing.Imaging.ImageFormat.Jpeg);
//----------------------------------------------------------------
// Store the data in my custom Thumbnail object
string thumbnail_id = DateTime.Now.ToString("yyyyMMddHHmmssfff");
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Thumbnail thumb = new Thumbnail(thumbnail_id,maxms.GetBuffer(), ms.GetBuffer());
#endregion 修改部分结束
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// Put it all in the Session (initialize the session if necessary)
List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
if (thumbnails == null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
thumbnails = new List<Thumbnail>();
Session["file_info"] = thumbnails;
}
thumbnails.Add(thumb);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Response.StatusCode = 200;
Response.Write(thumbnail_id);
}
catch
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// If any kind of error occurs return a 500 Internal Server error
Response.StatusCode = 500;
Response.Write("An error occured");
Response.End();
}
finally
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
// Clean up
if (final_image != null) final_image.Dispose();
if (graphic != null) graphic.Dispose();
if (original_image != null) original_image.Dispose();
if (thumbnail_image!= null )thumbnail_image.Dispose();
if (ms != null) ms.Close();
Response.End();
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2.修改upload.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.UI;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
/**//// <summary>
/// Summary description for Thumbnail
/// </summary>
public class Thumbnail
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
public Thumbnail(string id, byte[] data, byte[] minidata)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.ID = id;
this.Data = data;
this.miniData = minidata;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private string id;
public string ID
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return this.id;
}
set
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.id = value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private byte[] max_data;
public byte[] Data
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return this.max_data;
}
set
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.max_data = value;
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
private byte[] thumbnail_data;
public byte[] miniData
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return this.thumbnail_data;
}
set
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
this.thumbnail_data = value;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3.保存按钮事件
protected void btnSave_Click(object sender, EventArgs e)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
if (Session["file_info"] != null)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
List<Thumbnail> thumbnails = Session["file_info"] as List<Thumbnail>;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
string UploadPath = Server.MapPath("~/picupload/");
string strPicName;
string strPicMinName;
string strCID;
strCID = ddlpic.SelectedItem.Value;
TArticle CA = new TArticle();
foreach (Thumbnail img in thumbnails)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
strPicName = img.ID + ".jpg";
strPicMinName = img.ID + "_mini.jpg";
FileStream fs = new FileStream(UploadPath + img.ID + ".jpg", FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(img.Data);
bw.Close();
fs.Close();
FileStream fss = new FileStream(UploadPath + img.ID + "_mini.jpg", FileMode.Create);
BinaryWriter bww = new BinaryWriter(fss);
bww.Write(img.miniData);
bww.Close();
fss.Close();
//共用一个表文章表,原图片使用title,缩略图使用abstract
//栏目分类使用状态为0的
CA.ArticleCID = strCID;
CA.ArticleTitle = strPicName;
CA.ArticleAbstract = strPicMinName;
CA.PicInsert();
}
Session.Remove("file_info");
Response.Write("<script>alert('图片上传成功!');</script>");
}
}
总结:
int target_width = 100; //缩略图宽
int target_height = 75; //缩略图高
1.修改类Thumbnail,添加缩略图成员
2.修改上传控件,创建内存流存储缩略图数据流
3.上传保存,从Thumbnail类中读取数据流,使用文件流保存图片
并保存到数据库中。
下载源码