【问题标题】:Writing text on the image with PHP and GD使用 PHP 和 GD 在图像上写入文本
【发布时间】:2012-05-27 07:54:26
【问题描述】:

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

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

(我也支持多种字体大小)

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

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

好的,然后我遇到了 ImageTTFBBox,它会计算盒子的大小,所以我会知道它什么时候太长了。好吧,这很好,但是那我怎么能拆分句子呢? (通过文字)。

如果有人能给我答案,我将不胜感激。

【问题讨论】:

    标签: php image gd watermark


    【解决方案1】:

    我的逻辑是在每一行中添加尽可能多的单词,而不必删减一个单词。所以,我会在一行中添加一个单词,用ImageTTFBBox() 检查它的渲染大小,然后重复直到行溢出(然后明显删除导致溢出的单词)。如果遇到行溢出的情况,一行只有一个字,那你就必须剪掉这个字。您将多次致电ImageTTFBBox()

    【讨论】:

      【解决方案2】:

      如果您使用的是 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%,看看它是否适合宽度,绘制并向下移动一行。

      【讨论】:

        猜你喜欢
        • 2016-05-14
        • 2014-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        相关资源
        最近更新 更多