php 用gd库在图片上写文字,并处理文字糊模问题

今天有个需求,用php在一张图片上写文字。

这个不是挺简单的嘛?我在一个test.php文件上,敲出6行代码,搞定

img=imagecreatefrompng("C:\Users\Administrator\Desktop\a.png");
$font='./static/img/SourceHanSansCN-Light.otf';
$black = imagecolorallocate($img, 0, 0, 0);
imagettftext($img,12,0,10,20,$black,$font,"test text");
imagepng($img);
//关闭流
ImageDestroy ($img);

但放在浏览器一跑,爆出 imagettftext(): Could not find/open font。

我反复看了路径,没错呀。后来去百度了下,说读取字体文件,必须是绝对路径。

路径方面,要用 realpath()转换下

$heiti=realpath('static/img/mp/font/heiti/SourceHanSansCN-Light.otf');

本想以为可以了。

后面发现写在图片上的文字,非常模糊。于是又去找了下gd库,有没调整分辨率的办法。

PHP: GD 和图像处理 函数 - Manual

 没有!

只能自己去百度了。百度上,解决方案也不多,就找到一个,它是图片上加图片,解决图片边缘锯齿。

它的方案是:图片一个图层,加上的图片一个图层,然后合成一张新图。

那好,我也采用此方法试试。

1.先建文字图层

 2.再把文字图层与图片图层,合在一起。

 程序一跑,还不错,清淅度基本满足。

最后,有gd库处理图片需要注意两点:

1.读取字体要用绝对路径。

2.图片要是糊模,请采用多图层合并。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用PHPGD来实现拖动图片、添加文字和贴图,并生成新的图片。下面是一个简单的示例代码: ```php <?php // 原始图片路径和文件名 $sourceImage = 'path/to/source/image.jpg'; // 贴图路径和文件名 $overlayImage = 'path/to/overlay/image.png'; // 创建画布 $image = imagecreatefromjpeg($sourceImage); // 获取图片的宽度和高度 $width = imagesx($image); $height = imagesy($image); // 创建贴图 $overlay = imagecreatefrompng($overlayImage); // 调整贴图的大小 $newWidth = 100; // 贴图宽度 $newHeight = 100; // 贴图高度 $resizedOverlay = imagecreatetruecolor($newWidth, $newHeight); imagecopyresampled($resizedOverlay, $overlay, 0, 0, 0, 0, $newWidth, $newHeight, imagesx($overlay), imagesy($overlay)); // 在图片文字 $text = "Hello World!"; $font = 'path/to/font.ttf'; $fontSize = 20; $textColor = imagecolorallocate($image, 255, 255, 255); // 设置文字颜色为白色 $textX = 50; // 文字左上角的 x 坐标 $textY = 50; // 文字左上角的 y 坐标 imagettftext($image, $fontSize, 0, $textX, $textY, $textColor, $font, $text); // 在图片上贴上调整后的贴图 $overlayX = 150; // 贴图左上角的 x 坐标 $overlayY = 150; // 贴图左上角的 y 坐标 imagecopy($image, $resizedOverlay, $overlayX, $overlayY, 0, 0, $newWidth, $newHeight); // 生成新的图片 $newImage = 'path/to/new/image.jpg'; imagejpeg($image, $newImage); // 释放内存 imagedestroy($image); imagedestroy($overlay); imagedestroy($resizedOverlay); echo '新的图片生成:' . $newImage; ?> ``` 您需要根据实际情况,替换代码中的图片路径和文件名,以及调整文字和贴图的位置和样式。该示例代码仅供参考,您可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值