利用 phpqrcode 生成二维码的函数

浏览:4288 发布日期:2015/04/30 分类:技术分享 关键字: php
/**
 * 生成二维码
 * @param unknown $string 内容
 * @param array $coifig 配置参数
 */
function build_QRcode($string, $config = array()){
    
    $basedir = dirname($_SERVER['SCRIPT_FILENAME']).'/';
    $url = 'public/images/QRcode/';
    $config += array(
        'filedir' => $basedir.$url,
        'webdir' => '/'.$url,
        'logo' => '',
        'filename'=> null,
        'level' => 'H',
        'size' => 5,
    );
    if (!file_exists($config['filedir'])) mkdir($config['filedir']);
    if(!empty($config['logo']) && !file_exists($config['logo'])){
        $config['logo'] = $basedir.$config['logo'];
        file_exists($config['logo']) || $config['logo'] = '';
    }
    //图片级别
    if(!in_array($config['level'], array('L','M','Q','H'))) $config['level'] = 'H';
    $config['size'] = min(max($config['size'], 1), 10);
    
    include_once('phpqrcode/qrlib.php');
    
    if($config['filename'] === null || !empty($config['logo'])){
        ob_start();
        QRcode::png($string, false, $config['level'], $config['size'], 2);
        $imgContent = ob_get_contents();
        ob_end_clean();
    }elseif($config['filename'] === ''){
        $config['filename'] =  $config['filedir'].md5($_REQUEST['data'].'|'.$config['level'].'|'.$config['size']).'.png';
        QRcode::png($string, $config['filename'], $config['level'], $config['size'], 2);
        $imgContent = file_get_contents($config['filename']);
    }
    //如果带有logo
    if(!empty($config['logo'])){
        $QR = imagecreatefromstring($imgContent);
        $logo = imagecreatefromstring(file_get_contents($config['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);
        imagepng($QR, $config['filename']);
    }
    if(!empty($config['filename'])) return $config['webdir'].basename($config['filename']);
    
}
中间带logo都是后期处理的,这个是我不带满意的,不过又没有办法..
最佳答案
评论( 相关
后面还有条评论,点击查看>>