在PHP開發中,使用GD庫為圖片添加中文水印是常見需求。早期版本的GD庫對中文支持較差,直接使用imagestring()輸出中文會產生亂碼。本文詳細介紹如何利用imagettftext()配合iconv()編碼轉換,完美實現中文水印功能。
GD庫的imagettftext()函數支持UTF-8編碼的字符串,但PHP腳本常以GB2312編碼保存。因此需要先將中文文本從GB2312轉換為UTF-8,再繪製到圖片上。關鍵步驟如下:
iconv('GB2312', 'UTF-8', $text)進行編碼轉換imagettftext()繪製文字經測試,Windows系統下以下字體均可正常使用:
注意:字體文件路徑需根據實際操作系統環境調整,Linux系統通常需額外安裝中文字體。
<?php
header("Content-type: image/png");
$im = imagecreate(400, 300);
$gray = imagecolorallocate($im, 235, 235, 235);
$pink = imagecolorallocate($im, 255, 128, 255);
// 字體路徑請根據實際環境修改
$fontfile = "C:/Windows/Fonts/simhei.ttf";
$str = iconv("GB2312", "UTF-8", "中文水印測試!");
imagettftext($im, 30, 0, 50, 140, $pink, $fontfile, $str);
imagepng($im);
imagedestroy($im);
?>
iconv源編碼一致實際項目中建議將水印功能封裝為類,支持自定義字體大小、顏色、位置、透明度等參數,並添加錯誤處理機制,提高代碼復用性與健壯性。