分享一下利用phpqrcode二維碼生成類庫和imagecopymerge函數制拼合(鑲嵌、合併、水印)圖片經驗

利用 phpqrcode 二維碼生成類庫和 imagecopymerge 函數製做帶二維碼的圖片

首先引用phpqrcode類庫php

  • 下載phpqrcode類庫函數

    下載地址就不提供了,百度一搜一大把;
  • 新建php文件用於建立二維碼url

    請注意看(每段中文後面都會有必定的代碼示例)
    好比:新建文件 qrcode.php
    以後在文件中引入phpqrcode類庫 代碼演示 
    include('../phpqrcode/phpqrcode.php'); 
    然後就到了設置二維碼的連接地址了
    $url = 'http://www.baidu.com';
    接着設置二維碼的容錯級別,何爲容錯級別?通俗點就是容錯級別百分比越高,就越容易識別,下面是三種容錯級別:
    L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%);
    按照效果排序依次是  H -> Q -> M -> L
    因此,就直接用 H 代碼示例:
    $errorCorrectionLevel = 'H';//容錯級別 
    然後繼續設置生成二維碼圖片的大小
    $matrixPointSize = 7;//圖片大小慢慢本身調整,只要是int就行
    設置生成二維碼的圖片名稱,博主用了5爲隨機數+時間戳生成文件名,爲了防止文件名重複相互覆蓋。。
    QR = rand(10000,99999).time().".png";
    最後就到了生成二維碼啦!
    直接調用ORcode::png()就行,帶上剛纔設置好的參數。最後的這個參數*2*是表明白邊的寬度。
    QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2);
  • 若是你想在二維碼中間放個LOGO那麼你就繼續看!code

    首先,引用一張圖片(you company LOGO)
    $logo = './images/logo.png';
    然後爲了程序的完整性,簡單的判斷一下。也許某些童鞋不要LOGO的,注意看下面的代碼,博主註釋的都比較清楚的。
    if ($logo !== FALSE) { 
    $QR = imagecreatefromstring(file_get_contents($QR)); 
    $logo = imagecreatefromstring(file_get_contents($logo)); 
    $QR_width = imagesx($QR);//二維碼圖片寬度 
    $QR_height = imagesy($QR);//二維碼圖片高度 
    $logo_width = imagesx($logo);//logo圖片寬度 
    $logo_height = imagesy($logo);//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); 
        }
  • 最後直接輸出圖像便可排序

    仍是老樣子,咱們給圖片來個名字;此次用6爲隨機數+時間戳
    $QRM = rand(100000,999999).time().".png";
    imagepng($QR, $QIMG);
    然後輸出圖像 echo '<img src="'.$QIMG.'">';
  • 整個帶logo的二維碼生成就完成了。若是還要拼合在其餘圖像上就繼續接着看!(文章結尾有整個項目的代碼,記得點贊!)圖片

imagecopymerge函數制拼合(鑲嵌,合併)圖片 一樣適合水印之類的get

  • 首先仍是設置圖片,底圖和上面的覆蓋圖string

    $dst_path = 'a.png';//底圖
    $src_path = $QIMG;//覆蓋圖,咱們就繼續用上面的那張圖QIMG
  • 建立圖片的實例it

    $dst = imagecreatefromstring(file_get_contents($dst_path));
    $src = imagecreatefromstring(file_get_contents($src_path));
  • 獲取覆蓋圖片的寬高io

    list($src_w, $src_h) = getimagesize($src_path);
  • 將圖片複製到目標圖片(底圖)上,最後個參數是設置透明度(50爲半透明,100爲不透明,本身隨意設置便可),這裏實現不透明效果,兩個20是控制圖片座標位置,本身慢慢調整

    imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
  • 若是水印圖片自己帶透明色,則使用imagecopy方法

    imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);//博主的不是透明的,因此不用這段~用下面的
  • 生成圖片

    list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
  • 然後用switch判斷一下圖片的類型

switch ($dst_type) {
        case 1://GIF
            header('Content-Type: image/gif');
            imagegif($dst);
            break;
        case 2://JPG
            header('Content-Type: image/jpeg');
            imagejpeg($dst);
            break;
        case 3://PNG
            header('Content-Type: image/png');
            imagepng($dst);
            break;
        default:
            break;
    }
  • 最後將圖片打印出來

    imagedestroy($dst);
    imagedestroy($src);

整個程序的完整代碼,伸手黨們!記得點贊打賞收藏等等等等!

include('../phpqrcode/phpqrcode.php'); 
$url = 'http://www.baidu.com'; //二維碼內容
$errorCorrectionLevel = 'H';//容錯級別 
$matrixPointSize = 7;//生成圖片大小 
//生成二維碼圖片 
$QR = rand(10000,99999).time().".png";
QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2); 
$logo = '../images/logo.png';//準備好的logo圖片
//生成時間戳處理覆蓋圖片防止權限的存在
// $op = time();
// $QR = 'qrcode.png';//已經生成的原始二維碼圖 
if ($logo !== FALSE) { 
    $QR = imagecreatefromstring(file_get_contents($QR)); 
    $logo = imagecreatefromstring(file_get_contents($logo)); 
    $QR_width = imagesx($QR);//二維碼圖片寬度 
    $QR_height = imagesy($QR);//二維碼圖片高度 
    $logo_width = imagesx($logo);//logo圖片寬度 
    $logo_height = imagesy($logo);//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); 
} 
//輸出圖片 
$QIMG = rand(100000,999999).time().".png";
imagepng($QR, $QIMG); 

$dst_path = 'a.png';//底圖
$src_path = $QIMG;//覆蓋圖

//建立圖片的實例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//獲取覆蓋圖圖片的寬高
list($src_w, $src_h) = getimagesize($src_path);
//將覆蓋圖複製到目標圖片上,最後個參數100是設置透明度(100是不透明),這裏實現不透明效果,兩個20是覆蓋圖座標位置
imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
//若是覆蓋圖圖片自己帶透明色,則使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//輸出圖片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {
    case 1://GIF
        header('Content-Type: image/gif');
        imagegif($dst);
        break;
    case 2://JPG
        header('Content-Type: image/jpeg');
        imagejpeg($dst);
        break;
    case 3://PNG
          header('Content-Type: image/png');
        imagepng($dst);
        break;
    default:
        break;
    }
imagedestroy($dst);
imagedestroy($src);
源代碼理解不了的,請看上面的文章,我都寫的比較清楚,代碼裏面也註釋了~遇到問題解決不了請百度,實在不行就留言給博主,博主會第一時間回覆你!

大功告成,博主要看巴薩打拉斯帕爾馬斯了!希望我梅老闆能再繼續進逆天任意球!

okey bye see you!

相關文章
相關標籤/搜索