婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Asp.net mvc實時生成縮率圖到硬盤

Asp.net mvc實時生成縮率圖到硬盤

熱門標簽:地圖標注的公司有哪些 地圖定位圖標標注 遂寧市地圖標注app 濮陽外呼電銷系統怎么樣 地圖標注專業團隊 天心智能電銷機器人 代理接電話機器人如何取消 塔城代理外呼系統 400電話辦理哪家性價比高

對于縮率圖的處理是在圖片上傳到服務器之后,同步生成兩張不同尺寸的縮率供前端調用,剛開始還能滿足需求,慢慢的隨著前端展示的多樣化,縮率圖已不能前端展示的需求,所以考慮做一個實時生成圖片縮率圖服務。

每次調用實時生成縮率圖,不緩存著實有點浪費,所以在生成縮率的同時緩存到硬盤一份,效率提高很多。

之前從網上看了一下有人用nginx + lua實現的,效率那是沒什么可說的,但是時間緊迫,自己也沒時間去研究,所以暫時先用aps.net mvc4來實現 一個,以后有時間了,再慢慢修改。

用自己熟悉的.net性能可能差那么一點點,但是實現速度快,保證可以在極端的時間內上線,并且在功能上更強。

思路很簡單,就是根據請求,判斷需要的縮率圖是否已存在于硬盤上,如果有直接返回,沒有則下載原圖,并生成縮率圖到本地,返回給客戶端。

下面直接粘貼代碼片段:

/// summary>
 /// 生成圖片縮率圖Action
 /// /summary>
 /// param name="p">原圖url/param>
 /// param name="id">圖片尺寸以及生成縮率圖的類型/param>
 /// returns>/returns>
 [ValidateInput(false)]
 public ActionResult Index(string p, string id)
 {
  if (string.IsNullOrEmpty(p))
  {
  return new HttpStatusCodeResult(404);
  }

  string oPath = Regex.Replace(p, @"http[s]?://(.*?)/", "/", RegexOptions.IgnoreCase);
  int? oWidth = 200, oHeight = 200;
  int cutMode = 3;
  string pPath;
  string oDir;

  if (!string.IsNullOrEmpty(id))
  {
  string[] ss = id.Split(new char[] { '_' }, StringSplitOptions.RemoveEmptyEntries);
  if (ss.Length  2)
  {
   return new HttpStatusCodeResult(404);
  }
  if (ss.Length > 2)
  {
   cutMode = int.Parse(ss[2]);
  }
  oPath = oPath.Insert(oPath.LastIndexOf('/') + 1, string.Format("{0}_{1}_{2}_", ss[0], ss[1], cutMode));
  oWidth = int.Parse(ss[0]);
  oHeight = int.Parse(ss[1]);
  }

  pPath = Server.MapPath(oPath);
  oDir = Path.GetDirectoryName(pPath);

  if (!System.IO.File.Exists(pPath))
  {
  byte[] imagebytes = FileHelper.DownLoadFile(p);
  if (!Directory.Exists(oDir))
  {
   Directory.CreateDirectory(oDir);
  }
  FileHelper.MakeThumbnail(FileHelper.BytToImg(imagebytes), oWidth.Value, oHeight.Value, (ThumbnailMode)cutMode, pPath, true);
  }

  return File(pPath, FileHelper.GetContentTypeByExtension(Path.GetExtension(pPath).ToLower()));
 }

