[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";
結果:
當然這是最簡單的範例 通常接案的時候 不會怎麼簡單的 會遇到如何把畫面處理的好看才是重點
要很多時間去微調..