QR코드란 문자열로 된 정보가 저장된 코드인데 보통 2차원 데이터 코드라고 한다. 이건 수학에 좀더 관심있는 사람이라면 쉽게 이해할 수 있겠지만 그런걸 깊게 파고 싶다면 역사부터 시작해야하니 본 포스팅에서는 넘어가고 QR코드는 정사각형으로된 정보코드로 이해하고 넘어가자. (솔직히 나도 설명하기 힘듬)
참고로 QR코드와 비슷한 바코드가 있는데 바코드는 1차원의 형태로 주로 마트에서 계산할때 스캐너로 찍는 부분이 바코드이다. 하지만 바코드는 많은 데이터를 담을 수도 없고 여러 형태의 문자열도 담을 수 없다는 단점이 있다.
따라서 바코드는 활용도가 굉장히 짧은 반면 QR코드는 숫자뿐만 아니라 여러문자열에 대한 데이터도 담을 수 있기에 활용도가 좋다. 물론 그렇다해서 바코드가 QR코드로 대체가 되느냐 인데 제품번호만 필요한곳에 굳이 QR코드로 대체할 필요는 없다고 본다.
본론으로 들어가서 QR코드를 생성하는 API는 많이 있다. 하지만 늘 그렇듯 개발자에겐 무료가 필요하기 마련인데 정말 고맙게도 무료로 제공해주는 QR코드 API가 있다. 해당 사이트의 링크는 아래와 같다.
<img src="http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&size=150x150">
| 결과
상단의 코드를 넣으면 그대로 QR코드가 생성될 것이다. 최초 생성시에는 느리지만 다음번 새로고침시에는 캐시가 되어 빠르게 생성이 된다.
사실 QR코드는 담을 데이터가 많을 경우 더 촘촘해 지고, 생성된 QR코드 이미지의 화질이 떨어질 경우 QR코드가 잘 안찍힐 수 있는 단점이 있다. 그 예제는 아래와 같다.
<img src="http://api.qrserver.com/v1/create-qr-code/?data=QR코드는이렇게 데이터를 생성할 수 있습니다. 하지만 데이터가 길어질 경우에는 QR코드가 더욱더 촘촘하게 생성이 됩니다.&size=150x150">
| 결과
따라서 QR코드에 담을 데이터는 최소한의 데이터로 구성하는게 좋기에 주로 긴 URL데이터의 경우 짧은 URL로 변환하여 사용한다. 그럼 이제 QR 코드 옵션에 대해 조금더 상세히 알아보도록 하자.
옵션 | 설명 |
data |
QR코드로 생성될 데이터를 지정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다. |
size |
QR코드로 생성되는 이미지의 사이즈를 지정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&size=150x150 |
charset-source |
전달된 data 파라미터 값의 언어셋을 지정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&charset-source=UTF-8 |
charset-target |
전달된 data 파라미터 값이 최종 저장될 언어셋을 지정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&charset-target=UTF-8 |
ecc |
전달된 데이터의 중복 정정 코드를 지정, 높을 수록 수정 가능한 데이터가 많아짐
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&ecc=L |
color |
QR코드 데이터의 색상을 지정 (QR코드 이미지 색상)
예제1) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&color=0-0-255 예제2) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&color=0FF 예제3) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&color=0000FF |
bgcolor |
QR코드의 바탕색을 지정
예제1) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&bgcolor=0-0-255 예제2) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&bgcolor=0FF 예제3) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&bgcolor=0000FF |
margin |
QR코드의 마진을 설정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&margin=10 |
qzone |
QR코드의 마진을 설정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&qzone=4 |
format |
QR코드 이미지 포맷형태 지정
예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&format=png |
이와 같이 QR Code API의 파라미터 옵션은 다양하게 제공되고 있으니 잘 활용하길 바라며 마지막으로 생성된 이미지를 PHP를 통해 저장하는 방법에 대해 알아보도록 하자.
<?php
$apiBaseUrl = 'http://api.qrserver.com/v1/create-qr-code/';
// 옵션들을 지정 (참고: https://blog.redinfo.co.kr/post/edit?pid=228)
$apiData = array(
'data'=>'https://www.redinfo.co.kr', // QR코드로 생성될 문자열
'size'=>'150x150', // 사이즈
'format'=>'png', // 포맷형태 (png,gif,jpeg,jpg,svg,eps 중 입력)
);
$apiUrl = $apiBaseUrl."?".http_build_query($apiData);
$getFile = file_get_contents($apiUrl);
$contentType = '';
switch ($apiData['format']) {
case 'png': $contentType = 'image/png'; break;
case 'jpg': $contentType = 'image/jpeg'; break;
case 'jpeg': $contentType = 'image/jpeg'; break;
case 'gif': $contentType = 'image/gif'; break;
case 'svg': $contentType = 'image/svg+xml'; break;
case 'eps': $contentType = 'application/postscript'; break; // 테스트 안해봄..아니 못해봄
}
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // 과거 아무 때나 잡으면 됨.
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Content-Type: ".$contentType);
header("Content-Disposition:attachment;filename=".md5(uniqid()).".".$apiData['format']);
header("Content-Transfer-Encoding:binary");
header("Content-Length:".strlen($getFile));
die($getFile);
위와 같이 PHP를 통해 QR Code API를 통해 생성된 이미지를 다운로드하는 방법에 대해 알아보았으며, 본 소스를 더 활용한다면 QR코드 생성해 주는 서비스를 제공해 줄 수 있을 것이다.