반응형
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코드 이미지를 성공적으로 표시했습니다
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
php 대배열 순환 중첩의 성능 최적화 (0) | 2022.07.20 |
---|---|
php 정적 페이지 생성 및 미리 보기 (0) | 2022.07.20 |
PHP 환경 구축-Windows 시스템에서의 PHP 환경 구축 (0) | 2022.07.20 |
운영유선항목경험예(참고) (0) | 2022.07.20 |
PHP에서 gRPC 클라이언트 사용 (0) | 2022.07.20 |