使用 Intervention/Image 图片写入中文遇到的问题,及解决方法。

今天用到图片中需要写入文字,使用了Intervention/Image扩展,
按照Image官方文档,text方法写入文字,

// use callback to define details
$img->text('测试写入中文', 0, 0, function($font) {
    $font->file('foo/bar.ttf');
    $font->size(24);
    $font->color('#fdf6e3');
    $font->align('center');
    $font->valign('top');
    $font->angle(45);
});

但是发现写入中文报错(英文或数字是没问题的):
file
搜索问题,大多是说重新编译PHP,取消–enable-gd-jis-conv这个参数。PHPinfo查看PHP环境,确实存在,重新编译后,
file
但是问题未得到解决。

最终解决办法将utf-8 字符串转为Unicode编码格式,问题解决。

function to_unicode($string)
{
    $str = mb_convert_encoding($string, 'UCS-2', 'UTF-8');
    $arrstr = str_split($str, 2);
    $unistr = '';
    foreach ($arrstr as $n) {
        $dec = hexdec(bin2hex($n));
        $unistr .= '&#' . $dec . ';';
    }
    return $unistr;
}
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 21

请问to_unicode这个方法写在哪里调用的?我也遇到了图片添加中文文字水印乱码的情况

5年前 评论

@try-laravel 就是在你调用text方法之前,将字符串转下,再调用text方法,写入转换格式的字符串。

5年前 评论

为什么我输入中文不报错 但是就是不显示 把中文转成unicode也不行啊

5年前 评论

@Tiana 什么都没有吗?你贴下截图。

5年前 评论

问题解决了,有可能不支持这个字体文件,重新选一个支持的字体文件就解决了

5年前 评论

请问 我插入的文字不是很清晰,应该怎么办?

5年前 评论

请问转了Unicode还是乱码改如何处理啊

5年前 评论

@cq-1110 你看下是不是字体的问题,有没有支持的字体。

5年前 评论

什么都没有做,只是换了一个支持中文的字体就行了。

5年前 评论
NeoHu

@Evan 请问用什么字体,哪里可以获取

5年前 评论
TigerLin

请问 下我的$font->file() 这个路径怎么用都不行,我把font.ttf放在了public 目录下 在homestead上是可以 部署到centos 怎么也读取不到 base_path().'font.ttf' 或者 直接 font.ttf 都报错 Internal GD font () not available

4年前 评论

@深入浅出 base_path() 路径是项目的绝对根路径,所以你$font->file() 中的路径是怎么写的呢?

4年前 评论
TigerLin

@赖皮小鳄鱼

 $font->file('font.ttf'); //直接放在了public目录下
 $font->file(base_path().'/public/font.ttf')//都试过了
4年前 评论
TigerLin

@赖皮小鳄鱼 终于知道什么问题了,看了半天我才想起来,我的文件是font.TTF,linux服务器区分大小写的 我去

4年前 评论

@深入浅出 那你homestead 也是区分的啊?还有把你的最终写法贴出来,供大家参考。

$font->file(base_path().'/public/font.ttf')//都试过了| 这个写法肯定是没问题的,但是不太友好,

$font->file('font.ttf'); //直接放在了public目录下 | 这种方法我不太确定对不对了,很久的时候用的了,

4年前 评论
TigerLin

@赖皮小鳄鱼 homestead确实没有区分大小写 不然我不会捣鼓这么久了

4年前 评论
        $img =Image::make('bg.png');
//        $img =file_get_contents('bg.png');
        $fontPath = public_path('test.TTF');
        $img->text('汉字', 120, 100, function($font)use($fontPath) {
            $font->file($fontPath);
            $font->size(30);
            $font->size(160);
            $font->color('#000');
            $font->align('center');
            $font->valign('top');
            $font->angle(0);

        });

test.TTF 字体用的是: http://www.font5.com.cn/font_download.php?...

file

4年前 评论

亲 问下 我报错是啥原因

file

3年前 评论
赖皮小鳄鱼 (楼主) 3年前
jinzhidao (作者) 3年前

你们怎么居中的

3年前 评论

有没有支持表情的字体

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!