图片上传存取以及给图片加文字和图片水印

本文介绍了几种图片上传和处理的方法,包括将图片放置于文件夹并上传路径至数据库、直接将图片存储到数据库中等。此外,还涉及了如何在图片上添加文字和图片水印的技术细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一: 直接把图片放到某个文件夹中 
1:<INPUT id="myFile" type="file" class="input" onChange="checkData()" size="34" name="myFile" runat="server">
2:判断过程
<script>
function checkData()
{
var fileName
=document.getElementById("myFile").value;
if(fileName=="")
return;
var exName
=fileName.substr(fileName.lastIndexOf(".")+1).toUpperCase()
if(exName=="JPG"||exName=="BMP"||exName=="GIF")
{
document.getElementById(
"myimg").src=fileName
}

else
{
alert(
"请选择正确的图片文件")
document.getElementById(
"myFile").value=""
}
 
}

</script>
<script language="javascript">
window.resizeTo(
400,250);
</script>
3:上传图片路径到数据库
private void btnSubmit_Click(object sender, System.EventArgs e)
{
string strImageName="";
string FileName=myFile.Value;
string Publishtime=DateTime.Now.ToString();
string svrid=this.Hidden_svrid.Value.ToString();
string modelid=this.Hidden_modelid.Value.ToString();
string itemid=this.Hidden_itemid.Value.ToString();

string slocal_ip=Request.ServerVariables["REMOTE_HOST"];
string sregtime=System.DateTime.Now.ToString();
string exName=FileName.Substring(FileName.LastIndexOf(".")+1).ToUpper();//截取图片的后缀名

string fn=myFile.PostedFile.FileName;
string imghead=svrid+"_";
string SaveName=imghead+DateTime.Now.ToString("yyyyMMddhhmmssfff");//根据时间生成图片名
strImageName=SaveName+fn.Substring(fn.LastIndexOf("."));//图片名加上图片后缀名
string strpath=Server.MapPath("")+"/upimage/"+"/"+this.Session_UserID+"/";//得到将要保存图片的路径
string saveimg="upimage/"+this.Session_UserID+"/"+strImageName;
string savepath=strpath+strImageName;
string sqlread;
string sqladd;
if(itemid=="")
{
sqlread
="select pic_path from BZ_Data_pic where Busi_id='"+this.Session_UserID+"' and Modal_id='"+modelid+"' and svrID='"+svrid+"'";
sqladd
="insert into BZ_Data_pic(Modal_id,SvrID,Busi_id,pic_path,Reg_time,Local_ip) values('"+modelid+"','"+svrid+"','"+this.Session_UserID+"','"+saveimg+"','"+sregtime+"','"+slocal_ip+"')";
}

else
{
sqlread
="select pic_path from BZ_Data_ModalItemPic where Busi_id='"+this.Session_UserID+"' and Modal_id='"+modelid+"' and Item_ID='"+itemid+"' and svrID='"+svrid+"'";
sqladd
="insert into BZ_Data_ModalItemPic(Modal_id,SvrID,Busi_id,Item_ID,pic_path,Reg_time,Local_ip) values('"+modelid+"','"+svrid+"','"+this.Session_UserID+"','"+itemid+"','"+saveimg+"','"+sregtime+"','"+slocal_ip+"')";
}

System.Data.DataTable dt
=Framework.ComLib.DataBase.Query(sqlread).Tables[0];
//判断保存的图片张数
if(dt.Rows.Count<3)
{
if(exName=="JPG"||exName=="BMP"||exName=="GIF")
{
if(myFile.PostedFile.ContentLength>204800)//判断图片是否大于200k
{
RegisterClientScriptBlock (
"alertInfo","<script>alert('对不起,你上传的图片太大,请转换后上传')</script>");
return;
}

if(System.IO.Directory.Exists(strpath) == false)
{
System.IO.Directory.CreateDirectory(strpath);

}

myFile.PostedFile.SaveAs(savepath);
//把图片保存在此路径中

Framework.ComLib.DataBase.ExecuteSql( sqladd);
RegisterClientScriptBlock (
"alertInfo","<script>window.opener.location.reload();window.opener.opener=null;window.close();</script>");
}

else
{
RegisterClientScriptBlock (
"alertInfo","<script>alert('请选择正确的图片文件')</script>");
return;
}

}

else
{
RegisterClientScriptBlock (
"alertInfo","<script>alert('最多只能上传3张图片');location.href=location.href;</script>");
}

}


二: 直接把图片放到数据库中
一、文件(图片)保存到数据库
//得到用户要上传的文件名
string strFilePathName = loFile.PostedFile.FileName;
string strFileName = Path.GetFileName(strFilePathName);
int FileLength = loFile.PostedFile.ContentLength;
if(FileLength<=0)
return;
try
{//上传文件
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = loFile.PostedFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray,0,FileLength); 
//建立SQL Server链接
string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
SqlConnection Con 
= new SqlConnection(strCon);
String SqlCmd 
= "INSERT INTO ImageStore (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@Image, @ContentType, @ImageDescription, @ImageSize)";
SqlCommand CmdObj 
= new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add(
"@Image",SqlDbType.Binary, FileLength).Value = FileByteArray;
CmdObj.Parameters.Add(
"@ContentType", SqlDbType.VarChar,50).Value = loFile.PostedFile.ContentType; //记录文件类型
//把其它单表数据记录上传
CmdObj.Parameters.Add("@ImageDescription", SqlDbType.VarChar,200).Value = tbDescription.Text;
//记录文件长度,读取时使用
CmdObj.Parameters.Add("@ImageSize", SqlDbType.BigInt,8).Value = FileLength;
Con.Open();
CmdObj.ExecuteNonQuery(); 
Con.Close();
//跳转页面
Response.Redirect("ShowAll.aspx");
}

