我尝试将文字与图片合并,但合并后我的文字无法正确呈现。
红色标记(আমিতোমায়য়ালবাসি)文本格式正常,而我通常会显示变量。字体链接:http://www.fonts2u.com/solaimanlipi.font
但是,当我将文本与图像合并时,它的损坏或无法正确渲染。
这是我的完整代码:
<?php
mb_language('uni');
mb_internal_encoding('UTF-8');
$username="";
if(isset($_POST['user'])){
$username = $_POST['user'];
$username = mb_convert_encoding($username, 'HTML-ENTITIES',"UTF-8");
$username = html_entity_decode($username,ENT_NOQUOTES, "ISO-8859-1");
}
$im = imagecreatefromjpeg('image.jpg');
//The numbers are the RGB values of the color you want to use
$black = ImageColorAllocate($im, 255, 255, 255);
//The canvas's (0,0) position is the upper left corner
//So this is how far down and to the right the text should start
$start_x = 50;
$start_y = 80;
$font = 'SolaimanLipi.ttf';
Imagettftext($im, 50, 0, $start_x, $start_y, $black, $font, "$username");
//Creates the jpeg image and sends it to the browser
//100 is the jpeg quality percentage
Imagejpeg($im, 'result.jpg', 100);
echo "<div style='color:red;font-size:60px;'>".$username."</font><br /><img src='result.jpg' height='500' />"
?>
注1: SolaimanLipi.ttf是Bangla(Unicode)字体。
注2: Bangla (Unicode) font not rendering correctly in tcpdf此Stack&amp;堆栈解决方案将帮助您了解我的问题&amp;给我一个解决方案。
有人帮我解决这个问题。提前谢谢。
[[以前我问了同样的问题,没有人回答。所以我重新发布并删除旧的。我希望这次有人帮助我。]]
答案 0 :(得分:2)
孟加拉语是众多脚本中的一个,无法通过在下一个字符之后放置一个字符来呈现。字符的形状根据其邻居而改变和合并。
要正确渲染,您需要一组称为Complex Text Layout的功能。在不支持CTL的文本呈现系统上,您将获得与单独呈现的每个字母相同的内容,因此আমি
会像আ ম ি
一样出现。
PHP imagettftext
函数使用的GD库不支持复杂文本布局。您必须使用某些更高级别的渲染库,例如Pango。这有点痛苦;如果你可以通过在图像上渲染文本作为HTML / CSS / SVG的一部分来实现你的目标,那肯定会更容易。
(BTW将$username
写入HTML而不进行htmlspecialchars()
是一个XSS安全漏洞,写入然后提供JPEG文件是不安全的,因为如果两个请求进入,它将会中断同时。您还应该通过添加<meta charset="utf-8"/>
将您的页面/表单作为UTF-8提供,这样您就不必与mb_convert_encoding
/ html_entity_decode
进行疯狂的舞蹈。< / p>