Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

讓 LifeType 的 AuthImage 顯示中文數字
post by tommy @ 01 三月, 2007 14:59
之前雖然把 AuthImage 改成用 Better Captcha 的圖型來顯示, 效果不錯, 不過... Better Captcha 的圖有時仍會不太容易看的懂. 所以就想了另一種方式, 把這個改用中文字來顯示, 對於看不懂中文的外國 bot 來說, 應該就有足夠的效果. 當然... 對人來說, 如果看的懂中文, 也應該是很容易就可以看出結果來.

首先, 為了方便使用, 我們先用下頭的程式產生 0-9 的圖檔:

<?php
 
$aData[0] = "零";
$aData[1] = "一";
$aData[2] = "二";
$aData[3] = "三";
$aData[4] = "四";
$aData[5] = "五";
$aData[6] = "六";
$aData[7] = "七";
$aData[8] = "八";
$aData[9] = "九";
 
$font = "/usr/share/fonts/truetype/msjhbd.ttf";
 
foreach ($aData as $num => $str) {
$im = ImageCreate(24, 24);
$background = ImageColorAllocate($im, 255, 255, 255);
$fontcolor = ImageColorAllocate($im, 0, 0, 0);
ImageTTFText($im, 16, 0, 2, 21, $fontcolor, $font, $str);
ImagePNG($im, $num.'.png');
ImageDestroy($im);
}
 
?>

如果你要使用別的字型, 把 font 改成你喜歡的字型檔就可以. 把產生的 png 檔案, 在 authimage 的路徑下建立一個 image 的子目錄, 把檔案放到裡頭.

然後把原本的 pluginauthimage.class.php 裡頭的 showImage() 改成下頭的內容:

function showImage() {
// Delete those cached authimage files that never used
$this->deleteExpiredAuthImage($this->expiredTime);
 
define( "AUTHIMAGE_IMAGE_FOLDER", PLOG_CLASS_PATH."plugins/authimage/image/" );
 
$code = $this->generateCode();
$encrypt = $this->encrypt($code, $this->key);
$background = AUTHIMAGE_BACKGROUND_FOLDER.$this->default;
$tempFile = $this->cacheFolder."/".$encrypt.".gif";
 
$len = strlen($code);
$image = ImageCreate(24 * $len, 24);
$im_bg = ImageCreateFromGIF($background);
if ($im_bg) {
list($bg_width, $bg_height, $bg_type, $bg_attr) = @GetImageSize($background);
if (function_exists('ImageCopyReSampled'))
ImageCopyReSampled($image, $im_bg, 0, 0, 0, 0, 24 * $len, 24, $bg_width, $bg_height);
else
ImageCopyReSized($image, $im_bg, 0, 0, 0, 0, 24 * $len, 24, $bg_width, $bg_height);
ImageDestroy($im_bg);
 
}
for ($i = 0; $i < $len; $i++) {
$im_num = @ImageCreateFromPNG(AUTHIMAGE_IMAGE_FOLDER.$code[$i].'.png');
if ($im_num) {
ImageColorTransparent($im_num, ImageColorAt($im_num, 0, 0));
ImageCopy($image, $im_num, 24 * $i, 0, 0, 0, 24, 24);
ImageDestroy($im_num);
}
}
 
ImagePNG($image, $tempFile);
 
ImageDestroy($image);
 
$temp = fopen($tempFile,"rb");
$buffer = fread($temp,filesize($tempFile));
fclose($temp);
// Now zero-length the file. No need for its content anymore.
$temp = fopen($tempFile,"w");
fwrite($temp, NULL);
fclose($temp);
 
// Now chmod it so it can be deleted later by the user
chmod($tempFile, 0666);
 
header("Content-type: image/png");
echo $buffer;
}

這樣子就可以顯示中文數字的圖型了.

如果不知如何產生圖檔或修改程式, 可以抓這個檔案 http://www.teatime.com.tw/~tommy/files/lifetype/lifetype_authimage_chinese.tgz 回去, 在 authimage 的目錄解開來, 覆蓋原有的檔案就可以了.

Del.icio.us Furl HEMiDEMi Technorati MyShare
commons icon [1] Re:讓 LifeType 的 AuthImage 顯示中文數字 [ 回覆 ]

我是lifetype的新手,日前抓了authimage的外掛,
但圖片都是叉燒包??
又想抓您的『中文版』試試,
但抓了lifetype_authimage_chinese.tgz檔解開後,
又不知如何使用,並沒有檔案可覆蓋啊??

無解了,煩請指導一下好嗎??

我是用1.2.8版的!
範例頁面在http://163.30.161.130/blog/post/16/26#comments

迴響
暱稱:
標題:
個人網頁:
電子郵件:
authimage

迴響

  

Bad Behavior 已經阻擋了 97 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS