/// <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; } }