iT邦幫忙

DAY 9
4

ASP.NET Web技術小技巧分享系列 第 9

[ASP.NET]將數字轉為圖片

前陣子內政部實價登錄網站http://lvr.land.moi.gov.tw/N11/homePage.action#,提供各縣市.地區的房價查詢
因為房價透明化,上線第一天就造成大量的流量而造成網路癱瘓
當然今天這篇文章不是在譴責上線沒做好壓力測試..也不是來做房地產分析..
眼尖的人有發現在網站上的價格有些不一樣!

用瀏覽器的開發者工具可以發現總價的部分都改為圖片了

改成圖片的原因的目的就是政府不讓外界抓到這些統計資料,
進而將這些資料去讓房仲業做出另一個介面提供查詢
當然這邊文章也不是要討論Open Data的相關議題
只因為以前有做過類似的需求,所以來介紹一下數字轉圖片的功能
基本上此功能在C#可以用Graphics這個類別去繪製出來,
http://msdn.microsoft.com/zh-tw/library/system.drawing.graphics.aspx

我將他寫成一個方法來完成此需求:

private string TransIntToImage(int Number)
   {
       string StrNum = Number.ToString();
       Bitmap Bmp = new Bitmap(StrNum.Length * 80, 25);  //建立實體圖檔並設定大小
       Graphics Gpi = Graphics.FromImage(Bmp);
       MemoryStream stream = new MemoryStream();
 
       Gpi.Clear(Color.White);    //設定背景顏色
       Font _font = new Font("Verdana", 9, FontStyle.Bold); //設定字型大小.樣式
       for (int i = 0; i < StrNum.Length; i++)
       {
           Int32 j = i * 18;
           Gpi.DrawString(StrNum[i].ToString(), _font, Brushes.Blue, j, 0);
       }
       Bmp.Save(stream, ImageFormat.Jpeg);
       byte[] byteArray = stream.GetBuffer(); //將Bitmap轉為Byte[]
       return Convert.ToBase64String(byteArray); //轉為Base64sting
}

回傳的是一個Base64字串,目的是直接顯示在網頁上,不再另存圖片了:
使用方法如下:

protected void Page_Load(object sender, EventArgs e)
{
    string temp = TransIntToImage(51515);
    img_Number.ImageUrl = "data:image/jpeg;base64," + temp; //直接在網頁上顯示圖片
}

結果顯示:


上一篇
[ASP.NET MVC]利用ViewEngines來載入不同的View
下一篇
[Html]Facebook分享連結卻與meta description不一致的情況
系列文
ASP.NET Web技術小技巧分享27

2 則留言

0
player
iT邦大師 1 級 ‧ 2013-09-24 12:40:51

你知道OCR嗎?

將數字轉為圖片?
還是能破的

Player 大大
我想原發文應該不是要做什麼防弊, 只是提供簡單的教學文字轉圖片的應用...

0
kyleshen
iT邦新手 3 級 ‧ 2013-09-24 13:45:57

當然什麼程式都能可能破,連Facebook這種網頁都會被駭了XD
就好像滑鼠用Javascript鎖右鍵只防君子不防小人一樣~
其實這篇重點也不再跟駭客比高下(小弟沒那麼厲害XD)
只是做個字串轉圖片的小範例,也許再其他地方會實做到

也謝謝player提供OCR的資訊,有時間來玩看看!!

我要留言

立即登入留言