1. 简介
百度文心一言是一款简单易用的随机语句API,使用该API可以获取到各种各样的有意思的语句,用来做项目中的一些内容填充或者是生成一些文案都是很不错的选择。
而在PHP开发中,我们可以借助PHP的GD库来实现将获取到的随机语句生成图片,再配合一些水印处理的方式,可以实现很不错的效果。
2. 获取随机语句
在使用百度文心一言API之前,我们需要先去百度开发者中心申请一下API key,申请地址。
申请完成之后,我们就可以使用PHP的cURL来进行API请求了。
2.1 PHP代码示例
// 文心一言API地址
$url = "https://api.66mz8.com/api/rand.tbimg.php";
// 请求参数
$params = array(
'format' => 'json',
'encode' => 'base64'
);
// 拼接url和参数
$url .= '?' . http_build_query($params);
// 发送API请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
// 处理获取到的语句
$result = json_decode($result, true);
$text = $result['text'];
在上面的代码中,我们首先定义了API请求地址和请求参数。然后利用PHP内置函数http_build_query将参数拼接到url中,再利用curl发送请求,获取到API返回的JSON格式数据,最后解码后取出text字段即可。
3. 生成图片
得到随机语句之后,我们就可以利用GD库来生成图片了。在这里,我们使用PHP的imagefttext函数来绘制文本,可设置字体、字号、文字颜色等参数,同时可以使用imagecreatefromjpeg、imagecreatefrompng来加载图片素材。
3.1 PHP代码示例
// 加载背景图
$bgImg = imagecreatefromjpeg('bg.jpg');
// 定义字体
$font = 'msyh.ttf';
// 定义文字颜色
$textColor = imagecolorallocate($bgImg, 255, 255, 255);
// 计算文本宽高
$textInfo = imagettfbbox(14, 0, $font, $text);
$textWidth = abs($textInfo[2] - $textInfo[0]);
$textHeight = abs($textInfo[5] - $textInfo[3]);
// 计算文字位置
$x = imagesx($bgImg) / 2 - $textWidth / 2;
$y = imagesy($bgImg) / 2 - $textHeight / 2;
// 绘制文本
imagettftext($bgImg, 14, 0, $x, $y, $textColor, $font, $text);
// 输出图片
header('Content-type: image/jpeg');
imagejpeg($bgImg);
上面的代码中,我们首先使用imagecreatefromjpeg函数来加载背景图,接着定义了字体和文字颜色。然后通过imagettfbbox来计算文本的宽高,再通过计算得到文本的位置。最后使用imagettftext绘制文本即可。
4. 加入水印
为了保护我们生成的图片不被盗用,我们可以加入一些水印,常用的有图片水印和文字水印。
要加入图片水印,可以使用imagecopy函数将水印图片复制到我们生成的图片上;要加入文字水印,和上面类似,可以使用imagefttext函数绘制水印文本。
4.1 PHP代码示例
// 加载水印图
$watermarkImg = imagecreatefrompng('watermark.png');
// 计算水印位置
$wx = imagesx($bgImg) - imagesx($watermarkImg);
$wy = imagesy($bgImg) - imagesy($watermarkImg);
// 加入水印图
imagecopy($bgImg, $watermarkImg, $wx, $wy, 0, 0, imagesx($watermarkImg), imagesy($watermarkImg));
// 定义水印文本
$watermarkText = '?mywatermark';
// 定义水印颜色
$watermarkColor = imagecolorallocate($bgImg, 255, 255, 255);
// 计算水印位置
$ww = strlen($watermarkText) * 7;
$wh = 10;
// 绘制水印文本
imagettftext($bgImg, 10, 0, imagesx($bgImg) - 10 - $ww, imagesy($bgImg) - $wh, $watermarkColor, $font, $watermarkText);
// 输出图片
header('Content-type: image/jpeg');
imagejpeg($bgImg);
上面的代码中,我们首先使用imagecreatefrompng函数来加载水印图,然后计算水印位置,使用imagecopy函数将水印图片复制到我们生成的图片上。接着定义了水印文本和水印颜色,计算水印位置,使用imagettftext函数绘制文本,并将文本加入到我们生成的图片上即可。
5. 总结
在PHP开发中,利用百度文心一言API生成随机语句图片是一个很有意思的项目。我们可以利用GD库来生成图片,通过加入水印来保护我们的图片不被盗用。
以上是一个简单的实现方式,当然如果你想要更多的样式和效果也可以根据需求进行改进。