首頁
新聞
功能
下載
開發
支援
論壇
文件
搜尋
關於我們
歡迎光臨,
訪客
. 請先
登入
或
註冊一個帳號
.
九月 15, 2024, 10:29:44 下午
19595
文章 在
3865
主題 由
4579
會員
最新註冊會員:
aa123aa1
首頁
說明
搜尋
登入
註冊
LifeType 中文開發論壇
|
開發
|
外掛程式
|
讓 authimage 顯示中文的數字
« 上篇主題
下篇主題 »
頁:
[
1
]
列印
作者
主題: 讓 authimage 顯示中文的數字 (閱讀 20949 次)
twu2
初級會員
文章: 61
讓 authimage 顯示中文的數字
«
於:
三月 01, 2007, 02:08:08 下午 »
之前雖然把 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 的目錄解開來, 覆蓋原有的檔案就可以了.
«
最後編輯時間: 三月 01, 2007, 04:17:14 下午 由 twu2
»
已記錄
Tommy 碎碎念...
markwu
系統管理員
超級會員
文章: 3928
Mark Wu
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #1 於:
三月 01, 2007, 02:15:21 下午 »
這 idea 實在太棒了!可是唯一可惜的事外國人看不懂 ...
我們應該來順便推廣一下中文。
Mark
已記錄
問問題前,麻煩請先參考
LifeType 中文文件計畫
與
如何在 LifeType 中文開發論壇發問
。
perlish
新手見習
文章: 19
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #2 於:
三月 11, 2007, 07:49:51 上午 »
整好解了燃眉之急
顶一下
已記錄
perlish
新手見習
文章: 19
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #3 於:
三月 11, 2007, 08:15:20 上午 »
我应用了一下,发现有下面的问题:
Error 对不起,您所要进行的操作无法执行。
您的回复验证码输入有误,请检查后重试。
我的确正确的输入了汉字,但是还是出现上述错误,有什么调试的办法吗?或者问题大概出在哪里?
我的是lifetype 1.0.3的
下载的这个包
http://www.teatime.com.tw/~tommy/files/lifetype/lifetype_authimage_chinese.tgz
已記錄
twu2
初級會員
文章: 61
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #4 於:
三月 11, 2007, 10:58:35 上午 »
那個顯示的是漢字, 但是輸入的要是阿拉伯數字才可以.
我的考慮是, 輸入漢字的數字, 對使用者來說, 比較不友善, 要打比較多的字. 而輸入阿拉伯數字就很容易了.
如果你需要使用者也輸入漢字的數字的話, 請自己修改程式的內容, 把檢查碼記算的部份也改成用漢字才可以.
已記錄
Tommy 碎碎念...
perlish
新手見習
文章: 19
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #5 於:
三月 11, 2007, 11:49:44 上午 »
我倒……我说难怪我输入老不对……
不过我现在用了模糊的数字了的,也是你写的patch,先用着吧
不过那个有点麻烦,要重新编译php支持ttf
已記錄
twu2
初級會員
文章: 61
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #6 於:
三月 11, 2007, 03:17:23 下午 »
我有看到那篇, 不過, 我也是用 debian/etch, 並沒有自己重編 php, 都使用內建的模組, 並沒有與你一樣的問題.
已記錄
Tommy 碎碎念...
perlish
新手見習
文章: 19
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #7 於:
三月 12, 2007, 07:51:33 上午 »
引用自: twu2 於 三月 11, 2007, 03:17:23 下午
我有看到那篇, 不過, 我也是用 debian/etch, 並沒有自己重編 php, 都使用內建的模組, 並沒有與你一樣的問題.
apt装的lamp会装上很多php模块的,我的虽然是在debian下,但apache和php是自己编译的所以会遇到这个问题
希望twu2继续多出好东西啊 :)
已記錄
twu2
初級會員
文章: 61
Re: 讓 authimage 顯示中文的數字
«
回覆文章 #8 於:
三月 14, 2007, 02:10:56 下午 »
加上動態使用背景圖案並把顯示的文字做些旋轉.
修改 pluginauthimage.class.php 裡頭的 showImage() 改成下頭的內容:
程式碼:
function showImage() {
// Delete those cached authimage files that never used
$this->deleteExpiredAuthImage($this->expiredTime);
$code = $this->generateCode();
$encrypt = $this->encrypt($code, $this->key);
$background = AUTHIMAGE_BACKGROUND_FOLDER.$this->default;
if ($this->default == 'random.gif') {
$files = glob(AUTHIMAGE_BACKGROUND_FOLDER.'*.gif');
$cnt = count($files);
$choose = rand(0, $cnt-1);
$background = $files[$choose];
}
$tempFile = $this->cacheFolder."/".$encrypt.".gif";
if (function_exists('ImageRotate'))
$size = 36;
else
$size = 24;
$len = strlen($code);
$image = ImageCreate($size * $len, $size);
$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, $size * $len, $size, $bg_width, $bg_height);
else
ImageCopyReSized($image, $im_bg, 0, 0, 0, 0, $size * $len, $size, $bg_width, $bg_height);
ImageDestroy($im_bg);
}
for ($i = 0; $i < $len; $i++) {
$im_num = @ImageCreateFromPNG(AUTHIMAGE_IMAGE_FOLDER.$code[$i].'.png');
if (function_exists('ImageRotate')) {
$im_rotate = ImageRotate($im_num, rand(-45, 45), 0);
ImageDestroy($im_num);
$im_num = ImageCreate($size, $size);
if (function_exists('ImageCopyReSampled'))
ImageCopyReSampled($im_num, $im_rotate, 0, 0, 0, 0, $size, $size, imagesx($im_rotate), imagesy($im_rotate));
else
ImageCopyReSized($im_num, $im_rotate, 0, 0, 0, 0, $size, $size, imagesx($im_rotate), imagesy($im_rotate));
ImageDestroy($im_rotate);
}
if ($im_num) {
ImageColorTransparent($im_num, ImageColorAt($image,0, 0));
ImageCopy($image, $im_num, $size * $i, 0, 0, 0, $size, $size);
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;
}
然後把 backgrounds 下頭的 transparent.gif 複製為 random.gif. 這樣子的話, 如果你在 LifeType 的設定裡頭, 選擇用 random.gif 的話, 每次會隨機決定要使用的背景圖案.
«
最後編輯時間: 三月 15, 2007, 11:05:51 上午 由 twu2
»
已記錄
Tommy 碎碎念...
頁:
[
1
]
列印
LifeType 中文開發論壇
|
開發
|
外掛程式
|
讓 authimage 顯示中文的數字
« 上篇主題
下篇主題 »
前往:
請選擇目的地:
-----------------------------
站務
-----------------------------
=> 站務公告
=> 站務建議
=> 帳號與文章刪除
-----------------------------
支援
-----------------------------
=> 安裝與設定
=> 使用與操作
=> 虛擬主機討論
=> Instant LifeType 專區
===> 安裝與設定精華區
===> 使用與操作精華區
===> 虛擬主機討論精華區
===> 虛擬主機商自我推薦區
===> Instant LifeType 精華區
-----------------------------
開發
-----------------------------
=> 外掛程式
=> 模版設計
=> 核心補強
=> 手冊文件
=> 中文相關
===> 外掛程式精華區
===> 模版發表
===> 模版設計精華區
===> 核心補強精華區
===> 手冊文件精華區
===> 中文相關精華區
-----------------------------
測試
-----------------------------
=> LifeType 1.0 測試
=> LifeType 1.1 測試
-----------------------------
部落格應用
-----------------------------
=> 教育部落格
-----------------------------
建議
-----------------------------
=> 要求與建議
=> 發表與交流
=> 網誌文化與業界動態
Powered by SMF 1.1.6
|
SMF © 2006-2008, Simple Machines LLC
載入...