繁体   English   中英

用PHP和GD在图像上写文本

[英]Writing text on the image with PHP and GD

我的网站上有图片生成器。 它允许访问者在图像上写自定义文本。

我通过显示图片并使用Javascript处理这种情况,以便他们可以在图片上书写(以预览图片的外观)。 他们按下提交后,我得到x&y坐标,文本和字体大小。

(我还支持乘法字体大小)

为了在图像上写文本,我使用了ImageTTFText函数。

好的,到目前为止一切都很好。 现在我的问题是如何知道句子何时太长而无法排成一行。 我遇到了自动换行功能,但是它不可靠。 它根据字符数拆分句子。 但是,例如,如果您键入“ I”十次和“ D”十次,您会发现宽度有所不同。

好的,然后我遇到了ImageTTFBBox ,它将计算盒子的大小,所以我会知道它何时太长。 好吧,但是我该如何分割句子呢? (按字)。

如果有人可以给我答复,我将不胜感激。

我的逻辑是在每行中添加尽可能多的单词,而不必删节。 因此,我将一个单词添加到一行中,使用ImageTTFBBox()检查其渲染大小,并重复直到该行溢出为止(然后明显地删除引起溢出的单词)。 如果遇到线路溢出并且线路上只有一个单词的情况,则必须删掉该单词。 您将多次调用ImageTTFBBox()

如果您使用的是HTML5,则可以在发送之前要求Javascript提供帮助。 假设您有一个画布(甚至是用代码创建的)和上下文ctxt ,则可以执行以下操作:

ctxt.font = "14pt Arial";
ctxt.textAlign = "left";
ctxt.fillStyle = "#000";
ctxt.fillText(text, x, y);
var metrics = ctxt.measureText(text);
var width = metrics.width;

现在您知道了文本的宽度,可以进行一些基本的自动换行。 假设您的有效宽度(图片宽度减去边距)为180像素,文本宽度为679像素。 那是+/- 25%的比率(26.05%)。 使用该比例提取句子的前25%,查看其是否适合宽度,绘制并向下移动一行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM