PHP 언어를 사용하여 QR 코드를 생성하는 것은 어려운 일입니다. 물론 QR 코드 이미지를 생성하는 인터페이스(예: http://www.liantu.com/의 인터페이스)를 호출하는 것을 제외하고, 직접 코드를 생성하면 정말 할 수 없습니다. 그러나, 우리는 phpqrcode라는 기성 클래스 파일을 사용할 수 있으며, PHP QR 코드를 사용하여 쉽게 QR 코드를 생성할 수 있습니다.
사전 준비:
1.phpqrcode 파일 다운로드, 다운로드 주소: https://sourceforge.net/projects/phpqrcode/
2.PHP 환경은 반드시 GD2 확장 라이브러리 지원(일반적으로 전원이 켜진 상태)
방법 해석:
다운로드된 클래스 파일은 압축된 패키지로 많은 파일과 데모 프로그램이 포함되어 있습니다. 이 파일에는 QR 코드를 생성할 수 있는 phpqrcode.php가 있습니다. 여러 클래스의 집합 파일입니다. 이 파일에는 QRcode 클래스(2963행째)의 png() 메서드(3090행째):
public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false)
{
$enc = QRencode::factory($level, $size, $margin);
return $enc->encodePNG($text, $outfile, $saveandprint=false);
}
첫 번째 매개 변수 $text: QR코드에 포함된 내용은 링크, 텍스트, json 문자열 등일 수 있습니다.
두 번째 파라미터 $outfile: 기본 false, 파일 생성 없이 QR코드 이미지만 출력합니다; 그렇지 않으면 생성된 QR코드의 이미지를 저장할 파일명과 경로를 지정해야 합니다.
세 번째 매개 변수 $level: 기본값은 L이며, 이 매개 변수가 전달할 수 있는 값은 각각 L(QR_ECLEVE)입니다.L_L, 7%), M(QR_ECLEVEL_M, 15%), Q(QR_ECLEVEL_Q, 25%), H(QR_ECLEVEL_H, 30%),이 파라미터는 QR코드의 오류 허용률을 제어하며, 다른 파라미터는 QR코드가 커버할 수 있는 영역의 백분율, 즉 커버할 수 있는 영역이 식별될 수 있음을 나타낸다.
4번째 파라미터 $size: 생성된 이미지의 크기를 제어하며 기본값은 4;
5번째 파라미터 $margin: QR코드를 생성하는 빈 영역의 크기를 제어한다.
6번째 파라미터 $save andprint: QR코드 이미지를 저장하여 표시, $outfile사진 경로를 전송해야 합니다.
사용 예:
1. QR코드 생성 (이미지 파일 생성)
// 1. 원본 QR코드 생성 (이미지 파일 생성)
function scerweima($url=''){
require_once 'phpqrcode.php';
$value = $url; //QR코드 내용
kyualkodeu naeyong
$errorCorrectionLevel = 'L'; //오류 허용 등급
$matrixPointSize = 5; //그림 크기 생성
//QR코드 이미지 생성
$filename = 'qrcode/'.microtime().'.png';
QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
$QR = $filename; //생성된 원본 QR코드 그림 파일
$QR = imagecreatefromstring(file_get_contents($QR));
//그림을 출력하다
imagepng($QR, 'qrcode.png');
imagedestroy($QR);
return '<img src="qrcode.png" alt="위챗스캔으로 결제하기">';
}
//결과 보기 호출
echo scerweima('https://www.baidu.com');
2. 생성된 QR코드에 로고 추가(이미지 파일 생성)
//2. 생성된 QR 코드에 플래그 추가(그림 파일 만들기)
function scerweima1($url=''){
require_once 'phpqrcode.php';
$value = $url; //QR코드 내용
$errorCorrectionLevel = 'H'; //오류 허용 등급
$matrixPointSize = 6; //그림 크기 생성
//QR코드 이미지 생성
$filename = 'qrcode/'.microtime().'.png';
QRcode::png($value,$filename , $errorCorrectionLevel, $matrixPointSize, 2);
$logo = 'qrcode/logo.jpg'; //준비된 로고 이미지
$QR = $filename; //생성된 원시 QR 그림
if (file_exists($logo)) {
$QR = imagecreatefromstring(file_get_contents($QR)); //대상 이미지 연결 리소스。
$logo = imagecreatefromstring(file_get_contents($logo)); //원본 이미지 연결 리소스。
$QR_width = imagesx($QR); //QR코드 폭
$QR_height = imagesy($QR); //QR코드 이미지 높이
$logo_width = imagesx($logo); //로고 이미지 너비
$logo_height = imagesy($logo); //로고 이미지 높이
$logo_qr_width = $QR_width / 4; //조합해서 로고 너비(QR코드의 1/5)
$scale = $logo_width/$logo_qr_width; //logo의 폭 스케일링 비율(자체 너비/조합 후 너비)
$logo_qr_height = $logo_height/$scale; //조합해서 로고 높이
$from_width = ($QR_width - $logo_qr_width) / 2; //조합 후 로고 왼쪽 상단 좌표
//그림 재구성 및 크기 조정
/*
* imagecopyresampled() 이미지(소스 이미지)의 정사각형 영역을 다른 이미지로 복사
*/
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,$logo_qr_height, $logo_width, $logo_height);
}
//그림을 출력하다
imagepng($QR, 'qrcode.png');
imagedestroy($QR);
imagedestroy($logo);
return '<img src="qrcode.png" alt="위챗스캔으로 결제하기">';
}
//결과 보기 호출
echo scerweima1('https://www.baidu.com');
3. QR코드 생성 (이미지 파일 생성 안 함)
//3. 원본 QR코드 생성 (이미지 파일 생성 안 함)
function scerweima2($url=''){
require_once 'phpqrcode.php';
$value = $url; //QR코드 내용
$errorCorrectionLevel = 'L'; //오류 허용 등급
$matrixPointSize = 5; //그림 크기 생성
//QR코드 이미지 생성
$QR = QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2);
}
//결과 보기 호출
scerweima2('https://www.baidu.com');
처음 두 가지 방법은 호출할 때마다 로컬에서 QR코드 이미지를 한장씩 생성하고, 세 번째 방법은 파일을 생성하지 않고 QR코드를 브라우저에 출력합니다.
'개발 꿀팁 > PHP' 카테고리의 다른 글
docker nginx+php 다양한 피트 설정 (0) | 2022.07.02 |
---|---|
PHP 정규 표현식 (0) | 2022.07.02 |
php로 헤더 정보 가져오기 (0) | 2022.07.02 |
apache는 php 파일을 구문 분석할 수 없습니다. php 소스를 표시하거나 파일을 직접 다운로드합니다. (0) | 2022.07.02 |
Centos7 컴파일 설치PHP7.2 (0) | 2022.07.02 |