개발 꿀팁/PHP

phpqrcode를 사용하여 QR코드 생성

Jammie 2022. 7. 2. 16:50
반응형

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코드를 브라우저에 출력합니다.

반응형