永发信息网

C#里面使用数据库存储图片并读取图片,图片集失真问题

答案:7  悬赏:60  手机版
解决时间 2021-05-07 17:26

C#里面使用数据库存储图片并读取图片,

并且在C#作出的窗体,,显示成QQ头像那样的图片集,

+问,图片集失真问题。。。800*500的图片,,使用图片集显示要失真。。我想做个相册,别说用图片框存路径。。。跪求大神解答

最佳答案

存路径不会失真,如果存的是image类型的话


给你个例子,刚好最近做项目做过。


protected void linSaveImg_Click(object sender, EventArgs e)
 {
  string fileName = this.GenFileName();
  string FileLastName = fileName.Substring(fileName.LastIndexOf(".") + 1);//得到文件的扩展名
   List<QueryCriteria> condList = new List<QueryCriteria>()
  {
   new QueryCriteria(){ FieldName="SP_GUID", Comparison= EnumSqlComparison.Equal, Value=guid}
  };
   SHANGPIN2Info shangpin = new SHANGPIN2().GetFirst(condList);
   Stream ImageStream;
   string Path = fileName;// 文件名称
   int Size = FileLoadIMG.PostedFile.ContentLength; // 文件大小【不处理它的话一定不会失真
】   string Type = FileLoadIMG.PostedFile.ContentType; // 文件类型
   ImageStream = FileLoadIMG.PostedFile.InputStream;
   shangpin.IMAGES2 = System.Drawing.Image.FromStream(ImageStream);
   shangpin.SP_GUID = guid;
   SHANGPINInfo sp = new SHANGPIN().GetEntity(guid);
   sp.Images = shangpin.IMAGES2;
   new SHANGPIN().Update(sp);
   new SHANGPIN2().Update(shangpin);
 }
 /// <summary>
 /// 循环生成新的文件名
 /// </summary>
 /// <returns></returns>
 private string GenFileName()
 {
  string FileName = this.FileLoadIMG.FileName;//获取文件名
  string FileLastName = FileName.Substring(FileName.LastIndexOf(".") + 1);//得到文件的扩展名
  string FileTime = DateTime.Now.ToString("yyyyMMddHHmmss");//得到系统时间(格式化)并加上随机数以便生成上传图片名称
  FileName = FileTime + "." + FileLastName;//产生上传图片的名称
  return FileName;
 }


读图片


private void GetProductImage(HttpContext context)
    {
    if (context.Request.QueryString["PID"] != null)
    {
    spguid = context.Request.QueryString["PID"].ToString();
    SHANGPINInfo spM = new SHANGPINInfo();
    SHANGPIN BLL = new SHANGPIN();
    spM = BLL.GetEntity(spguid);
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    if (spM.Images != null)
    {
    spM.Images.Save(ms, spM.Images.RawFormat);
    byte[] pic = ms.ToArray();
    ms.Close();
    ms.Dispose();
    context.Response.ContentType = "image/Gif";
    context.Response.BinaryWrite(pic);
    }
    else
    {
    context.Response.Write("暂无图片");
    }
    }
    }


 <img id="MiddleImage" src='<%=Common.GetPic(guid,true) %>' />



 #region 获取商品图片
 public static string GetPic(string spguid)
 {
  return ApplicationPath + "/Handler/ProductImgHandler.ashx?PID=" + spguid;
 }

全部回答

就在在数据库里面,把原来的数据列,变成一个字符串列,保存的是一个图片路径,

比如是

/Images/xx.jpg

而图片就是相对路径放在这位置,

这样用硬盘保存文件,而数据库只做个路径的记录,

帅哥, 你还是用数据库储存 电影算了,不费内存的 
我倒,你把图片存到数据库里面啊。。为什么不直接把图片存到硬盘上,然后把图片地址存到数据库,这样也不会出现你说的那些问题啊。。而且数据库又不会变的很大。。

//Image转换为byte[]数组     public static byte[] imageToByteArray(System.Drawing.Image imageIn)     {     if (imageIn == null)     return null;     using (System.IO.MemoryStream ms = new System.IO.MemoryStream())     {     imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);     return ms.ToArray();     }     }

    //byte[]数组转换为Image     public static System.Drawing.Image byteArrayToImage(byte[] byteArrayIn)     {     if (byteArrayIn == null)     return null;     using (System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArrayIn))     {     System.Drawing.Image returnImage = System.Drawing.Image.FromStream(ms);     return returnImage;     }     }

上面的代码是用来将图片与byte数组相互转换的C#代码,你把图片以二进制的形式保存在数据库里面然后在读出时候将数据库的内容读取到一个DataSet变量里面,然后对二进制数据进行转换为Image并显示在PictrueBox上面,图片大小自己设定,这样就应该不会失真,我最近做了个软件就是这样处理,希望对你有帮助

SQL2005数据库里保存的图片是黑白的,可以尝试用Oracle

你用数据流来将图片互转,当然会失真!!!

你既然用VS那你应该也会用SQL吧,,

1,在sql中建个表,专门用来存图片的名字。

2,在VS里连接数据库,并建个images文件夹来村图片,

3,写个根据ID查找的触发器,

用fileupload控件浏览要保存的图片,并保持。

引用空间,using System.IO;

    【HttpPostedFile hpf = FileUpload1.PostedFile;     string name = hpf.FileName;     string filename = Path.GetFileName(name);     hpf.SaveAs(Server.MapPath("images") + "\\" + filename);】上传图片的代码,

要取出的时候将图片显示在image控件中,

Image1.ImageUrl ="images\\"+ ds.Tables[0].Rows[0]["photo"].ToString();(images控件的URL)

*******操作要在连接了数据库的前提下才行*********

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
当你永远的失去你爱的人,却出现很多爱你的人
什么叫“本又作”?
非常食客休闲食品在什么地方啊,我要过去处理
铜鼓除了青松还有哪个地方可以打台球啊
电影大盗石川五右卫门的结尾曲叫什么名字?
朋友们帮忙解答下
有一只眼睛不敢看强灯光,是怎么回事?
植秀堂青州店地址在哪,我要去那里办事
有关不懂就问的谚语,谁可以用“不将就”说几
一个月的小狗狗的叫声用象声词咋形容
情人节快到了,该送什么礼物给女孩子呢?
喉咙痛是不是流感
求一个YY娱乐公会名字(还为被用)
世界地图是怎么绘制的?
刘翔还可以恢复到以前的状态吗?
推荐资讯
0.01摩尔每升的醋酸和0.01摩尔每升的氢氧化钠
怎么样才能让胃里的饭快点消化?
在大学怎么样可以不让英语荒废了?
DNF流星在哪爆的
东阔汽车座套厂怎么去啊,有知道地址的么
什么时候开白银宝箱得到戒指的几率大
国企领导暗发红包合法吗
钓海鱼用什么鱼饵最好,钓鲳鱼用什么饵料
乜許迷亽的情侣网名叫什么?
梦幻西游80的弱点头多少钱?
有关蝴蝶和橘子的诗句,关于橘子的诗词
杨秉华的原创歌曲为什么在qq音乐上找不到
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?