中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤
來源:易賢網(wǎng) 閱讀:1213 次 日期:2016-08-09 14:50:03
溫馨提示:易賢網(wǎng)小編為您整理了“Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤”,方便廣大網(wǎng)友查閱!

這篇文章主要介紹了Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤的相關(guān)資料,需要的朋友可以參考下

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

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

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

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

思路很簡單,就是根據(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)化成二進(jì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;

 }

 //新建一個(gè)bmp圖片 

 System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);

 //新建一個(gè)畫板 

 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í)有所幫助。

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報(bào)班

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
篠田优中文在线播放第一区| 亚洲国产日韩精品| 久久精品亚洲一区二区三区浴池| 亚洲性夜色噜噜噜7777| aa国产精品| 欧美影院视频| 欧美成人国产va精品日本一级| 欧美精品九九99久久| 国产精品久久7| 精品动漫3d一区二区三区免费| 亚洲国产aⅴ天堂久久| 亚洲无毛电影| 欧美不卡视频| 国产精品久久久久高潮| 亚洲国产精品美女| 亚洲欧美综合| 欧美高清视频| 好吊色欧美一区二区三区四区| 一本大道久久精品懂色aⅴ | 欧美一区二区在线看| 免费看成人av| 亚洲精品国久久99热| 亚洲线精品一区二区三区八戒| 久久久久久久久久看片| 国产精品久久久久久久久久久久| 美女视频网站黄色亚洲| 欧美四级在线观看| 亚洲欧洲日本专区| 久久久综合精品| 国产区在线观看成人精品| 一区二区三区四区五区精品| 欧美激情女人20p| 黄色一区二区在线观看| 亚洲欧美在线网| 国产精品看片资源| 亚洲视频免费观看| 欧美视频日韩视频在线观看| 亚洲美女av在线播放| 免费一区二区三区| 一区二区视频在线观看| 午夜老司机精品| 国产日韩一区二区三区在线播放| 亚洲一二三四区| 国产精品久久久久久久午夜片| 夜夜嗨网站十八久久| 国产精品国产三级国产普通话蜜臀| 在线亚洲电影| 国产精品免费网站| 欧美在线一区二区| 激情另类综合| 欧美另类视频| 性欧美超级视频| 尤物九九久久国产精品的特点| 久久综合中文色婷婷| 亚洲国产一区二区三区在线播| 欧美另类高清视频在线| 午夜欧美电影在线观看| 激情久久婷婷| 国产精品无码专区在线观看| 久久亚洲精选| 在线亚洲+欧美+日本专区| 国产美女一区| 欧美精品福利在线| 亚洲欧美另类久久久精品2019| 极品裸体白嫩激情啪啪国产精品| 欧美chengren| 欧美在线电影| 99国产成+人+综合+亚洲欧美| 欧美午夜免费电影| 亚洲综合日韩在线| 国产一区二区三区在线观看精品 | 国产美女精品视频免费观看| 亚洲日本黄色| 久久天天躁狠狠躁夜夜爽蜜月| 国产九色精品成人porny| 欧美日韩国产精品一区二区亚洲| 一区二区高清在线观看| 亚洲欧洲一区| 欧美日韩国产大片| 亚洲日本国产| 黄色成人av| 99视频超级精品| 亚洲国产精品一区制服丝袜| 亚洲欧洲一区二区在线观看 | 国产精品久久一区二区三区| 欧美日韩综合视频网址| 欧美无砖砖区免费| 欧美色欧美亚洲高清在线视频| 欧美人妖在线观看| 国产一区二区成人久久免费影院| 国产在线欧美日韩| 亚洲美女在线一区| 在线观看亚洲精品视频| 在线一区亚洲| 欧美极品aⅴ影院| 国产一区二区主播在线| 亚洲永久免费av| 性色一区二区三区| 欧美日韩亚洲网| 亚洲精品久久久久久久久| 久久精品亚洲乱码伦伦中文| 欧美日韩在线视频观看| 国产精品都在这里| 亚洲小视频在线观看| 欧美韩日精品| 久久一区二区视频| 最新国产精品拍自在线播放| 欧美午夜无遮挡| 欧美日韩免费高清| 欧美一区二区三区四区夜夜大片 | 久久亚洲高清| 在线亚洲电影| 亚洲国产合集| 久久夜色精品国产噜噜av| 蜜桃av一区二区三区| 国产女人精品视频| 国产亚洲欧美日韩在线一区| 经典三级久久| 亚洲国产精品久久久久婷婷884 | 亚洲一区二区三区四区在线观看| 久久精品夜色噜噜亚洲a∨| 国内自拍一区| 欧美亚一区二区| 国产精品久久久久久久电影| 欧美精品精品一区| 国产欧美在线观看| 欧美午夜精品一区| 国产欧美日韩一区二区三区| 国模私拍视频一区| 久久久蜜臀国产一区二区| 国产精品午夜在线观看| 国产日产欧美精品| 国产日韩精品一区二区浪潮av| 国产精品porn| 国产一区成人| 国产精品高清在线| 国产一区二区电影在线观看 | 国产午夜久久久久| 在线观看成人网| 亚洲午夜女主播在线直播| 欧美日本簧片| 欧美精品一区二区三区蜜桃| 国产日韩欧美一区二区三区在线观看 | 欧美在线亚洲在线| 国产中文一区二区| 欧美午夜免费影院| 国产欧美丝祙| 国产又爽又黄的激情精品视频| 国产精品欧美一区喷水| 国产精品theporn| 国产日韩欧美在线一区| 国产日韩av高清| 国产一区清纯| 国产欧美日本一区二区三区| 欧美日本韩国| 国产精品一区二区黑丝| 国产日韩欧美在线观看| 久久久久久69| 国产精品爱啪在线线免费观看| 国产精品日韩欧美一区二区三区| 欧美日韩一区二区国产| 性色一区二区| 亚洲国产欧美不卡在线观看| 欧美日韩精品一区二区三区| 久久久久国产精品一区| 欧美午夜精品久久久久免费视| 亚洲一区二区av电影| 久久久噜噜噜久久人人看| 国产日韩专区在线| 一区二区三区免费在线观看| 国产日韩视频| 亚洲精品日本| 亚洲网站视频| 国产精品中文字幕在线观看| 狠狠久久综合婷婷不卡| 在线亚洲一区| 女女同性精品视频| 国内偷自视频区视频综合| 午夜精品一区二区在线观看| 一区二区三区在线免费观看| 美女尤物久久精品| 亚洲伦理自拍| 国产综合亚洲精品一区二| 国产综合色产在线精品| 亚洲欧洲日韩女同| 久久在线免费观看| 欧美日韩在线精品| 欧美精品成人91久久久久久久| 亚洲国产成人精品久久| 久久久99精品免费观看不卡| 日韩图片一区| 狠狠综合久久av一区二区老牛| 亚洲一区亚洲二区| 激情综合电影网| 狠狠色狠狠色综合| 国产综合色产在线精品| 免费欧美电影| 欧美成人精品一区二区三区| 久久久人成影片一区二区三区| 亚洲第一视频|