PHP GD 库 使用 imagettftext 向图像写入文本时 文本包含命名实体 如何转 UTF-8
发布日期:2022-03-02 13:24:00 浏览次数:50 分类:技术文章

本文共 2348 字,大约阅读时间需要 7 分钟。

工作中遇到使用GD库生成图片,在图片上写文本时,出现了乱码。

PHP GD 库 使用 imagettftext 向图像写入文本时 文本包含命名实体 (如:™™™) 如何转 UTF-8

function createImg(){
//场景: 微信昵称带有实体命名 $nickname = 'E李 ™'; //清除缓存 ob_clean(); //一、创建画布 $xWidth = 0; $nicknameWidth = 330; $nicknameHeight = 56; //指定画布尺寸 $image = imagecreatetruecolor(640, 1008); //创建颜色 白色 $white = imagecolorallocate($image, 0, 255, 0); //创建颜色 黑色 $black = imagecolorallocate($image, 255, 255, 255); //自定义画布的背景颜色 imagefill($image, 0, 0, $white); //字体 $regularFontPath = resource_path('font/SourceHanSansSC-Regular.otf'); //二、剔除文本中 emoji 标签 $nickname = removeEmojiChar($nickname); //文本转为 utf-8 $text = toEntities($nickname, "html-entities", "utf-8"); //写入文本 imagettftext($image, $nicknameSize, 0, $xWidth, $yTextHeight, $black, $nicknameFont, $text); //三、输出图片到浏览器 header("Content-Type: image/png"); imagepng($image); //释放内存 imagedestroy($image); }//文本处理方法function toEntities($string){
$len = strlen($string); $buf = ""; for ($i = 0; $i < $len; $i++) {
if (ord($string[ $i ]) <= 127) {
$buf .= $string[ $i ]; } else if (ord($string[ $i ]) < 192) {
//unexpected 2nd, 3rd or 4th byte $buf .= "�"; } else if (ord($string[ $i ]) < 224) {
//first byte of 2-byte seq $buf .= sprintf("&#%d;", ((ord($string[ $i + 0 ]) & 31) << 6) + (ord($string[ $i + 1 ]) & 63)); $i += 1; } else if (ord($string[ $i ]) < 240) {
//first byte of 3-byte seq $buf .= sprintf("&#%d;", ((ord($string[ $i + 0 ]) & 15) << 12) + ((ord($string[ $i + 1 ]) & 63) << 6) + (ord($string[ $i + 2 ]) & 63)); $i += 2; } else {
//first byte of 4-byte seq $buf .= sprintf("&#%d;", ((ord($string[ $i + 0 ]) & 7) << 18) + ((ord($string[ $i + 1 ]) & 63) << 12) + ((ord($string[ $i + 2 ]) & 63) << 6) + (ord($string[ $i + 3 ]) & 63)); $i += 3; } } return $buf;}//剔除 emoji 标签function removeEmojiChar($str){
$mbLen = mb_strlen($str); $strArr = []; for ($i = 0; $i < $mbLen; $i++) {
$mbSubstr = mb_substr($str, $i, 1, 'utf-8'); if (strlen($mbSubstr) >= 4) {
continue; } $strArr[] = $mbSubstr; } return implode('', $strArr);}

例图

转载地址:https://blog.csdn.net/anan796/article/details/121690343 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:AngularJS学习笔记
下一篇:PHP 通过钉钉机器人同步信息至钉钉群聊 (支持使用Markdown)

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年03月22日 16时02分33秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

x86so文件装换成arm64位_64位系统正式发布说明及介绍!! 2019-04-21
for循环中取出最大最小 累加_LeetCode之长度最小的子数组 2019-04-21
如何打开老公人脸识别_【话题】南宁已有小区启用人脸识别门禁,有人点赞有人忧... 2019-04-21
makex机器人程序_机器人教育为相城青少年叩开科学世界大门 2019-04-21
一寸照纯红色底图片_Ella陈嘉桦也是“时髦精”,穿玫红色西装配拼色半身裙,高级洋气... 2019-04-21
米哈游客户端笔试题_Garena校招 游戏客户端开发通关面经 2019-04-21
airpodspro没有弹窗_使用AirPods Pro一天的主观感受 2019-04-21
创建物化视图commit_视图及范式 2019-04-21
函数传参字典_Python新手上车17:函数传递任意多个参数 2019-04-21
去掉数组最后一个元素_【一天一大 lee】在排序数组中查找元素的第一个和最后一个位置 (难度:中等) Day20201201... 2019-04-21
秦九韶算法递推公式_算法讲解之复杂度分析 2019-04-21
添加绝对路径_网站中如何添加绝对路径 2019-04-21
python房价数据分析波士顿代码数据_python数据分析-波士顿房价预测-Go语言中文社区... 2019-04-21
redis线程阻塞原因排插_Redis阻塞原因详解 2019-04-21
labview自动保存报表_基于LabVIEW的Excel报表的自动生成功能 2019-04-21
geotool 导出shp_Java 读取shape文件 2019-04-21
mysql 关联更新_MySQL UPDATE多表关联更新 2019-04-21
mysql call_mysql的call用法 call调用函数的例子 2019-04-21
python参数验证_参数验证,Python中的最佳实践 2019-04-21
python画多层网络_在pymn中修改多层网络图 2019-04-21