最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年05月05日 08:40:43   作者:onestraw  
這篇文章主要介紹了Asp.net mvc實時生成縮率圖到硬盤的相關(guān)資料,需要的朋友可以參考下

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

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

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

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

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

下面直接粘貼代碼片段:

/// <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對應(yīng)字典
 /// </summary>
 static Dictionary<string, string> extensionContentTypeDic;

 static FileHelper()
 {
  if (extensionContentTypeDic == null)
  {
  //.jpg", ".png", ".gif", ".jpeg
  extensionContentTypeDic = new Dictionary<string, string>();
  extensionContentTypeDic.Add(".jpg", "image/jpeg");
  extensionContentTypeDic.Add(".png", "image/png");
  extensionContentTypeDic.Add(".gif", "image/gif");
  extensionContentTypeDic.Add(".jpeg", "image/jpeg");
  }
 }
 /// <summary>
 /// 根據(jù)后綴名獲取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對象轉(zhuǎn)化成二進制流 
 /// </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> 
 /// 字節(jié)流轉(zhuǎn)換成圖片 
 /// </summary> 
 /// <param name="byt">要轉(zhuǎn)換的字節(jié)流</param> 
 /// <returns>轉(zhuǎn)換得到的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);
  //設(shè)置高質(zhì)量插值法 
  g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
  //設(shè)置高質(zhì)量,低速度呈現(xiàn)平滑程度 
  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}:目標(biāo)圖片地址

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

{Width}:期望圖片寬

{Height}:期望圖片高

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • asp.net 用XML生成放便擴展的自定義樹

    asp.net 用XML生成放便擴展的自定義樹

    快過年了,公司沒有多少工作。閑來無事,共享一下之前為WEB系統(tǒng)所做的放便擴展的自定義樹。
    2010-02-02
  • ASP.NET在底層類庫中獲取Session C#類中獲取Session

    ASP.NET在底層類庫中獲取Session C#類中獲取Session

    本文介紹一些在類庫中獲取Session、Page、Resposne、Request的方法和步驟,方便初學(xué)者使用。
    2016-03-03
  • ASP.NET MVC中分部視圖的應(yīng)用方法

    ASP.NET MVC中分部視圖的應(yīng)用方法

    這篇文章主要給大家介紹了關(guān)于ASP.NET MVC中分部視圖的應(yīng)用方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • asp.net利用google的api做翻譯

    asp.net利用google的api做翻譯

    google提供了一組API可以給我們很方便的實現(xiàn)語言翻譯功能,對于我們(中國人)而言,常用的是中文與英文的互譯。
    2009-05-05
  • ASP.NET MVC限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)

    ASP.NET MVC限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)

    這篇文章介紹了ASP.NET MVC限制同一個IP地址單位時間間隔內(nèi)請求次數(shù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • 在asp.net core中使用類似Application的服務(wù)的實現(xiàn)

    在asp.net core中使用類似Application的服務(wù)的實現(xiàn)

    這篇文章主要介紹了在asp.net core中使用類似Application的服務(wù)的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • 淺談ASP.NET Core 2.0 中間件(譯)

    淺談ASP.NET Core 2.0 中間件(譯)

    這篇文章主要介紹了淺談ASP.NET Core 2.0 中間件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Asp.net MVC實現(xiàn)生成Excel并下載功能

    Asp.net MVC實現(xiàn)生成Excel并下載功能

    這篇文章主要為大家詳細(xì)介紹了Asp.net MVC實現(xiàn)生成Excel并下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • ASP.NET MVC基礎(chǔ)

    ASP.NET MVC基礎(chǔ)

    這篇文章主要介紹了ASP.NET MVC基礎(chǔ)概念、MVC三大組件之間的相互關(guān)系、以及asp.net webform模型和ASP.NET MVC模型的關(guān)系等基礎(chǔ)知識,是我們學(xué)習(xí)MVC必不可少的知識點,希望對大家能有所幫助
    2014-10-10
  • asp.net中調(diào)用Office來制作3D統(tǒng)計圖的實例代碼

    asp.net中調(diào)用Office來制作3D統(tǒng)計圖的實例代碼

    這篇文章介紹了asp.net中調(diào)用Office來制作3D統(tǒng)計圖的實例代碼,有需要的朋友可以參考一下
    2013-11-11

最新評論

包头市| 昌宁县| 滨海县| 隆回县| 雷州市| 波密县| 仙游县| 六盘水市| 易门县| 阿鲁科尔沁旗| 云安县| 固始县| 麟游县| 鄂温| 古丈县| 胶州市| 广汉市| 六枝特区| 临洮县| 华蓥市| 增城市| 绍兴市| 凤庆县| 衡水市| 田阳县| 云安县| 九台市| 镇原县| 万州区| 浦江县| 桃园市| 荔浦县| 丹东市| 文昌市| 浪卡子县| 东乌珠穆沁旗| 万安县| 伊金霍洛旗| 玉溪市| 皮山县| 缙云县|