【问题标题】:PHP string concatenation as image watermarkPHP字符串连接作为图像水印
【发布时间】:2016-09-27 15:54:47
【问题描述】:

我有一个函数可以根据字体大小、字体颜色、文本坐标、文本字符串本身和背景图像成功地将文本插入图像。该功能运行良好。但是,我可以选择将用户名与一些示例文本连接起来,以便可以在图像中生成字符串。这以两种不同的方式发生:

1.Username + Text -> 这是要在图像中生成的文本。
2.Text + Username -> 这是要在图像中生成的文本。

这是选项的代码示例:

  //option 1
  $textValue = $username . ' ' . $textValue;


  //option 2
  $textValue = $textValue . ' ' . $username;

所以这应该可以完美地工作,因为 PHP 以这种方式连接字符串(对吗?) 请参阅下图中的结果:

因此,您在第一行中看到用户名在文本之前,结果非常好,但在第二行中,文本被弄乱了。 我正在使用 PHP GD 将文本写入图像。它与西里尔字符无关。我用西里尔字符测试过,问题是一样的。我已经删除了测试图像的实际用户名,并将其替换为字符串“用户名”只是为了得到这个想法。

【问题讨论】:

  • 检查字符串的长度是否有区别,看起来文本只是在同一行上换行。
  • 长度还可以,我正在使用github.com/kus/php-image 类进行图像处理。所选区域在两种方式中的大小相同。
  • 我的意思是:使用较短的字符串,看看覆盖效果是否消失。如果是这样,您将不得不将字符串拆分为适合图像长度的部分,并将每个部分的光标重新定位到下方。
  • 仍然不能正常工作..较短的字符串是可以的,但随着字符串变长,文本大小会自动减小。但是如果用户名在字符串之后,它就不起作用。它只有在用户名是第一位的情况下才有效..
  • 如果您在实际调用 ->text() 函数的位置添加代码,也许我可以提供帮助。

标签: php string image concatenation


【解决方案1】:

下次请把代码放在问题的评论图片中。标记代码和复制任何内容也更容易。

在您显示的代码 (https://i.imgsafe.org/ab071c1bf7.png) 中,您调用 ->textBox() 并指定了高度、宽度和字体大小。

如果您省略高度,代码只会为您将字符串包装成多行,这是一种解决方案。

目前,->fitToWidth() 函数会减小 fontSize 的大小,直到合适为止。要么是这个函数不能正常工作,要么是因为它不能很好地处理 Unicode 字符,要么是因为字体本身不能以计算出的大小绘制,并且写得更大。

如果问题是 unicode,则解决方案可能是使用以下方法确保两个添加的字符串的编码相同:

// option 1
$textValue = mb_convert_encoding($username, 'UTF-8') . 
    mb_convert_encoding(' ', 'UTF-8') . mb_convert_encoding($textValue, 'UTF-8');

还有:

// option 2
$textValue = mb_convert_encoding($textValue, 'UTF-8') . 
    mb_convert_encoding(' ', 'UTF-8') . mb_convert_encoding($username, 'UTF-8');

也许您可以清理此代码,但重要的是在加入字符串部分之前转换编码。 PHP 7 之前的 PHP 不'知道' 编码,对于 PHP 函数来说,一切都只是一个长字节序列。不同的编码会导致不同的字节序列,因此您必须将所有内容转换为您需要的确切编码。

【讨论】:

  • 谢谢,伙计,我也在寻找 ->fitToWidth() 函数,但在两种不同的情况下(也是西里尔文),同样的问题是在使用用户名之前和之后,编码是与本案无异。所以现在我现在问题出在哪里,但是如何解决呢?
  • 为编码问题添加了一个可能的解决方法。如果它在字体文件中,恐怕我已经超出了我的深度。 :)
  • 一种解决方法,以防问题是不同编码字符串的混合。如果这不是问题,解决方法将无法解决它。
  • 非常感谢,伙计,我很确定现在是编码问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-15
相关资源
最近更新 更多