使用 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);
});
但是发现写入中文报错(英文或数字是没问题的):
搜索问题,大多是说重新编译PHP,取消–enable-gd-jis-conv这个参数。PHPinfo查看PHP环境,确实存在,重新编译后,
但是问题未得到解决。
最终解决办法将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;
}
关于 LearnKu
请问to_unicode这个方法写在哪里调用的?我也遇到了图片添加中文文字水印乱码的情况
@try-laravel 就是在你调用text方法之前,将字符串转下,再调用text方法,写入转换格式的字符串。
为什么我输入中文不报错 但是就是不显示 把中文转成unicode也不行啊
@Tiana 什么都没有吗?你贴下截图。
问题解决了,有可能不支持这个字体文件,重新选一个支持的字体文件就解决了
请问 我插入的文字不是很清晰,应该怎么办?
请问转了Unicode还是乱码改如何处理啊
@cq-1110 你看下是不是字体的问题,有没有支持的字体。
什么都没有做,只是换了一个支持中文的字体就行了。
@Evan 请问用什么字体,哪里可以获取
请问 下我的$font->file() 这个路径怎么用都不行,我把font.ttf放在了public 目录下 在homestead上是可以 部署到centos 怎么也读取不到 base_path().'font.ttf' 或者 直接 font.ttf 都报错 Internal GD font () not available
@深入浅出 base_path() 路径是项目的绝对根路径,所以你$font->file() 中的路径是怎么写的呢?
@赖皮小鳄鱼
@赖皮小鳄鱼 终于知道什么问题了,看了半天我才想起来,我的文件是font.TTF,linux服务器区分大小写的 我去
@深入浅出 那你homestead 也是区分的啊?还有把你的最终写法贴出来,供大家参考。
$font->file(base_path().'/public/font.ttf')//都试过了| 这个写法肯定是没问题的,但是不太友好,
$font->file('font.ttf'); //直接放在了public目录下 | 这种方法我不太确定对不对了,很久的时候用的了,
@赖皮小鳄鱼 homestead确实没有区分大小写 不然我不会捣鼓这么久了
test.TTF 字体用的是: http://www.font5.com.cn/font_download.php?...
亲 问下 我报错是啥原因
字体可以试试: github.com/StellarCN/scp_zh/tree/m...
你们怎么居中的
有没有支持表情的字体