.net 操作图片类

 public class ImgHelp
    {
        //public static string gif = "image/gif";
        //public static string jpg = "image/pjpeg";
        //public static string png = "image/x-png";
        Page pag = new Page();
        string[] Imgtype = { "image/gif", "image/pjpeg", "image/x-png" };
        public static string thisYear = DateTime.Now.Year.ToString();
        public static string thisMonth = DateTime.Now.Month.ToString();
        public static string thisDay = DateTime.Now.Day.ToString();
        string strDate = thisYear + thisMonth + thisDay + DateTime.Now.Hour.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Millisecond.ToString();

        /// <summary>
        /// 保存上传的文件返回true为保存成功Massage为文件路径,返回false为保存失败Massage错误信息
        /// </summary>
        /// <param name="ProducFile"></param>
        /// <param name="size">允许上传的最大值(以字节为单位)</param>
        /// <param name="addurl">存储路径</param>
        /// <param name="Massage">存储信息</param>
        /// <returns></returns>
        public bool UpImg(FileUpload ProducFile, int size, string addurl, out string Massage)
        {
            string mag;
            bool su = false;
            int i = ThrowImg(ProducFile, size, out mag);
            if (i == 1)
            {
                //新文件名
                string NewFileName = strDate + ProducFile.FileName.Replace("~", "").Replace("|", "").Replace("&", "");
                string url = addurl;
                string PddUrl = pag.Server.MapPath(url);
                try
                {
                    if (!Directory.Exists(PddUrl))
                    {
                        Directory.CreateDirectory(PddUrl);
                    }                  
                    if (File.Exists(pag.Server.MapPath(url + NewFileName)) == false)
                    {
                        ProducFile.SaveAs(pag.Server.MapPath(url + NewFileName));
                        Massage = url + NewFileName;
                        su = true;
                    }
                    else
                    {
                       Massage = "上传文件名已经存在,请重新上传!";                          
                    }
                  
                }
                catch
                {
                    Massage = "文件上传时程序出现异常,请重新上传!";                   
                }
            }
            else
            {
                Massage = mag;
            }
            return su;

        }


        /// <summary>
        /// 上传图片关生成 缩略图
        /// </summary>
        /// <param name="ProducFile">控件</param>
        /// <param name="size">允许上传的最大值(以字节为单位)</param>
        /// <param name="addurl">存储路径</param>
        /// <param name="frontName">保存文件前缀名集合</param>
        /// <param name="ImgWid">,宽度集合</param>
        /// <param name="ImgHid">高度集合</param>
        /// <param name="Massage">返回上传信息</param>
        /// <returns></returns>
        public bool UpImgAndBreviary(FileUpload ProducFile, int size, string addurl,string[] frontName,int[] ImgWid,int[] ImgHid,out string Massage)
        {
            string mag;
            bool key = false;
            int i = ThrowImg(ProducFile, size, out mag);
            if (i != 1)
            {
                Massage = mag;
                key = false;

               
            }
            else if (frontName.Length <= 0 || frontName.Length != ImgWid.Length || frontName.Length != ImgHid.Length)
            {
                Massage = "缩略图信息不相符";
                key = false;
            }
            else
            {
                //新文件名
                string NewFileName = "primary_" + strDate + ProducFile.FileName.Replace("primary_", "");
                //存储路径
                string url = addurl + thisYear + "/" + thisMonth + "/" + thisDay;
                //转为服务器的绝对路径
                string PddUrl = pag.Server.MapPath(url);

                try
                {
                    //判断路径目录是否存在
                    if (!Directory.Exists(PddUrl))
                    {
                        //创建目录
                        Directory.CreateDirectory(PddUrl);
                        if (File.Exists(pag.Server.MapPath(url + "/" + NewFileName)) == false)
                        {
                            //保存文件
                            ProducFile.SaveAs(pag.Server.MapPath(url + "/" + NewFileName));
                            //返回文件地址
                            Massage = url + "/" + NewFileName;

                            //生成缩略图
                            for (int j = 0; j < frontName.Length; j++)
                            {
                                BreviaryImg(Massage, Massage.Replace("primary_", frontName[j]), ImgWid[j], ImgHid[j]);
                            }
                            key = true;

                            //生成两张缩略图,保存名是在原图名前加了一个middle_,small_。
                            //newwidth1 = 200;
                            //newheight1 = 200;
                            //newwidth2 = 60;
                            //newheight2 = 60;
                            //BreviaryImg(Massage, Massage.Replace("primary_", "middle_"), newwidth1, newheight1);
                            //BreviaryImg(Massage, Massage.Replace("primary_", "small_"), newwidth2, newheight2);                      

                        }
                        else
                        {
                            Massage = "上传文件重名,请重新上传!";
                            key = false;
                        }
                    }
                    else
                    {
                        if (File.Exists(pag.Server.MapPath(url + "/" + NewFileName)) == false)
                        {
                            //保存文件
                            ProducFile.SaveAs(pag.Server.MapPath(url + "/" + NewFileName));
                            //返回保存地址
                            Massage = url + "/" + NewFileName;

                            //生成缩略图。
                            for (int j = 0; j < frontName.Length; j++)
                            {
                                BreviaryImg(Massage, Massage.Replace("primary_", frontName[j]), ImgWid[j], ImgHid[j]);
                            }
                            key = true;

                        }
                        else
                        {
                            Massage = "上传文件名已经存在,请重新上传!";
                            key = false;
                        }
                    }
                }
                catch
                {
                    Massage = "文件上传时出现程序错误,请重新上传!";
                    key = false;
                }

            }                             
         
            return key;

        }


        /// <summary>
        /// 检测上传文件
        /// </summary>
        /// <param name="ProducFile"></param>
        /// <param name="Size">允许上传最大值</param>
        /// <param name="Massage">检测信息</param>
        /// <returns></returns>   
        private int ThrowImg(FileUpload ProducFile, int Size, out string Massage)
        {
            int i = 0;

            Boolean ImgOK = false;
            if (ProducFile.HasFile)
            {
                //图片类型集
                string[] ImgExtension = { ".gif", ".jpg", ".jpeg", ".png" };
                //文件类型
                string FileType = ProducFile.PostedFile.ContentType;
                //文件扩展名
                string FileExType = Path.GetExtension(ProducFile.FileName).ToLower();
                //匹配类型
                for (int k = 0; k < ImgExtension.Length; k++)
                {
                    if (FileExType == ImgExtension[k])
                    {
                        foreach (string type in Imgtype)
                        {
                            if (FileType == type)
                            {
                                ImgOK = true;
                                break;
                            }
                        }
                    }
                }
                if (ImgOK == true)
                {
                    //获取文件大小
                    int FileSize = ProducFile.PostedFile.ContentLength;
                    if (FileSize < Size)
                    {
                        i = 1;
                        Massage = "";
                    }
                    else
                    {
                        Massage = "上传文件过大!";
                        i = 0;
                    }
                }
                else
                {
                    Massage = "上传的文件的格式不合法!";
                    i = 0;
                }
            }
            else
            {
                Massage = "请选择正确的文件路径!";
                i = 0;
            }
            return i;

        }


        /// <summary>
        /// 生成缩缩略图
        /// </summary>
        /// <param name="imagePath">原图路径</param>
        /// <param name="savePath">缩略图存储路径</param>
        /// <param name="wid">缩略图宽</param>
        /// <param name="hid">缩略图高</param>
        private void BreviaryImg(string imagePath, string savePath, int wid, int hid)
        {
            string originalImagePath = pag.Server.MapPath(imagePath);
            string thumbnailPath = pag.Server.MapPath(savePath);
            System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
            //int towidth = wid;
            //int toheight = hid;

            int x = 0;
            int y = 0;
            int ow = originalImage.Width;
            int oh = originalImage.Height;
         
            //新建一个bmp图片
            System.Drawing.Image bitmap = new System.Drawing.Bitmap(wid, hid);

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

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

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

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

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

            try
            {

                //以原格式保存缩略图
                bitmap.Save(thumbnailPath, originalImage.RawFormat);
            }
            catch (System.Exception e)
            {
                throw e;
            }
            finally
            {
                originalImage.Dispose();
                bitmap.Dispose();
                g.Dispose();
            }
        }
    }

posted @ 2011-04-13 23:50  放哨De老鼠  阅读(750)  评论(0编辑  收藏  举报