关于图片上传并生成缩略图

hingxing 2009-06-08 08:11:25
我想把图片上传到服务器 。图片存放到虚拟目录中,把路径放入数据库。并且在上传的时间,按照预先设定好的宽,高,去对比然后生成不拉伸的缩略图,也放到虚拟目录,路径等写入数据库。
主要是缩略图的问题。我才从网上找了不少资料,基本都是一样的。。新手看不太懂。。高手帮帮忙。
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default4.aspx.cs" Inherits="_Default4" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:FileUpload ID="FileUpload1" runat="server" /><br />
<br />
<br />
<br />
<br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> <br />
<br />
<asp:Image ID="Image1" runat="server" Visible="False" />

</div>
</form>
</body>
</html>

后台:
using System;
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.Collections;
using System.Data.SqlClient;
using System.IO;

public partial class _Default4 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{


}
protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)//判断里FileUpload是否有此文件地址
{
string[] strSpil = FileUpload1.FileName.Split('.');//将此地址用.号进行分割(img/1.jpg)
string strEnd = strSpil[strSpil.Length - 1].ToLower();//得到后面得jpg
string[] strPic = new string[] { "jpg", "gif", "bmp", "png" };//定义一个数组里面放文件格式
ArrayList arry= new ArrayList();
arry.AddRange(strPic); //定义一个可变数组,用于放文件格式


if (arry.Contains(strEnd))//判断这个数组中是否有(jpg)
{
Random rand = new Random();//定义义个随机数,为了防止你要上传得图片重名
String strName1 = DateTime.Now.ToString("yyyyMMddHmmss") + FileUpload1.FileName;//得到不同得名字

// String strName1 = DateTime.Now.ToString("yyyyMMddHmm") + rand.Next(100, 9999).ToString() + "." + strEnd;//得到不同得名字 日期加随即数字
String strFile = Server.MapPath("~/image/top/");//获取其相对地址
FileUpload1.SaveAs(strFile+"/"+strName1);//保存
Image1.ImageUrl = "~/image/top/" + strName1;//显示此图片
Image1.Visible = true;

SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=wangjingyi;Database=grand");
con.Open();
SqlCommand com = new SqlCommand("INSERT INTO image (imagename,url)values('" + strName1 + "','" + strFile + "')", con);
com.ExecuteNonQuery();
}
else
{
Response.Write(" <script>alert('不是标准的图片格式') </script>");
}
}
else
{
Response.Write(" <script>alert('不存在此文件') </script>");
}
}

}


类文件:
using System;
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;

/// <summary>
/// 生成缩略图片
/// </summary>
public class ClsssData
{
///<summary>
/// 生成缩略图
/// </summary>
/// <param name="originalImagePath">源图路径(物理路径)</param>
/// <param name="thumbnailPath">缩略图路径(物理路径)</param>
/// <param name="width">缩略图宽度</param>
/// <param name="height">缩略图高度</param>
/// <param name="mode">生成缩略图的方式</param>
/// <param name="outthumbnailPath">返回缩略图的</param>
public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, out string outthumbnailPath)
{
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;


// {
// 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);

//新建一个画板
Graphics g = System.Drawing.Graphics.FromImage(bitmap);

//设置高质量插值法
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

//设置高质量,低速度呈现平滑程度
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

//清空画布并以透明背景色填充
g.Clear(Color.Transparent);

//在指定位置并且按指定大小绘制原图片的指定部分
g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
new Rectangle(x, y, ow, oh),
GraphicsUnit.Pixel);

try
{
//以jpg格式保存缩略图
bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
outthumbnailPath = thumbnailPath;
}
catch (System.Exception e)
{
throw e;
}
finally
{
originalImage.Dispose();
bitmap.Dispose();
g.Dispose();
}
}
}


不知道该怎么引用类啊。郁闷中。。。
...全文
182 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hingxing 2009-06-11
  • 打赏
  • 举报
回复
谢谢楼上的。不好意思。最近有点忙。所以没来。。抱歉吖
gdjlc 2009-06-09
  • 打赏
  • 举报
回复
上面都说错了吧,public static void MakeThumbnail这个是静态方法,怎么可以ClsssData picOperater=new ClassData 呢?

把这个生成缩略图类ClsssData.cs 放在AppCode文件夹下面

Default4.aspx

<asp:FileUpload ID="FileUpload1" runat="server" /> <br />
<br />
<br />
<br />
<br />
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />  <br />
<br />
<asp:Image ID="Image1" runat="server" Visible="False" />
<asp:Image ID="Image2" runat="server" />



Default4.aspx.cs

protected void Button1_Click(object sender, EventArgs e)
{
if (FileUpload1.HasFile)//判断里FileUpload是否有此文件地址
{
string[] strSpil = FileUpload1.FileName.Split('.');//将此地址用.号进行分割(img/1.jpg)
string strEnd = strSpil[strSpil.Length - 1].ToLower();//得到后面得jpg
string[] strPic = new string[] { "jpg", "gif", "bmp", "png" };//定义一个数组里面放文件格式
ArrayList arry = new ArrayList();
arry.AddRange(strPic); //定义一个可变数组,用于放文件格式


if (arry.Contains(strEnd))//判断这个数组中是否有(jpg)
{
Random rand = new Random();//定义义个随机数,为了防止你要上传得图片重名
String strName1 = DateTime.Now.ToString("yyyyMMddHmmss") + FileUpload1.FileName;//得到不同得名字

// String strName1 = DateTime.Now.ToString("yyyyMMddHmm") + rand.Next(100, 9999).ToString() + "." + strEnd;//得到不同得名字 日期加随即数字
String strFile = Server.MapPath("~/image/top/");//获取其相对地址
FileUpload1.SaveAs(strFile + "/" + strName1);//保存
Image1.ImageUrl = "~/image/top/" + strName1;//显示此图片
Image1.Visible = true;

/*=====================添加代码就在下面这里===2009/6/9测试通过======================*/
string serverpath = strFile + strName1;
String strName2 = DateTime.Now.ToString("yyyyMMddHmmss") + "[1]" + FileUpload1.FileName;//缩略图名字
string thumbnailpath = strFile + strName2;
string outthumbnailPath = "";

ClsssData.MakeThumbnail(serverpath, thumbnailpath, 80, 80, out outthumbnailPath);
Image2.ImageUrl = outthumbnailPath;
/*===========================添加代码就在上面这里==============================*/

SqlConnection con = new SqlConnection("server=(local);user id=sa;pwd=wangjingyi;Database=grand");
con.Open();
SqlCommand com = new SqlCommand("INSERT INTO image (imagename,url)values('" + strName1 + "','" + strFile + "')", con);
com.ExecuteNonQuery();

}
else
{
Response.Write(" <script>alert('不是标准的图片格式') </script>");
}
}
else
{
Response.Write(" <script>alert('不存在此文件') </script>");
}
}



另外楼主的结贴率有点低。
pdsnet 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyongli41 的回复:]
先实例化ClsssData picOperater=new ClassData
然后就可以调用picOperater.MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, out string outthumbnailPath)
方法参数已经说得很详细了
把ClsssData类放在App_Code文件夹里
[/Quote]就他
malin2670372 2009-06-09
  • 打赏
  • 举报
回复
x学习....
Adechen 2009-06-08
  • 打赏
  • 举报
回复
楼上的正解
zhouyongli41 2009-06-08
  • 打赏
  • 举报
回复
先实例化ClsssData picOperater=new ClassData
然后就可以调用picOperater.MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, out string outthumbnailPath)
方法参数已经说得很详细了
把ClsssData类放在App_Code文件夹里

62,250

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