PHP GD 库 使用 imagettftext 向图像写入文本时 文本包含命名实体 如何转 UTF-8
发布日期:2022-03-02 13:24:00
浏览次数:50
分类:技术文章
本文共 2348 字,大约阅读时间需要 7 分钟。
工作中遇到使用GD库生成图片,在图片上写文本时,出现了乱码。
PHP GD 库 使用 imagettftext 向图像写入文本时 文本包含命名实体 (如:™™™) 如何转 UTF-8function 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.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
米哈游客户端笔试题_Garena校招 游戏客户端开发通关面经
2019-04-21
airpodspro没有弹窗_使用AirPods Pro一天的主观感受
2019-04-21
创建物化视图commit_视图及范式
2019-04-21
函数传参字典_Python新手上车17:函数传递任意多个参数
2019-04-21
秦九韶算法递推公式_算法讲解之复杂度分析
2019-04-21
添加绝对路径_网站中如何添加绝对路径
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