PHP图片合成技术

PHP图片合成技术

使用场景:商品海报与用户二维码合成
话不多说直接上代码

该方法存在一种思维,以打开某一个图片在某一个图片上添加图片添加文字为准,文件流由低到高
/**
 * @param $data 二维码包含的文字内容
 * @param $filename 保存二维码输出的文件名称,*.png
 * @param bool $picPath 二维码输出的路径
 * @param bool $logo 二维码中包含的LOGO图片路径
 * @param string $bgColor 二维码背景色
 * @param string $color 二维码点颜色
 * @param int $size 二维码的大小
 * @param string $level 二维码编码纠错级别:L、M、Q、H
 * @param int $padding 二维码边框的间距
 * @param bool $saveandprint 是否保存到文件并在浏览器直接输出,true:同时保存和输出,false:只保存文件
 * @return string
 */
function myqrcode($data, $filename, $picPath = false, $logo = false, $bgColor='#ffffff', $color='#000000', $size = 15, $level = 'L', $padding = 2, $saveandprint = true) {
    vendor("phpqrcode.phpqrcode"); //引入工具包
    // 下面注释了把二维码图片保存到本地的代码,如果要保存图片,用$fileName替换第二个参数false
    $qrcode = new \QRcode();
    $path = $picPath ? $picPath : "./uploads/".date('Ymd'); //图片输出路径
    if (!file_exists($path)) {
        mkdir($path,0777,true);
    }
    $logo = !empty($logo) && file_exists($logo) ? $logo : false;
    //在二维码上面添加LOGO
    if (empty($logo) || $logo === false) { //不包含LOGO
        if ($filename == false) {
            $qrcode->png($data, $filename, $level, $size, $padding, $saveandprint, $bgColor, $color); //直接输出到浏览器,不含LOGO
        } else {
            $filename = $path . '/' . $filename; //合成路径
            $qrcode->png($data, $filename, $level, $size, $padding, $saveandprint, $bgColor, $color); //直接输出到浏览器,不含LOGO
        }
    } else { //包含LOGO
        if ($filename == false) {
            //$filename=tempnam('','').'.png';//生成临时文件
            die('参数错误');
        } else {
            //生成二维码,保存到文件
            $filename = $path . '/' . $filename; //合成路径
        }
        $qrcode->png($data, $filename, $level, $size, $padding, $saveandprint, $bgColor, $color);
        $QR = imagecreatefromstring(file_get_contents($filename));
        $logo = imagecreatefromstring(file_get_contents($logo));
        $QR_width = imagesx($QR);
        $QR_height = imagesy($QR);
        $logo_width = imagesx($logo);
        $logo_height = imagesy($logo);
        $logo_qr_width = $QR_width / 5;
        $scale = $logo_width / $logo_qr_width;
        $logo_qr_height = $logo_height / $scale;
        $from_width = ($QR_width - $logo_qr_width) / 2;
        imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
        if ($filename === false) {
            Header("Content-type: image/png");
            imagepng($QR);
        } else {
            if ($saveandprint === true) {
                imagepng($QR, $filename);
                //header("Content-type: image/png"); //输出到浏览器
                //imagepng($QR);
            } else {
                imagepng($QR, $filename);
            }
        }
    }

    return $filename;
}


/**
 * 将图片裁剪为圆形的图片
 * @param string 图片的Url地址  	$url
 * @param string 保存的新的url地址  	$path
 */
function circularImg($url, $path){
    $w = 270;  $h=270; // original size
    $original_path= $url;
    $src = imagecreatefromstring(file_get_contents($original_path));
    $newpic = imagecreatetruecolor($w,$h);
    imagealphablending($newpic,false);
    $transparent = imagecolorallocatealpha($newpic, 0, 0, 0, 127);
    $r=$w/2;
    for($x=0;$x<$w;$x++)
        for($y=0;$y<$h;$y++){
            $c = imagecolorat($src,$x,$y);
            $_x = $x - $w/2;
            $_y = $y - $h/2;
            if((($_x*$_x) + ($_y*$_y)) < ($r*$r)){
                imagesetpixel($newpic,$x,$y,$c);
            }else{
                imagesetpixel($newpic,$x,$y,$transparent);
            }
        }
    imagesavealpha($newpic, true);
    imagepng($newpic, $path);
    imagedestroy($newpic);
    imagedestroy($src);
    // unlink($url);
    return $path;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙奋斗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值