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)















原创粉丝点击