[C#] 透過FacebookId 取得個人圖片併合成

2013-01-04

 

常看到Facebook上面有一些活動app 會合成個人照片

到底是怎麼做的呢?!

因為很常用也有人問就記錄一下…

首先我如何怎麼透過Facebook Id 取得個人照片..

在Facebook 官方文件有記載這段話,因為沒有獨立頁面很容易忽略..

2012-08-21_111715

文件網址: 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";


結果:



2012-08-21_111335



當然這是最簡單的範例 通常接案的時候 不會怎麼簡單的 會遇到如何把畫面處理的好看才是重點



要很多時間去微調..


當麻許的超技八 2014 | Donma Hsu Design.