使用PHP来实现占位图片功能,本次开发以thinkphp框架为例,以下为注意事项:
1、生成图片最大宽度为2048px;
2、未设置文本内容,默认使用的是宽 * 高形式;
3、引入字体为本地字体文件,路径为绝对地址;
话不多少,先上代码
/**
* 生成占位图片
* @return \think\Response
*/
public function data()
{
// 图片宽度
$width = input('get.width') > 2048 ? 2048 : input('get.width');
// 图片高度
$height = input('get.height');
// 文本大小
$size = $height * 0.1;
// 设置文本内容
$content = $width . ' x ' . $height;
// 创建画布
$im = imagecreatetruecolor($width, $height);
// 设置文本颜色
$textColor = imagecolorallocate($im, 158, 158, 158);
// 设置画布颜色
$backgroundColor = imagecolorallocate($im, 97, 97, 97);
// 创建画布并且填充颜色
imagefilledrectangle($im, 0, 0, $width, $height, $textColor);
// 设置字体文字路径
$fontPath = realpath('./msyh.ttf');
//计算文本范围
$position = imagettfbbox($size, 0, $fontPath, $content);
$x = ($width - $position[2] - $position[0]) / 2;
$y = ($height - $position[3] - $position[5]) / 2;
// 写入文本
imagefttext($im, $size, 0, $x, $y, $backgroundColor, $fontPath, $content);
// 开启缓存
ob_start();
// 输出图像
imagepng($im);
// 获取并清除缓存
$content = ob_get_clean();
imagedestroy($im);
// 输出图像
return response($content, 200, ['Content-Length' => strlen($content)])->contentType('image/png');
}