[C#] 透過FacebookId 取得個人圖片併合成
2013-01-04
常看到Facebook上面有一些活動app 會合成個人照片
到底是怎麼做的呢?!
因為很常用也有人問就記錄一下…
首先我如何怎麼透過Facebook Id 取得個人照片..
在Facebook 官方文件有記載這段話,因為沒有獨立頁面很容易忽略..
文件網址: http://graph.facebook.com
因為這些規則 所以寫了一個簡單的Class 來做轉換
public class FBImage
{ private string FacebookId { get; set; } /// <summary>/// 50x50 正方形
/// </summary>public string Square
{ get { return "http://graph.facebook.com/" + FacebookId + "/picture?type=square"; }}
/// <summary>/// 寬度200 高度等比縮
/// </summary>public string Large
{ get { return "http://graph.facebook.com/" + FacebookId + "/picture?type=large"; }}
/// <summary>/// 寬度50 高度等比縮
/// </summary>public string Small
{ get { return "http://graph.facebook.com/" + FacebookId + "/picture?type=small"; }}
/// <summary>/// 寬度100 高度等比縮
/// </summary>public string Normal
{ get { return "http://graph.facebook.com/" + FacebookId + "/picture?type=normal"; }}
public FBImage(string facebookId)
{ FacebookId = facebookId; }}
透過Property 的方式只要透過Ctor 給入Facebook Id 就會給予這些網址
當然你可以透過enum 等方法規劃的更好…
再來我們需要透過網址將圖片轉成我們需要的Bitmap 格式之後才可以進行合成..
/// <summary>/// 透過網址取得圖片 轉Bitmap/// </summary>/// <param name="url"></param>/// <returns></returns>public Bitmap BitmapFromWeb(string url)
{ try {HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "GET";HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();
Bitmap bmp = new Bitmap(myResponse.GetResponseStream());myResponse.Close();
return bmp;}
catch {return null;
}
}
之後就可以開始來實作 首先我們必須先載入底圖 其中我命名為 sample.jpg
我的Facebook Id 為 100001962382625
當然在文件中記錄 你也可以使用 short name 來達到一樣的效果 我的short name 為 donma.hsu
//載入底圖var originalImage =new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "sample.jpg");
//畫筆Graphics oGraphics = Graphics.FromImage(originalImage);
//我的id 為 100001962382625 取得Large Size 網址//透過 BitmapFromWeb 取回//取得Facebook Bitmap var facebookImage = BitmapFromWeb(new FBImage("100001962382625").Large);
//將Facebook bitmap 畫到底圖上面 因為 x , y 處理為置中處理oGraphics.DrawImage(facebookImage, (originalImage.Width / 2) - (facebookImage.Width / 2), (originalImage.Height / 2) - (facebookImage.Height / 2), facebookImage.Width, facebookImage.Height);
//存檔originalImage.Save(AppDomain.CurrentDomain.BaseDirectory + "output.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);//Dtor.oGraphics.Dispose();
originalImage.Dispose();
Image1.ImageUrl = "output.jpg";結果:
當然這是最簡單的範例 通常接案的時候 不會怎麼簡單的 會遇到如何把畫面處理的好看才是重點
要很多時間去微調..
