php gd库扩展生成带中文字体的png图片

本文介绍如何使用PHP和GD库生成包含楷体中文文字的PNG图片,并调整图片质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意中文字体的话,需要首先安装字体库才行,这里以楷体字为例,来生成图片

apt-get install fonts-cwtex-kai

find -name *kai*.ttf

./usr/share/fonts/truetype/cwtex/cwkai.ttf


test_gd.php文件要求是以utf8无bom格式编码的

<?php
class Test_gd {

	public function __construct()
	{
		if(extension_loaded('gd')) {
		    // echo '你可以使用gd<br>';
		    /*foreach(gd_info() as $cate=>$value) {
		        echo "$cate: $value<br>";
		    }*/
		}else {
		    echo '你没有安装gd扩展';
			return;
		}
	}
        /**
     * 生成一个png图片,上面字体为楷体
     * @param  [string] $text 中文文字
     * @return [void]   
     */
	public function createPng($text)
	{		
		// Set the content-type
		 header ( 'Content-Type: image/png' );

		 // Create the image
		 $im  =  imagecreatetruecolor ( 120 ,  30 );

		 // Create some colors
		 $blue  =  imagecolorallocate ( $im ,  105 ,  158 ,  195 );
		 $grey  =  imagecolorallocate ( $im ,  128 ,  128 ,  128 );  //表示阴影效果
		 $white  =  imagecolorallocate ( $im ,  255 ,  255 ,  255 );
		 imagefilledrectangle ( $im ,  0 ,  0 ,  120 ,  29 ,  $blue );
		 
		 // Replace path by your own font path
		 //$font  =  '/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf' ;
		 $font  = '/usr/share/fonts/truetype/cwtex/cwkai.ttf';//楷体

		 $len = mb_strlen($text);
		 $posX = (imagesx($im)-20*$len) / 2 - 3*($len-1) - $len*0.5; //字间距和字留白都要去掉

		 // Add some shadow to the text
		 //imagettftext ( $im ,  20 ,  0 ,  $posX+1 ,  24 ,  $grey ,  $font ,  $text );

		 // Add the text
		 imagettftext ( $im ,  20 ,  0 ,  $posX ,  23 ,  $white ,  $font ,  $text );

		 // Using imagepng() results in clearer text compared with imagejpeg()
		 imagepng ( $im );
		 imagedestroy ( $im );
	}
      /**
     * 降低图片质量,减小文件体积
     * @return [void]
     */
    public function tinyImage()
    {
        $sImage = '/home/www/medicine/SPH00000972/主图1.jpg';
        $tImage = '/home/www/data/SPH00000972_1.jpg';

        $im = imagecreatefromjpeg($sImage);
        imagejpeg($im,$tImage,50); //quality setting to 50%
        imagedestroy($im);
        echo "complete<br/>";
    }
 }

$gdTest = new Test_gd();
$text = $_GET['text'];
$gdTest->createPng($text);	
?>


最终生成的图片效果如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值