PHP合成图片

1086 2024年01月19日 后端

/**
     * 生成带二维码海报
     * @param code 用户门票唯一标识
     */
    public static function createPoster($code)
    {
        try{
            $qrcode  = self::createQrcode($code);
            $qrcodeUrl = app()->getRootPath().'data/runtime/temp/'.uniqid().'.png';  
            file_put_contents($qrcodeUrl, file_get_contents($qrcode));  
    
    
            $bg_url = app()->getRootPath() . 'public/static/images/bg.jpg';
    
            // 创建第一张图片的资源  
            $backgroundImage  = imagecreatefromjpeg($bg_url);   //w279 h1108
            
            // 创建第二张图片的资源  
            $qrCodeImage  = imagecreatefromjpeg($qrcodeUrl);  
            
            // 获取海报背景的宽度和高度  
            $backgroundWidth = imagesx($backgroundImage);  
            $backgroundHeight = imagesy($backgroundImage);  
            
            // 获取二维码的宽度和高度  
            $qrCodeWidth = 180;  
            $qrCodeHeight = 180;  
            
            // 计算二维码的位置,使其靠页脚放置  
            $qrCodeX = ($backgroundWidth - $qrCodeWidth) / 2; // 根据需要调整位置  
            $qrCodeY = ($backgroundHeight - $qrCodeHeight) - 146; // 根据需要调整位置  
    
    
            // 创建缩放后的二维码图像资源  
            $scaleFactor = 180 / imagesy($qrCodeImage);
            // 计算缩放后的二维码尺寸  
            $scaledWidth = imagesx($qrCodeImage) * $scaleFactor;  
            $scaledHeight = imagesy($qrCodeImage) * $scaleFactor;  
    
            $scaledQRCodeImage = imagecreatetruecolor($scaledWidth, $scaledHeight);  
            imagecopyresampled(  
                $scaledQRCodeImage, // 目标图像资源  
                $qrCodeImage, // 源图像文件路径  
                0, // 目标图像的 x 坐标  
                0, // 目标图像的 y 坐标  
                0, // 源图像的 x 坐标  
                0, // 源图像的 y 坐标  
                $scaledWidth, // 目标图像的宽度  
                $scaledHeight, // 目标图像的高度  
                imagesx($qrCodeImage), // 源图像的宽度  
                imagesy($qrCodeImage) // 源图像的高度  
            );  
    
            
            // 将二维码复制到海报背景上  
            imagecopy($backgroundImage, $scaledQRCodeImage, $qrCodeX, $qrCodeY, 0, 0, $scaledWidth, $scaledHeight);  
            
            // 输出合成后的海报图像  
            $outputImagePath = app()->getRootPath().'data/runtime/temp/'.uniqid().'.jpg'; // 输出图像的保存路径  
            imagejpeg($backgroundImage, $outputImagePath); 

            //直接浏览器输出图片
            // header('Content-Type: image/png');  
            //imagepng($backgroundImage); 
            
            // 释放资源  
            imagedestroy($backgroundImage);  
            imagedestroy($qrCodeImage);   
    
            return $outputImagePath;
        }catch(\Exception $e){
            Log::channel('wx')->info($e->getMessage());
            return '';
        }
        
    }

php使用GD库完成海报上添加二维码

评论

0 条评论
OBJUI公众号
热门文章
  • 使用Echarts画甘特图

    Echarts是一个非常强大的图表库, 下面我们来使用它来画甘特图,

  • go语言怎么连接mysql,并实现增删改查

    要使用Go语言连接MySQL,需要使用第三方库。常用的库包括: 这里以go-sql-driver/mysql为 […]

  • beego实现模块化开发

    Beego 框架可以通过模块化开发来提高项目的可维护性和可扩展性,可以将一个大型的应用划分为多个模块,每个模块独立维护,有自己的控制器、视图和模型等。

  • Beego实现JWT

    Beego是一个基于Go语言的Web框架,实现JWT认证可以通过beego的中间件机制来实现,下面是一个简单的 […]

  • 使用Axios+PHP+JWT实现登录认证

    JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。

  • PHP解决雪花算法ID在前端精度丢失的问题

    雪花算法(Snowflake)是一种用于生成全局唯一ID的算法,其基本思路是结合时间戳、机器ID、租约ID和序列号生成一个64位的数据,从而保证ID的唯一性。 雪花算法的生成过程如下:

  • 虚拟滚动实现页面百万数据滚动

    1.概念 虚拟滚动是一种优化长列表性能的技术,它通过按需渲染的方式,只渲染可见部分的列表项,而不是渲染整个列表 […]

  • go实现MD5

    在这个示例中,我们使用了Go标准库中的crypto/md5包来计算一个字符串的MD5值。首先,我们将字符串转换 […]

  • Linux服务器Rsync结合inotify同步文件

    一、实现效果 服务器A:192.168.161.150 (分布服务器)(rsync客户端+inotify) 服务器B:192.168.161.151 (WEB服务器1)(rsync服务端) 服务器C:192.168.161.152 (WEB服务器2)(rsync服务端) 说明:服务器A有文件更新,自动同步到服务器B和C

  • JavaScript实现滑动验证码

    滑动验证码(也叫做滑动拼图验证码)是一种用户交互形式的验证码,通常用于网页或移动应用的登录、注册或敏感操作。其 […]