catch
{
}

取出来显示:
int ImgID = Convert.ToInt32(Request.QueryString["ID"]); //ID为图片ID 
//建立数据库链接
string strCon = System.Configuration.ConfigurationSettings.AppSettings["DSN"];
SqlConnection Con 
= new SqlConnection(strCon);
String SqlCmd 
= "SELECT * FROM ImageStore WHERE ImageID = @ImageID";
SqlCommand CmdObj 
= new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add(
"@ImageID", SqlDbType.Int).Value = ImgID;
Con.Open();
SqlDataReader SqlReader 
= CmdObj.ExecuteReader();
SqlReader.Read(); 
Response.ContentType 
= (string)SqlReader["ImageContentType"];//设定输出文件类型
//输出图象文件二进制数制
Response.OutputStream.Write((byte[])SqlReader["ImageData"], 0, (int)SqlReader["ImageSize"]); 
Response.End();
//也可以保存为图像
// FileStream fs = new FileStream(@"C:aa.BMP", FileMode.OpenOrCreate, FileAccess.Write);
// fs.Write((byte[])SqlReader["ImageData"], 0,(int)SqlReader["ImageSize"]);
// fs.Close();

Con.Close();
三 在WinForm环境中把图片放在数据库中


System.Data.SqlClient.SqlConnection conn 
= new SqlConnection(sqlconnstr);
System.Data.SqlClient.SqlCommand cmd 
= new SqlCommand("insert imgtable values(@name,@data)",conn);
System.Data.SqlClient.SqlParameter pm 
= new SqlParameter("@name",System.Data.SqlDbType.VarChar,200);
pm.Value 
= fname;
System.Data.SqlClient.SqlParameter pm1 
= new SqlParameter("@data",System.Data.SqlDbType.Image);
System.IO.FileStream fs 
= new System.IO.FileStream(fname,System.IO.FileMode.Open);
int len = (int)fs.Length;
System.Byte[] fileData 
= new byte[len];
fs.Read(fileData,
0,len);
fs.Close();
pm1.Value 
= fileData;
cmd.Parameters.Add(pm);
cmd.Parameters.Add(pm1);
conn.Open();
try
...
{
cmd.ExecuteNonQuery();
MessageBox.Show(
"Save Picture to database succeed");
}

catch(System.Exception ex)
...
{
MessageBox.Show(ex.ToString());
}

读取的过程
System.Data.SqlClient.SqlConnection conn 
= new SqlConnection(sqlconnstr);
System.Data.SqlClient.SqlCommand cmd 
= new SqlCommand("select * from imgtable where imgname like '%bmp%'",conn);
conn.Open();
System.Data.SqlClient.SqlDataReader dr;
try
...
{
dr 
= cmd.ExecuteReader();
while(dr.Read())
...
{
System.Data.SqlTypes.SqlBinary sb 
= dr.GetSqlBinary(2);
System.IO.MemoryStream stm 
= new System.IO.MemoryStream(sb.Value);
System.Drawing.Bitmap bmp 
= new Bitmap(Bitmap.FromStream(stm));
this.pictureBox1.Image = bmp;
}

dr.Close();
}

catch
...
{

}

finally
...
{
conn.Close();
}

说明:Sql Server 数据库中 Image
/Text这两种数据类型都是容量比较大的数据类型,单字段可以存取2GB的数据,而普通的字段不能超过
8K,Text通常用来保存大文本数据,可直接用字符串判断检索,Image通常用来保存二进制数据,不可直接用字符串判断检索

四 给图片加文字和图片水印
private void Btn_Upload_Click(object sender, System.EventArgs e)
...
{
if(UploadFile.PostedFile.FileName.Trim()!="")
...
{
//上传文件
string extension = Path.GetExtension(UploadFile.PostedFile.FileName).ToUpper();
string fileName = DateTime.Now.ToString("yyyyMMddhhmmss");
string path = Server.MapPath("."+ "/UploadFile/" + fileName + extension;
UploadFile.PostedFile.SaveAs(path);

//加文字水印,注意,这里的代码和以下加图片水印的代码不能共存
System.Drawing.Image image = System.Drawing.Image.FromFile(path);
Graphics g 
= Graphics.FromImage(image);
g.DrawImage(image, 
00, image.Width, image.Height);
Font f 
= new Font("Verdana"32);
Brush b 
= new SolidBrush(Color.White);
string addText = AddText.Value.Trim();
g.DrawString(addText, f, b, 
1010);
g.Dispose();

//加图片水印
System.Drawing.Image image = System.Drawing.Image.FromFile(path);
System.Drawing.Image copyImage 
= System.Drawing.Image.FromFile( Server.MapPath("."+ "/Alex.gif");
Graphics g 
= Graphics.FromImage(image);
g.DrawImage(copyImage, 
new Rectangle(image.Width-copyImage.Width, image.Height-copyImage.Height, copyImage.Width, copyImage.Height), 00, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
g.Dispose();

//保存加水印过后的图片,删除原始图片
string newPath = Server.MapPath("."+ "/UploadFile/" + fileName + "_new" + extension;
image.Save(newPath);
image.Dispose();
if(File.Exists(path))
...
{
File.Delete(path);
}


Response.Redirect(newPath);
}

}

// 注意:加文字水印和加图片水印的代码不能共存 


原文地址: http:
//tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=1514195
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值