zoukankan      html  css  js  c++  java
  • .net 生成原图和多张缩略图

            /// <summary>
            /// 按日期生成文件夹名
            /// </summary>
            /// <returns>返回文件夹名</returns>
            private static String DateDir()
            {
                return DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString().PadLeft(2, '0') +
                    DateTime.Now.Day.ToString().PadLeft(2, '0');
            }
    
            /// <summary>
            /// 按GUID生成图片名
            /// </summary>
            /// <returns>返回文件名</returns>
            private static String AutoFileName()
            {
                return KeyUtils.GetNewId().Replace("-", "");
            }
    
            /// <summary>
            /// 相对文件夹路径
            /// </summary>
            private static String sReturnPath = ConfigurationManager.AppSettings["PicPath"].ToString() + "/" + DateDir();
    
            /// <summary>
            /// 保存原图
            /// </summary>
            /// <param name="bAfs">图片Byte字节数</param>
            /// <param name="sExtend">图片后缀名</param>
            /// <param name="sPath">原图绝对路径</param>
            /// <returns>返回原图绝对路径</returns>
            public static String SaveOriginalImage(Byte[] bAfs, String sExtend, String sPath)
            {
                sPath = sPath + DateDir();
    
                try
                {
                    if (!Directory.Exists(sPath))
                        Directory.CreateDirectory(sPath);
                    //定义并实例化一个内存流,以存放提交上来的字节数组。
                    MemoryStream m = new MemoryStream(bAfs);
                    //原图绝对路径
                    string sPathPicName = sPath + "\" + AutoFileName() + sExtend;
                    //原始图片写入到文件夹中
                    FileStream f = new FileStream(sPathPicName, FileMode.Create);
                    ///把内内存里的数据写入物理文件
                    m.WriteTo(f);
                    m.Close();
                    f.Close();
                    f = null;
                    m = null;
    
                    return sPathPicName;
                }
                catch (Exception)
                {
                    return "";
                }
            }
    
            /// <summary>
            /// 生成缩略图
         /// 宽高为0则返回处理后的原图,宽高不为0则返回相应的缩略图
    /// </summary> /// <param name="_Model">图片处理模型</param> /// <param name="sPathPic">输出缩略图相对路径</param> /// <returns>返回缩略图相对路径</returns> public static String ReturnThumbnailsImage(ImageModel _Model) { if (String.IsNullOrEmpty(_Model.OriginalImageUrl)) { return ""; } if (!File.Exists(_Model.OriginalImageUrl)) { return ""; } try { String sFileName = AutoFileName(); String sLastPath = _Model.Path + DateDir() + "\" + sFileName + _Model.Extend; //从文件取得图片对象 System.Drawing.Image image = System.Drawing.Image.FromFile(_Model.OriginalImageUrl); _Model.Width = _Model.Width == 0 ? image.Width : _Model.Width; _Model.Height = _Model.Height == 0 ? image.Height : _Model.Height; //取得图片大小 Size size = new Size(_Model.Width, _Model.Height); //新建一个bmp图片 Image bitmap = new Bitmap(size.Width, size.Height); //新建一个画板 Graphics g = Graphics.FromImage(bitmap); //设置高质量插值法 g.InterpolationMode = InterpolationMode.High; //设置高质量,低速度呈现平滑程度 g.SmoothingMode = SmoothingMode.HighQuality; //清空一下画布 g.Clear(Color.Transparent); //在指定位置画图 g.DrawImage(image, new Rectangle(0, 0, bitmap.Width, bitmap.Height), GetImageBeginXAndY(_Model.Width,_Model.Height,image.Width,image.Height), GraphicsUnit.Pixel); //保存高清晰度的缩略图 bitmap.Save(sLastPath, System.Drawing.Imaging.ImageFormat.Jpeg); g.Dispose(); return sReturnPath + "/" + sFileName + _Model.Extend; } catch (Exception) { return ""; } } /// <summary> /// 功能:根据位置计算出绘图的开始点 /// </summary> /// <param name="Towidth">需要生成图片的宽度</param> /// <param name="ToHeight">需要生成图片的高度</param> /// <param name="Owidth">原图宽度</param> /// <param name="OHeight">原图高度</param> /// <param name="x">绘图的开始x 点坐标</param> /// <param name="y">绘图的开始 y 点坐标</param> private static Rectangle GetImageBeginXAndY(int Towidth, int ToHeight, int Owidth, int OHeight) { int towidth = Towidth; int toheight = ToHeight; int x = 0; int y = 0; int ow = Owidth; int oh = OHeight; if ((double)Owidth / (double)OHeight > (double)Towidth / (double)ToHeight) { oh = OHeight; ow = OHeight * towidth / toheight; y = 0; x = (Owidth - ow) / 2; } else { ow = Owidth; oh = Owidth * ToHeight / towidth; x = 0; y = (OHeight - oh) / 2; } return new Rectangle(x, y, ow, oh); } /// <summary> /// 生成多张缩略图 /// </summary> /// <param name="sPath">原图绝对路径</param> /// <param name="sOriginalImageUrl">原图绝对路径</param> /// <param name="sExtend">图片后缀名</param> /// <param name="lst_PicPath">图片宽高规则列表</param> /// <returns>返回多个缩略图列表</returns> public static List<PicThumbnailRuleModel> GetMultiThumbnails(String sPath, String sOriginalImageUrl, String sExtend, List<PicThumbnailRuleModel> lst_PicPath) { List<PicThumbnailRuleModel> lst_Model = new List<PicThumbnailRuleModel>(); ImageModel _ImageModel = new ImageModel(); //绝对文件夹路径 _ImageModel.Path = sPath; _ImageModel.OriginalImageUrl = sOriginalImageUrl; _ImageModel.Extend = sExtend; for (int i = 0; i < lst_PicPath.Count; i++) { _ImageModel.Width = lst_PicPath[i].Width; _ImageModel.Height = lst_PicPath[i].Height; PicThumbnailRuleModel Model = new PicThumbnailRuleModel(); Model.Width = _ImageModel.Width; Model.Height = _ImageModel.Height; Model.PicThumbnailsInfo = UploadImageComm.ReturnThumbnailsImage(_ImageModel); lst_Model.Add(Model); } return lst_Model; }

         
        /// <summary>
        /// 图片缩略图规则模型
        /// </summary>
        public class PicThumbnailRuleModel
        {
            /// <summary>
            /// 设置生成图片宽度
            /// </summary>
            public Int32 Width { get; set; }
    
            /// <summary>
            /// 设置生成图片高度
            /// </summary>
            public Int32 Height { get; set; }
    
            /// <summary>
            /// 生成之后的图片名称
            /// </summary>
            public String PicThumbnailsInfo { get; set; }
        }
    
    
    
    
    



  • 相关阅读:
    0309. Best Time to Buy and Sell Stock with Cooldown (M)
    0621. Task Scheduler (M)
    0106. Construct Binary Tree from Inorder and Postorder Traversal (M)
    0258. Add Digits (E)
    0154. Find Minimum in Rotated Sorted Array II (H)
    0797. All Paths From Source to Target (M)
    0260. Single Number III (M)
    0072. Edit Distance (H)
    0103. Binary Tree Zigzag Level Order Traversal (M)
    0312. Burst Balloons (H)
  • 原文地址:https://www.cnblogs.com/YanKeJun/p/3848632.html
Copyright © 2011-2022 走看看