C# 处理图片 三部曲
来源:互联网 发布:cms管理系统是什么 编辑:程序博客网 时间:2024/05/18 14:15
第一步:从电脑获取图片数据,并压缩大小
这段代码开始利用上传控件获取了原图片的Stream数据;(实验过其他的一些压缩代码,还是他丫的好)
然后设置压缩后的宽高;
设置图片的压缩比例;(这个属性会直接影响压缩后图片的大小)
最后获得压缩图片bytes[] 型数据
//获取图片并存入字节数组 HttpPostedFile file = filePhoto.PostedFile; Stream stream = file.InputStream; System.Drawing.Image img = System.Drawing.Image.FromStream(stream); ImageFormat tFormat = img.RawFormat; int sW = 0, sH = 0; int dHeight = 360, dWidth = 300; //按比例缩放 Size tem_size = new Size(img.Width, img.Height); if (tem_size.Width > dHeight || tem_size.Width > dWidth) //将**改成c#中的或者操作符号 { if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth)) { sW = dWidth; sH = (dWidth * tem_size.Height) / tem_size.Width; } else { sH = dHeight; sW = (tem_size.Width * dHeight) / tem_size.Height; } } else { sW = tem_size.Width; sH = tem_size.Height; } Bitmap ob = new Bitmap(dWidth, dHeight); Graphics g = Graphics.FromImage(ob); g.Clear(Color.WhiteSmoke); g.CompositingQuality = CompositingQuality.HighQuality; g.SmoothingMode = SmoothingMode.HighQuality; g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(img, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel); g.Dispose(); //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = 50;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } MemoryStream ms = new MemoryStream(); if (jpegICIinfo != null) { ob.Save(ms, jpegICIinfo, ep); } else { ob.Save(ms, tFormat); } byte[] bytes = ms.GetBuffer(); int length = bytes.Length; //保存数据 } catch (Exception ex) { Alert.Show(ex.Message); } finally { img.Dispose(); ob.Dispose(); }
第二部 将byte[] 型数据存入数据库(不要考虑容量 >,<)
需要用到数据库操作中的参数,如果参数过多可以考虑使用存储过程的方式
SqlCommand com = new SqlCommand("insert into tb_08 values(@ImageList)",con); com.Parameters.Add("ImageList", SqlDbType.Image); com.Parameters["ImageList"].Value = imagebytes;
第三部 显示btye[] 的数据
这里我们需要一个页面专门投放图片
只需要在它的page_load 里面添加上
byte[] bytes ;//我们要显示的图片数据 string type ;//图片的格式 Response.ContentType = string.Format("image/{0}", type); //写入二进制流 Response.BinaryWrite(bytes);
这时我们要在显示图片的位置(前台文件)上面加添加一个image元素,并且image元素的ImageUrl属性执行投放了图片的页面(这里有一个问题,如果你改变图片,image是不会发生变化的,因为你的路径始终指向相同的位置,没有刷新,这是后像个办法让路径有些改变,例如加一个时间参数?time=hhmmss)
阅读全文
0 0
- C# 处理图片 三部曲
- C#图片处理
- C#图片处理类
- C# 处理图片
- C#图片处理函数
- C#图片处理
- C#图片压缩处理
- C# 图片处理心得
- C#图片压缩处理
- C# 图片处理
- C# 图片处理类
- C# 图片压缩处理
- C#编程入门三部曲
- C#图片处理之: 锐化
- C#图片处理之: 锐化
- C#处理图片的范例
- C#处理图片效率问题
- C#图片压缩裁剪处理
- Python高级特性
- 160个练手CrackMe-011
- 链表 归并
- web server(web服务器)简单了解
- 10.18 取数 2434
- C# 处理图片 三部曲
- AWVS中文使用说明
- Trie树详解及其应用
- 深度学习新星:GAN的基本原理、应用和走向 | 硬创公开课
- 一些有意思或者要注意的小问题
- TensorFlow学习笔记(一)
- Python-opencv划线/画圆/椭圆/添加文字
- java多线程系列(一)--synchronized同步方法
- Linux命令 目录操作