개발 꿀팁/PHP

php가 QR코드를 생성하여 앞 페이지로 돌아가기

Jammie 2022. 7. 20. 15:05
반응형

1. 배경
백그라운드에서 클릭하면 QR코드가 생성되고 이 QR코드는 서버에 업로드되지 않는다.QR코드를 프런트 페이지로 돌려서 보여줘야 합니다.

2.실현과정
1,QR코드 생성

여기엔 qrcode라는 제3자를 사용하고 있다.인터넷 바이두, 커리큘럼이 산더미처럼 쌓여 있으니 여기선 자세히 말하지 않겠다.여기서는 tp3.2.3 프레임을 사용한다

//제삼자를 끌어들이다
 Vendor('phpqrcode.phpqrcode');
    $errorCorrectionLevel =intval($level) ;//오류 허용 등급
    $matrixPointSize = intval($size);//그림 크기 생성
//인스턴스화 qrcode 방법
    $object = new \QRcode();
    //QR 코드를 생성합니다. 두 번째 인자는 false입니다. 경로를 저장하지 않습니다
    $object->png($url, false, $errorCorrectionLevel, $matrixPointSize, 2);

2. QR코드 경로를 앞쪽으로 돌려준다.

여기엔 명확성이 필요해, png() 방법은 이진 이미지 스트림을 반환합니다.그러니 그냥 돌아가도 소용없다.반환값을 출력하면 null이라는 것을 알 수 있습니다.그래서 여기서는 ob_start()를 이용하여 버퍼를 이용하여 일련의 동작을 수행한다.

$object = new \QRcode();
    //버퍼 열기
    ob_start();
    $object->png($url, false, $errorCorrectionLevel, $matrixPointSize, 2);
    //여기서 생성된 이미지 스트림을 버퍼에서 메모리 오브젝트에 저장하고 base64_encode를 사용하여 인코딩 문자열로 변환하여 json을 통해 페이지로 반환한다。
    $imageString = base64_encode(ob_get_contents());
    //버퍼 닫기
    ob_end_clean();
    //생성된 base64 문자열을 선두로 되돌리기
    $data = array(
      'code'=>200,
      'data'=>$imageString
    );
    $this->ajaxReturn($data);

우리는 여기에서 문자열을 앞쪽으로 돌려준다.

3, 프런트 엔드 처리 문자열, 표시QR코드

  success: function(r) {
        if (r.code==200) {
          //console.log(r);
          var path = 'data:image/png;base64,'+r.data;
          //img의 sec에 값을 매기다。

          $("#qrcode").attr('src',path);
        } else {
          alert(r.err);
        }

1) 이상이 ajax의 success 방법이다.성공적으로 돌아왔을 때, 우리는 img의 src에 값을 할당해야 한다.
2) 그러나 base64 문자열이기 때문에 이 문자열을 해석해야 한다.여기는 img의 src 부입니다값:

<img src="data:image/png;base64,여기 base64 인코딩 내용입니다" />
//즉, 우리 위에 코드를 올린 것이다
'data:image/png;base64,'+r.data;
//r.data는 반환되는 문자열입니다

4. 브라우저에 QR코드 표시

아약스 요청은 버튼 클릭 시 사진처럼 진행된다.요청이 완료되면 img의 src 속성에 값을 부여한다.QR코드 이미지를 성공적으로 표시했습니다

반응형