輔助方法:

 public class FileHelper
 {
  /// summary>
 /// 圖片后綴和ContentType對應字典
 /// /summary>
 static Dictionarystring, string> extensionContentTypeDic;

 static FileHelper()
 {
  if (extensionContentTypeDic == null)
  {
  //.jpg", ".png", ".gif", ".jpeg
  extensionContentTypeDic = new Dictionarystring, string>();
  extensionContentTypeDic.Add(".jpg", "image/jpeg");
  extensionContentTypeDic.Add(".png", "image/png");
  extensionContentTypeDic.Add(".gif", "image/gif");
  extensionContentTypeDic.Add(".jpeg", "image/jpeg");
  }
 }
 /// summary>
 /// 根據后綴名獲取extension
 /// /summary>
 /// param name="extension">/param>
 /// returns>/returns>
 public static string GetContentTypeByExtension(string extension)
 {
  if (extensionContentTypeDic.ContainsKey(extension))
  {
  return extensionContentTypeDic[extension];
  }
  return null;
 }

 /// summary > 
 /// 將Image對象轉化成二進制流 
 /// /summary > 
 /// param name="image" > /param > 
 /// returns > /returns > 
 public static byte[] ImageToByteArray(Image image)
 {
  MemoryStream imageStream = new MemoryStream();
  Bitmap bmp = new Bitmap(image.Width, image.Height);
  Graphics g = Graphics.FromImage(bmp);
  g.DrawImage(image, new System.Drawing.Rectangle(0, 0, image.Width, image.Height));
  try
  {
  bmp.Save(imageStream, image.RawFormat);
  }
  catch (Exception e)
  {

  bmp.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
  }
  byte[] byteImg = imageStream.GetBuffer();
  bmp.Dispose();
  g.Dispose();
  imageStream.Close();
  return byteImg;
 }

 /// summary> 
 /// 字節流轉換成圖片 
 /// /summary> 
 /// param name="byt">要轉換的字節流/param> 
 /// returns>轉換得到的Image對象/returns> 
 public static Image BytToImg(byte[] byt)
 {
  MemoryStream ms = new MemoryStream(byt);
  Image img = Image.FromStream(ms);
  ms.Close();
  return img;
 }

 /// summary>
 /// 生成縮率圖
 /// /summary>
 /// param name="originalImage">原始圖片Image/param>
 /// param name="width">縮率圖寬/param>
 /// param name="height">縮率圖高/param>
 /// param name="mode">生成縮率圖的方式/param>
 /// param name="thumbnailPath">縮率圖存放的地址/param>
 public static Image MakeThumbnail(Image originalImage, int width, int height, ThumbnailMode mode, string thumbnailPath, bool isSave = true)
 {
  int towidth = width;
  int toheight = height;

  int x = 0;
  int y = 0;
  int ow = originalImage.Width;
  int oh = originalImage.Height;
  switch (mode)
  {
  case ThumbnailMode.HW://指定高寬縮放(可能變形)   
   break;
  case ThumbnailMode.W://指定寬,高按比例   
   toheight = originalImage.Height * width / originalImage.Width;
   break;
  case ThumbnailMode.H://指定高,寬按比例 
   towidth = originalImage.Width * height / originalImage.Height;
   break;
  case ThumbnailMode.Cut://指定高寬裁減(不變形)   
   if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
   {
   oh = originalImage.Height;
   ow = originalImage.Height * towidth / toheight;
   y = 0;
   x = (originalImage.Width - ow) / 2;
   }
   else
   {
   ow = originalImage.Width;
   oh = originalImage.Width * height / towidth;
   x = 0;
   y = (originalImage.Height - oh) / 2;
   }
   break;

  default:
   break;
  }

  //新建一個bmp圖片 
  System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
  //新建一個畫板 
  Graphics g = System.Drawing.Graphics.FromImage(bitmap);
  //設置高質量插值法 
  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
  //設置高質量,低速度呈現平滑程度 
  g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  //清空畫布并以透明背景色填充 
  g.Clear(Color.Transparent);
  //在指定位置并且按指定大小繪制原圖片的指定部分 
  g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight),
  new Rectangle(x, y, ow, oh),
  GraphicsUnit.Pixel);
  if (!isSave)
  {
  return bitmap;
  }
  try
  {
  //以jpg格式保存縮略圖 
  //bitmap.Save(thumbnailPath, bitmap.RawFormat);
  bitmap.Save(thumbnailPath, ImageFormat.Jpeg);
  return bitmap;

  }
  catch (System.Exception e)
  {
  throw e;
  }
  finally
  {
  originalImage.Dispose();
  bitmap.Dispose();
  g.Dispose();
  }
  return null;
 }


 /// summary>
 /// 下載指定文件
 /// /summary>
 /// param name="remoteUrl">/param>
 /// param name="ss">/param>
 public static byte[] DownLoadFile(string remoteUrl)
 {
  WebClient wc = new WebClient();
  try
  {
  return wc.DownloadData(remoteUrl);
  }
  catch (Exception e)
  {
  throw new Exception("下載文件失敗");
  }
 }

 }

 public enum ThumbnailMode
 {
 /// summary>
 /// 指定高寬縮放(可能變形)
 /// /summary>
 HW,
 /// summary>
 /// 指定高,寬按比例
 /// /summary>
 H,
 /// summary>
 /// 指定寬,高按比例
 /// /summary>
 W,
 /// summary>
 /// 指定高寬裁減(不變形) 
 /// /summary>
 Cut,

 }

 

