• php生成海报和指定文字


       
    
    1. public function createPoster($parmas)
    2. {
    3. $content = mb_convert_encoding('这是一张海报', "html-entities", "utf-8");
    4. $config = array(
    5. 'text'=>array(
    6. array(
    7. 'text'=>$content,
    8. 'left'=>500,
    9. 'top'=>100,
    10. 'fontPath'=>'C:\Users\ahuyikao\Desktop\Alibaba-PuHuiTi-Medium.ttf', //字体文件
    11. 'fontSize'=>50, //字号
    12. 'fontColor'=>'14,14,14', //字体颜色
    13. 'angle'=>0,
    14. )
    15. ),
    16. 'image'=>array(
    17. array(
    18. 'url'=>'./z.png', //二维码资源
    19. 'stream'=>0,
    20. 'left'=>300,
    21. 'top'=>10,
    22. 'right'=>0,
    23. 'bottom'=>0,
    24. 'width'=>380,
    25. 'height'=>200,
    26. 'opacity'=>70
    27. )
    28. ),
    29. 'background'=>'https://ahuyikao-pub.cdn.bcebos.com/project/xcx/ahu_dossier/sculptureImg/tmp_31a6762f684d1d232c092f6dd3cdbb6f.jpg' //背景图
    30. );
    31. $filename = './'.time().'.jpg';
    32. //echo createPoster($config,$filename);
    33. echo $this->createPosters($config);
    34. }
    35. public function createPosters($config=array(),$filename=""){
    36. //如果要看报什么错,可以先注释调这个header
    37. if(empty($filename)) header("content-type: image/png");
    38. $imageDefault = array(
    39. 'left'=>0,
    40. 'top'=>0,
    41. 'right'=>0,
    42. 'bottom'=>0,
    43. 'width'=>100,
    44. 'height'=>100,
    45. 'opacity'=>100
    46. );
    47. $textDefault = array(
    48. 'text'=>'',
    49. 'left'=>0,
    50. 'top'=>0,
    51. 'fontSize'=>32, //字号
    52. 'fontColor'=>'255,255,255', //字体颜色
    53. 'angle'=>0,//文字角度 顺时针计算,0 度为水平(由左到右),90 度则为由下到上的文字;
    54. );
    55. $background = $config['background'];//海报最底层得背景
    56. //背景方法
    57. $backgroundInfo = getimagesize($background);
    58. $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
    59. $background = $backgroundFun($background);
    60. $backgroundWidth = imagesx($background); //背景宽度
    61. $backgroundHeight = imagesy($background); //背景高度
    62. $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
    63. $color = imagecolorallocate($imageRes, 0, 0, 0);
    64. imagefill($imageRes, 0, 0, $color);
    65. // imageColorTransparent($imageRes, $color); //颜色透明
    66. imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
    67. //处理了图片
    68. if(!empty($config['image'])){
    69. foreach ($config['image'] as $key => $val) {
    70. $val = array_merge($imageDefault,$val);
    71. $info = getimagesize($val['url']);
    72. $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
    73. $res = $function($val['url']);
    74. $resWidth = $info[0];
    75. $resHeight = $info[1];
    76. //建立画板 ,缩放图片至指定尺寸
    77. $canvas=imagecreatetruecolor($val['width'], $val['height']);
    78. imagefill($canvas, 0, 0, $color);
    79. //关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
    80. imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
    81. $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
    82. $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
    83. //放置图像
    84. imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
    85. }
    86. }
    87. //处理文字
    88. if(!empty($config['text'])){
    89. foreach ($config['text'] as $key => $val) {
    90. $val = array_merge($textDefault,$val);
    91. list($R,$G,$B) = explode(',', $val['fontColor']);
    92. $fontColor = imagecolorallocate($imageRes, $R, $G, $B);
    93. $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
    94. $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']):$val['top'];
    95. imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
    96. }
    97. }
    98. //生成图片
    99. if(!empty($filename)){
    100. $res = imagejpeg ($imageRes,$filename,90); //保存到本地
    101. imagedestroy($imageRes);
    102. if(!$res) return false;
    103. return $filename;
    104. }else{
    105. imagejpeg ($imageRes); //在浏览器上显示
    106. imagedestroy($imageRes);
    107. }
    108. }

    效果图如下

    一定要注意字体路径,字体路径不对的话,文字一直写不上去。

  • 相关阅读:
    STM32F4X UCOSIII软件定时器
    Docker Desktop更改镜像存储位置
    Java学习之继承二细节(学习重点)
    源码 编译 安装 openssl libssl-dev
    数据结构——C++实现二叉搜索树,前中后序、层序迭代遍历配合仿函数
    leetcode:805. 数组的均值分割【meet in middle + 选or不选 + 折半搜索】
    答应我,在vue中不要滥用watch好吗?
    STL-list
    【精品】Springboot 接收发送日期类型的数据
    前端面试0906
  • 原文地址:https://blog.csdn.net/qq_25861247/article/details/133687695