頭像剪切後圖片上傳

前言

在此只介紹後臺,用ashx 舉例:前端

前端咱們要作的事情,就是將圖片從哪一個位置截取,也就是位置x和y。數據庫

而後截取的寬和高,width 和 height。ui

如今咱們知道的就是須要四個數據x、y、width、height。code

代碼

int x = Convert.ToInt32(context.Request["x"]);
int y = Convert.ToInt32(context.Request["y"]);
int height = Convert.ToInt32(context.Request["height"]);
int width = Convert.ToInt32(context.Request["width"]);
string imageUrl = context.Request["imageUrl"];
using (Bitmap map=new Bitmap(width,height))
{
	using (Graphics g = Graphics.FromImage(map))
	{                   
		using (Image img = Image.FromFile(context.Request.MapPath(imageUrl)))
		{
			g.DrawImage(img,new Rectangle(0,0,width,height),new Rectangle(x,y,width,height),GraphicsUnit.Pixel);
			string fileNewName = Guid.NewGuid().ToString();
			string dir = "/ashx/UPLoad/Image/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/";
			string fulldir = dir + fileNewName + ".jpg";
			map.Save(context.Request.MapPath(fulldir),System.Drawing.Imaging.ImageFormat.Jpeg);
			//處理數據庫回調。。。
		} 
	}
}

當年寫的代碼,見諒。orm

分析一下,當咱們獲得了x、y、height、width。對象

而後咱們建立了bitmap,而後建立了graphics 畫布,而後開始切割了。圖片

g.DrawImage 就開始直接在畫布上畫圖了。string

解釋一下參數的意思:it

第一個參數image是圖片源。

第二個參數:

destRect
    Rectangle
Rectangle 結構,它指定所繪製圖像的位置和大小。 將圖像進行縮放以適合該矩形。

第三個參數:

srcRect
    Rectangle

Rectangle 結構,它指定 image 對象中要繪製的部分。

第四個是以什麼來計算,通常來講是以像素來計算的。

而後呢,若是看完是能夠發現上面的代碼發現有問題的。後臺

問題在於切割的後其實咱們應該保持相同大小的,而咱們的頭像通常要是正方形。

固然只是業務問題,只是介紹大概思路。

相關文章
相關標籤/搜索