<?php
namespace app\common\util;
use app\common\service\OrderService;
use Carbon\Carbon;
class DonationCert
{
public static function certByOrder($order)
{
$carbon = Carbon::parse($order->pay_time);
$date = $carbon->isoFormat('YYYY年MM月DD日');
$position = OrderService::orderPositionInDate($order);
$certNo = $carbon->isoFormat('YYYYMMDD') . sprintf('%04d', $position);
return self::cert($order->user_name, $order->money, $date, $certNo);
}
public static function cert($name, $money, $date, $certNo)
{
// 创建一张新的图片
$image = imagecreatefromjpeg('image.jpg');
// 设置文字颜色和字体大小
$gray = imagecolorallocate($image, 102, 102, 102);
$black = imagecolorallocate($image, 46, 46, 46);
$green = imagecolorallocate($image, 7, 193, 96);
$font = 'PingFang.ttf';
$semibold = 'PingFangSemiBold.ttf';
// 姓名
$x = 90; // 文本在图片中的x坐标
$y = 550; // 文本在图片中的y坐标
imagettftext($image, 36, 0, $x, $y, $black, $semibold, $name);
// 谢谢你
$thx = '谢谢你:';
$x = $x + 12 + strlen($name) * 15;
imagettftext($image, 18, 0, $x, $y, $gray, $font, $thx);
// 感谢语金额
$suffix = 2;
if ($money >= 10 * 10000 && $money < 100 * 10000) {
$suffix = 1;
} elseif ($money >= 100 * 10000) {
$suffix = 0;
}
$money = number_format($money, $suffix, '.', '');
$x = 265;
$y = 625;
imagettftext($image, 28, 0, $x, $y, $green, $semibold, $money);
// 下方列表
$formX = 258;
$formY = 870;
$gap = 86; //中间间隔
// 证书编号
imagettftext($image, 24, 0, $formX, $formY, $black, $font, $certNo);
// 捐赠金额
$formY += $gap;
imagettftext($image, 28, 0, $formX, $formY, $green, $semibold, $money);
// 发放时间
$formY += $gap;
imagettftext($image, 24, 0, $formX, $formY, $black, $font, $date);
// 输出图片
$name = md5(strtotime('now') . random_int(100000, 999999)) . '.png';
$dir = public_path() . "storage/";
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}
$path = $dir . $name;
imagepng($image, $path);
$url = self::get_domain() . dirname($_SERVER['SCRIPT_NAME']) . '/' . $name;
$url = str_replace('\\', '/', $url);
$url = str_replace('public', 'public/storage', $url);
// 释放内存
imagedestroy($image);
return ['url' => $url];
}
/**
* 获取当前网站的域名地址
*
* @return string 域名地址
*/
protected static function get_domain()
{
$sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
return $sys_protocal . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
}
}