- 项目的一些说明:
- 我们在做一个汉字的项目,在这个项目中我们需要使用ps不停的制作一种图片;
- 而图片样式基本固定。每次制作都需要设计人员重复排版,不停调整图片和文字间隔和大小;
- 这样的事如果做一两次还是可以忍受的,可是每天都为这个花费大量的时间,就太折磨人了;
- 精通php的老板一看,觉得这个用php就可以解决,于是他就把这活交给了我,通过php自动生成一张样式统一的卡片,用来减轻设计小女孩的工作量,把她从不停的排版中解除出来(可是我一点不懂php啊,我是做Android的,没关系,不会我们可以学习嘛。哈哈~~);
- 就这样这个任务落到了公司除老板意外唯一懂技术的我的肩膀上了;
- 来让我们看看是什么样样子的一个卡片呢?
项目制作的卡片如下图:
由图可以看出,整个大图由小的图片和文字组成。由于文字的多少是不确定的,每次的解释长短不一样,所以我们用程序画图的时候,要动态的根据文字的长短,个数,计算出文字占用的高度。
我们使用imagettftext这个函数把文字绘制在图片上,可是问来了,我们要解决换行问题,还要解决行间距的问题。如果我们单纯的插入\n作为换行符,会发现,行间距几乎为零,很难看。
下面我更加别人的一些算法,自己写了一个换行算法,并且可以设置行高同时,可以返回文字占用的高度。也想办法拍出来,标点符号出现在句首的问题。
上面的方法在有些博客中也提到了,是用来给图片制作水印的,可是也不是很好用。
下面附上“换行”和“计算高”的算法:
//下面函数方法我是这样调用的,这里是用来测量高度的。
$temp = array("color" => array(99, 99, 99), "fontsize" =>27, "width" => 496, "left" => 100, "top" => 0, "hang_size" => 40);
//这里我只用它做测量高度,把参数false改为true就是绘制了。
$str_h=draw_txt_to($im, $temp, $str, false);
//----