C# 生成缩略图方法

  private static string CreateThumbnail(string filepath, int tWidth, int tHeight)
        {
            if (string.IsNullOrEmpty(filepath))
            {
                return "";
            }
            string paramOriginalDirectory = "thumbnail";
            string oldfilepath = filepath;
            //string originalImagePath = HttpContext.Current.Server.MapPath(filepath);//全路径(即绝对路径)
            string originalImagePath = filepath;//全路径(即绝对路径)
            //originalImagePath = ApiToWeb(originalImagePath);
            string filename = System.IO.Path.GetFileName(originalImagePath);
            string oldthumbnailImagePath = oldfilepath.Replace(filename, "") + paramOriginalDirectory + "/" + filename;
            string thumbnailPath = originalImagePath.Replace(filename, "") + paramOriginalDirectory;
            string thumbnailImagePath = originalImagePath.Replace(filename, "") + paramOriginalDirectory + "/" + filename;
            if (!Directory.Exists(thumbnailPath))
            {
                Directory.CreateDirectory(thumbnailPath);
            }

            if (!File.Exists(originalImagePath))
            {
                return oldthumbnailImagePath;
            }

            if (File.Exists(thumbnailImagePath))
            {
                return oldthumbnailImagePath;
            }

            try
            {
                FileStream fileStream = File.OpenRead(originalImagePath);
                Int32 filelength = 0;
                filelength = (int)fileStream.Length;
                Byte[] image = new Byte[filelength];
                fileStream.Read(image, 0, filelength);
                System.Drawing.Image oImage = System.Drawing.Image.FromStream(fileStream);
                fileStream.Close();
                int oWidth = oImage.Width;//原图宽度
                int oHeight = oImage.Height;//原图高度
                if (tWidth == 0)
                {
                    tWidth = 100;
                }
                if (tHeight == 0)
                {
                    tHeight = 100;
                }
                //按比例计算出缩略图的宽度和高度
                if (oWidth >= oHeight)
                {
                    tHeight = (int)Math.Floor(Convert.ToDouble(oHeight) * (Convert.ToDouble(tWidth) / Convert.ToDouble(oHeight)));
                }
                else
                {
                    tWidth = (int)Math.Floor(Convert.ToDouble(oWidth) * (Convert.ToDouble(tHeight) / Convert.ToDouble(oHeight)));
                }
                //生成缩略图
                Bitmap tImage = new Bitmap(tWidth, tHeight);
                Graphics g = Graphics.FromImage(tImage);
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;//设置高质量插值法
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;//设置高质量,低速度呈现平滑程度
                g.Clear(Color.Transparent);//清空画布并以透明背景色填充
                g.DrawImage(oImage, new Rectangle(0, 0, tWidth, tHeight), new Rectangle(0, 0, oWidth, oHeight), GraphicsUnit.Pixel);
                //string oPath = originalImagePath + "\\" + filename + ".jpg";
                //string thumbnailImagePath = thumbnailPath + "\\" + filename + ".jpg";
                tImage.Save(thumbnailImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                //释放资源                    
                oImage.Dispose();
                g.Dispose();
                tImage.Dispose();
                return oldthumbnailImagePath;
            }
            catch (Exception ex)
            {
                return ex.Message + ex.StackTrace;
            }
        }

 

posted @ 2020-08-12 10:14  摩诘  阅读(507)  评论(0编辑  收藏  举报