前陣子內政部實價登錄網站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; //直接在網頁上顯示圖片
}
結果顯示:
你知道OCR嗎?
將數字轉為圖片?
還是能破的
Player 大大
我想原發文應該不是要做什麼防弊, 只是提供簡單的教學文字轉圖片的應用...
當然什麼程式都能可能破,連Facebook這種網頁都會被駭了XD
就好像滑鼠用Javascript鎖右鍵只防君子不防小人一樣~
其實這篇重點也不再跟駭客比高下(小弟沒那麼厲害XD)
只是做個字串轉圖片的小範例,也許再其他地方會實做到
也謝謝player提供OCR的資訊,有時間來玩看看!!