$im = imagecreatetruecolor(100,100);//新建一個真彩色圖像
$white = imagecolorallocate($im,255,235,255);//為一幅圖像分配顏色,這一點和我的設計常識有區別..我從來沒想過,在繪畫時,要先給指定的圖像標識分配顏色..這個函數經常和imagefill函數搞混.
imagefill($im,0,0,$white); //區域填充
$black = imagecolorallocate($im,250,50,50);//為一幅圖像分配顏色
imagerectangle($im,5,5,50,50,$black);//繪制一個矩形
header("Content-type: image/jpeg"); //發送標頭,配合imagejpeg直接在浏覽器中輸出圖像。
imagejpeg($im,ImageName,100);//輸出一個像圖,定名與質量
imagedestroy($im);//釋放與 image 關聯的內存。image 是由圖像創建函數返回的圖像標識符
?>
利用 GD 庫實現"中文水印"
發表時間: 2006-12-29 20:50 作者: hy0kl 來源: PHPChina 開源社區門戶
此帖首先特別鳴謝 lmhllr 仁兄,沒有他的指導偶此刻可能還在搜資料中 ing......
首先申明本人是新手,對於 GD 庫是一知半解,不到之處還請大家見諒吧.^_^
自從在網上看到 php + GD 庫能實現圖片加"中文水印",開始了 GD 庫的學習.
於是參照著下載的資料改了一個腳本,能實現 php繪圖,當時很是竊喜了 N 久.(見笑!)
之後就用 imagestring() 函數在圖像上實現了英文的"水印";但當偶嘗試著用它加"中文水印"時發,打印出來的全是亂碼.
於是又開始踏上解決亂碼的路途.
許久沒有得到滿意的答案,就放棄了.
最近,發現 lmhllr 仁兄的個性簽名十分特別,詢問之後終於知道原因了: GD 庫對中文支持的不是很好, imagettftext() 函數的字符集若是 UTF-8 ,則可以直接傳遞.
換言之,必需將 gb2312 的字符集轉換成 UTF-8 的字符.可以使用 iconv() 函數來實現.偶的珍藏版 PHP 手冊居然查不到本函數, ,不過可以到 php 官方網站查看 http://cn.php.net/manual/zh/ref.iconv.php ,只可惜並不是所有函數都有中文翻譯,偶的 E 文不好,只能看著 lmhllr 仁兄的例子腳本猜了.此函數將 gb2312 的字符轉換成 UTF-8 的字符.然後再調用函數,實現加"中文水印".
偶在偶的機子測試後得出:GD 支持的中文字體有 simhei.ttf(黑體) , SIMKAI.TTF(楷體) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋體&新宋體)等了.當然,腳本裡面只能代入英文名稱了,诶,誰叫操作系統不是咱寫的呢.
希望本帖能給和偶一樣遭遇的同志們一點啟發.^_^
下面是一個簡單的測試腳本了.
[php]
Header("Content-type: image/png"); /*通知浏覽器,要輸出圖像*/
$im = imagecreate(400 , 300); /*定義圖像的大小*/
$gray = ImageColorAllocate($im , 235 , 235 , 235);
$pink = ImageColorAllocate($im, 255 , 128 , 255);
/*
$fontfile = "C:WINDOWSFontsSIMHEI.TTF";
不好意思,這句老是粘上後一提交就丟了,不知道是怎麼回事,想測試的朋友們將注釋去了現測試吧
*/
/* $fontfile 字體的路徑,視操作系統而定,可以是 simhei.ttf(黑體) , SIMKAI.TTF(楷體) , SIMFANG.TTF(仿宋) ,SIMSUN.TTC(宋體&新宋體) 等 GD 支持的中文字體*/
$str = iconv(GB2312,UTF-8,中文水印!!!); /*將 gb2312 的字符集轉換成 UTF-8 的字符*/
ImageTTFText($im, 30, 0, 50, 140, $pink , $fontfile , $str);
/* 加入中文水印 */
Imagepng($im);
ImageDestroy($im);
?>[/php]
OK ,收工,但願這是本人的第一個有質量的水帖.
下面是本例子的效果了.再次對 lmhllr 表示由衷的感謝!!!