訪問方式:

http://www.souji8.com/Home/Index/{width}_{height}_{ThumMode}?p={imageUrl}

{imageUrl}:目標圖片地址

{ThumMode}: 1:指定高寬按比例、2:指定寬,高按比例、3:指定高寬裁減(不變形)

{Width}:期望圖片寬

{Height}:期望圖片高

以上就是本文的全部內容,希望對大家的學習有所幫助。

您可能感興趣的文章:
  • ASP.NET設計網絡硬盤之文件夾實現
  • asp.net 網絡硬盤實現分析
  • ASP.NET+XML打造網絡硬盤原理分析
  • ASP.NET設計網絡硬盤之兩重要類代碼
  • ASP.NET設計網絡硬盤之查看文件夾實現代碼
  • ASP.NET設計網絡硬盤之上傳文件實現代碼
  • ASP.NET設計網絡硬盤之下載或在線查看實現代碼
  • ASP.NET設計網絡硬盤之刪除文件夾實現代碼

標簽:麗江 婁底 本溪 河南 宜春 汕頭 重慶 吉林

巨人網絡通訊聲明:本文標題《Asp.net mvc實時生成縮率圖到硬盤》,本文關鍵詞  Asp.net,mvc,實時,生成,縮率,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Asp.net mvc實時生成縮率圖到硬盤》相關的同類信息!
  • 本頁收集關于Asp.net mvc實時生成縮率圖到硬盤的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    奇米一区二区三区av| 国产毛片精品国产一区二区三区| 国内精品免费**视频| 91麻豆国产自产在线观看| 久久久亚洲午夜电影| 亚洲午夜精品久久久久久久久| 国产91丝袜在线播放0| 久久久久久综合| 国产a精品视频| 亚洲色图在线视频| 欧美日韩在线亚洲一区蜜芽| 免费看日韩精品| 久久久久久久久久久久久女国产乱| 成人中文字幕合集| 亚洲永久免费视频| 精品国产一区二区三区不卡 | 欧美性色黄大片| 日韩精品福利网| 2020国产成人综合网| 不卡区在线中文字幕| 亚洲成人午夜电影| 国产亚洲综合性久久久影院| 91国产免费观看| 狠狠色2019综合网| 国产精品国产自产拍高清av| 在线播放欧美女士性生活| 国产精品一区二区视频| 亚洲男女毛片无遮挡| 欧美电影免费提供在线观看| 日韩亚洲电影在线| 国产成人精品亚洲777人妖| 一区二区三区高清不卡| 精品第一国产综合精品aⅴ| 国产成人免费视频精品含羞草妖精 | 国产欧美一区视频| 欧美日韩精品福利| 国内精品在线播放| 亚洲h精品动漫在线观看| 欧美激情综合在线| 欧美一区二区三区人| 不卡一区二区在线| 精品一区二区三区日韩| 精品国产乱码久久久久久夜甘婷婷 | 美女视频黄a大片欧美| 亚洲欧美在线视频| 精品播放一区二区| 成人午夜大片免费观看| 最新国产成人在线观看| 久久理论电影网| 日韩午夜小视频| 欧美日韩高清不卡| 欧美在线视频你懂得| 99精品国产视频| 成人免费高清视频| 国产精品伊人色| 激情六月婷婷综合| 日本人妖一区二区| 日韩精品一区第一页| 偷拍日韩校园综合在线| 亚洲高清久久久| 亚洲成人三级小说| 午夜伦欧美伦电影理论片| 亚洲人123区| 中文字幕亚洲一区二区va在线| 国产三级精品在线| 日本一区二区三区四区在线视频| 久久久久9999亚洲精品| 久久精品亚洲精品国产欧美| 精品乱码亚洲一区二区不卡| www久久精品| 国产亚洲制服色| 国产精品灌醉下药二区| 一区视频在线播放| 亚洲美女视频在线观看| 夜夜嗨av一区二区三区网页| 一区二区国产视频| 视频一区中文字幕| 三级久久三级久久久| 日韩精品高清不卡| 久久精品国产在热久久| 久久精品久久久精品美女| 国产制服丝袜一区| 成人午夜电影网站| 欧日韩精品视频| 欧洲精品在线观看| 欧美日韩卡一卡二| 欧美乱妇一区二区三区不卡视频| 欧美日韩国产高清一区| 欧美一激情一区二区三区| 日韩美女视频在线| 日韩免费高清av| 激情五月激情综合网| 久久av资源网| 精品一区二区三区免费| 成人免费va视频| 北岛玲一区二区三区四区| 色猫猫国产区一区二在线视频| 99精品视频一区二区| 欧美天天综合网| 欧美日韩国产高清一区二区三区| 精品成人免费观看| 国产日韩欧美a| 一区二区视频在线| 一区二区三区av电影| 免费亚洲电影在线| 久久av中文字幕片| 99久久99久久精品免费看蜜桃| 日韩高清不卡在线| 成人综合日日夜夜| 国产一区二区在线视频| 色哟哟一区二区三区| 国产美女精品一区二区三区| 成人午夜看片网址| 在线91免费看| 精品国产成人在线影院| 亚洲免费电影在线| 亚洲图片欧美色图| 国产成人综合亚洲网站| av电影天堂一区二区在线观看| 91麻豆精品国产91久久久使用方法| 日韩精品中文字幕在线不卡尤物| 亚洲色图清纯唯美| 亚洲成人动漫av| 成人免费高清在线| 欧美偷拍一区二区| 国产精品久久久久久久久免费樱桃 | 日韩一区二区三区免费观看| 欧美韩日一区二区三区| 亚洲欧美激情在线| 黑人巨大精品欧美一区| www.综合网.com| 精品国产乱码久久久久久久| 国产精品电影院| 国产麻豆一精品一av一免费 | 精品亚洲porn| 精品视频免费看| 国产亚洲欧美在线| 日韩精品一区第一页| 国产+成+人+亚洲欧洲自线| 538prom精品视频线放| 国产欧美日韩另类一区| 美国一区二区三区在线播放| 成人激情小说乱人伦| 亚洲精品一区二区三区四区高清| 亚洲人成精品久久久久久| 国产精品影音先锋| 欧美日韩免费视频| 亚洲精品福利视频网站| 一区二区三区在线观看视频| 成人激情综合网站| 成人毛片在线观看| 日韩欧美你懂的| 日韩国产精品久久| 波波电影院一区二区三区| 国产夜色精品一区二区av| 一级女性全黄久久生活片免费| 日韩精品一区第一页| 久久机这里只有精品| 激情av综合网| 国产99久久久国产精品潘金网站| 欧美一级精品在线| 无码av免费一区二区三区试看| 国产成人精品免费| 日韩一区二区电影在线| 国产精品传媒在线| 99精品偷自拍| 精品美女被调教视频大全网站| 日本成人中文字幕在线视频| 99久久国产综合精品麻豆| 一区视频在线播放| 免费人成精品欧美精品| 欧洲一区在线电影| 午夜精品福利一区二区三区av| 国产成人av电影在线播放| 国产女同性恋一区二区| 日韩av一级电影| 欧美成人免费网站| **欧美大码日韩| 91高清视频在线| 欧美成人精品高清在线播放| 韩国成人在线视频| 久久品道一品道久久精品| 亚洲欧美乱综合| 欧美日韩精品一区视频| 久久精品视频一区二区| 男男gaygay亚洲| 欧美美女喷水视频| 日本va欧美va瓶| 日本高清不卡一区| 一区二区三区精密机械公司| 99精品国产视频| 午夜av区久久| 666欧美在线视频| 国产一区二区三区不卡在线观看 | 国产成人av电影在线观看| 欧美国产亚洲另类动漫| 成人性生交大片免费看中文| 亚洲欧美日韩国产手机在线| 国产精一区二区三区| 中文字幕日韩一区|