DonationCert.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace app\common\util;
  3. use app\common\service\OrderService;
  4. use Carbon\Carbon;
  5. class DonationCert
  6. {
  7. public static function certByOrder($order)
  8. {
  9. $carbon = Carbon::parse($order->pay_time);
  10. $date = $carbon->isoFormat('YYYY年MM月DD日');
  11. $position = OrderService::orderPositionInDate($order);
  12. $certNo = $carbon->isoFormat('YYYYMMDD') . sprintf('%04d', $position);
  13. return self::cert($order->user_name, $order->money, $date, $certNo);
  14. }
  15. public static function cert($name, $money, $date, $certNo)
  16. {
  17. // 创建一张新的图片
  18. $image = imagecreatefromjpeg('image.jpg');
  19. // 设置文字颜色和字体大小
  20. $gray = imagecolorallocate($image, 102, 102, 102);
  21. $black = imagecolorallocate($image, 46, 46, 46);
  22. $green = imagecolorallocate($image, 7, 193, 96);
  23. $font = 'PingFang.ttf';
  24. $semibold = 'PingFangSemiBold.ttf';
  25. // 姓名
  26. $x = 90; // 文本在图片中的x坐标
  27. $y = 550; // 文本在图片中的y坐标
  28. imagettftext($image, 36, 0, $x, $y, $black, $semibold, $name);
  29. // 谢谢你
  30. $thx = '谢谢你:';
  31. $x = $x + 12 + strlen($name) * 15;
  32. imagettftext($image, 18, 0, $x, $y, $gray, $font, $thx);
  33. // 感谢语金额
  34. $suffix = 2;
  35. if ($money >= 10 * 10000 && $money < 100 * 10000) {
  36. $suffix = 1;
  37. } elseif ($money >= 100 * 10000) {
  38. $suffix = 0;
  39. }
  40. $money = number_format($money, $suffix, '.', '');
  41. $x = 265;
  42. $y = 625;
  43. imagettftext($image, 28, 0, $x, $y, $green, $semibold, $money);
  44. // 下方列表
  45. $formX = 258;
  46. $formY = 870;
  47. $gap = 86; //中间间隔
  48. // 证书编号
  49. imagettftext($image, 24, 0, $formX, $formY, $black, $font, $certNo);
  50. // 捐赠金额
  51. $formY += $gap;
  52. imagettftext($image, 28, 0, $formX, $formY, $green, $semibold, $money);
  53. // 发放时间
  54. $formY += $gap;
  55. imagettftext($image, 24, 0, $formX, $formY, $black, $font, $date);
  56. // 输出图片
  57. $name = md5(strtotime('now') . random_int(100000, 999999)) . '.png';
  58. $dir = public_path() . "storage/";
  59. if (!file_exists($dir)) {
  60. mkdir($dir, 0777, true);
  61. }
  62. $path = $dir . $name;
  63. imagepng($image, $path);
  64. $url = self::get_domain() . dirname($_SERVER['SCRIPT_NAME']) . '/' . $name;
  65. $url = str_replace('\\', '/', $url);
  66. $url = str_replace('public', 'public/storage', $url);
  67. // 释放内存
  68. imagedestroy($image);
  69. return ['url' => $url];
  70. }
  71. /**
  72. * 获取当前网站的域名地址
  73. *
  74. * @return string 域名地址
  75. */
  76. protected static function get_domain()
  77. {
  78. $sys_protocal = isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443' ? 'https://' : 'http://';
  79. return $sys_protocal . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '');
  80. }
  81. }