duanjiao8007 2012-07-11 09:35 采纳率: 100%
浏览 475
已采纳

Imagettftext - 行间距不正确

I have an problem with PHP function imagettftext. I have code for generating card images from database with text informations. And with some cards I have problem - words are written over each other (like here).

My code looks like this (font size changes depending on the length of the text)

            $length = strlen($cardInfo->description);
            if ($length < 15) {
                $divide = 15;
                $fontSize = 16;
                $lineHeight = 25;
                $startPos = 220;
            } else if ($length < 70) {
                $divide = 25;
                $fontSize = 12;
                $lineHeight = 18;
                $startPos = 210;
            } else if ($length < 110) {
                $divide = 28;
                $fontSize = 10;
                $lineHeight = 14;
                $startPos = 210;
            } else {
                $divide = 38;
                $fontSize = 8;
                $lineHeight = 13;
                $startPos = 210;
            }
            $description = wordwrap($cardInfo->description, $divide, ">>>");
            $lines = explode(">>>", $description);
            $count = 0;
            foreach ($lines as $line) {
                $position = $count * $lineHeight;
                $count++;
                imagettftext($image, $fontSize, 0, 28, ($startPos + $position), $black, $font, $line);
            }

and the text in the database looks like this:

Oblehací stroj

Imunita vůči střelám /Tato jednotka je imunní vůči střeleckým zraněním/

Other problem is with the line wrapping: here. I don't know why the word "jídlo" is on the next line.

Thank you for any answers!

  • 写回答

3条回答 默认 最新

  • dongshao8566 2012-07-16 10:55
    关注

    Long time ago, I have written a quite complex class to archive a similar task.

    I don't have this code anymore, but the steps are fairly simple.

    First: Don't rely on the calculations, php does on rare fonts.

    Php's wordwrap-function is senseless here, because you deal with a charset-width (e.g. tracking) unknown to php. Wordwrap assumes, that all characters have the same char-width.

    So, you have to build your own wordwrap-function using imagettfbbox. Then, you'll have to determine the size of the lowercase "x"-letter and the uppercase "X"-letter. These letters are the norm to calculate your own line-height/line-spacing. I also recommend you to manually separate words, since PHP does not always recognize the white-space-width correctly.

    Hope this could help you...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)