QR코드란 문자열로 된 정보가 저장된 코드인데 보통 2차원 데이터 코드라고 한다. 이건 수학에 좀더 관심있는 사람이라면 쉽게 이해할 수 있겠지만 그런걸 깊게 파고 싶다면 역사부터 시작해야하니 본 포스팅에서는 넘어가고 QR코드는 정사각형으로된 정보코드로 이해하고 넘어가자. (솔직히 나도 설명하기 힘듬)

 

참고로 QR코드와 비슷한 바코드가 있는데 바코드는 1차원의 형태로 주로 마트에서 계산할때 스캐너로 찍는 부분이 바코드이다. 하지만 바코드는 많은 데이터를 담을 수도 없고 여러 형태의 문자열도 담을 수 없다는 단점이 있다.

 

따라서 바코드는 활용도가 굉장히 짧은 반면 QR코드는 숫자뿐만 아니라 여러문자열에 대한 데이터도 담을 수 있기에 활용도가 좋다.  물론 그렇다해서 바코드가 QR코드로 대체가 되느냐 인데 제품번호만 필요한곳에 굳이 QR코드로 대체할 필요는 없다고 본다. 

 

본론으로 들어가서 QR코드를 생성하는 API는 많이 있다. 하지만 늘 그렇듯 개발자에겐 무료가 필요하기 마련인데 정말 고맙게도 무료로 제공해주는 QR코드 API가 있다. 해당 사이트의 링크는 아래와 같다. 

 

QR Code API 사이트 

 

QR코드 간단 사용 예제
<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 코드 옵션에 대해 조금더 상세히 알아보도록 하자. 

 

QR Code API 옵션 
옵션 설명

data

QR코드로 생성될 데이터를 지정 

 

  • 최소 문자 수
    • 1 이상
  • 최대 문자 수
    • 900자 미만
  • 권장사항
    • 짧을 수록 좋음. 예를 들어 URL이 길경우 짧은 URL로 변환하여 저장하면 효율이 좋음 

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.

size

QR코드로 생성되는 이미지의 사이즈를 지정 

 

  • 포맷형태
    • {숫자}x{숫자}
  • 최소값
    • 10x10
  • 최대값
    • 1000x1000 (format png,gif,jpeg,jpg 인경우)
    • 1000000x1000000 (fotmat: svg,eps인 경우 )
  • 유효성
    • 사이즈는 정사각형 사이트를 유지해야함 
    • 40x60 은 오류 
    • 50x50 은 정상
    • 사이즈 지정이 없거나 유효성에 어긋날 시 200x200 으로 자동 지정 

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&size=150x150

charset-source

전달된 data 파라미터 값의 언어셋을 지정

 

  • 유효한 값 (대문자만 허용)
    • ISO-8859-1
    • UTF-8
  • 잘못된 값 
    • utf-8 은 소문자로 허용이 안됨 
    • EUC-KR 은 유효한 값이 아님 
  • 기본값
    • UTF-8

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&charset-source=UTF-8

charset-target

전달된 data 파라미터 값이 최종 저장될 언어셋을 지정 

 

  • 유효한 값 (대문자만 허용)
    • ISO-8859-1
    • UTF-8
  • 잘못된 값 
    • utf-8 은 소문자로 허용이 안됨 
    • EUC-KR 은 유효한 값이 아님 
  • 기본값
    • UTF-8

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&charset-target=UTF-8

ecc

전달된 데이터의 중복 정정 코드를 지정, 높을 수록 수정 가능한 데이터가 많아짐

 

  • 설정 가능한 값 
    • L (낮음, 약 7% 손상된 데이터를 복구할 수 있음)
    • M (중간, 약 15% 손상된 데이터를 복구할 수 있음)
    • Q (고품질, 약 25% 손상된 데이터를 복구할 수 있음)
    • H (높음, 약 30% 손상된 데이터를 복구할 수 있음)
  • 기본값
    • L
  • 권장사항
    • 권장사항은 기본 L(낮음) 이며 H(높음)로 지정할 경우 더 높은 픽셀을 가지므로 용량도 커지고 속도도 느려지게 됩니다. 

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&ecc=L

color

QR코드 데이터의 색상을 지정 (QR코드 이미지 색상)

 

  • 유효성
    • 10진수 RGB 색상 (예: 흰색은 255-0-0)
    • 16진수 [a-fA-F] 3글자 (예: 흰색은 fff)
    • 16진수 [a-fA-F] 6자 (예: 흰색은 ffffff)
  • 잘못된 예
    • 300-100-0 (300은 RGB 표현 범위 초과 
    • GG00AA (`G` 는 유효하지 않음)
    • f029 (4글자는 유효하지 않음)
    • 255-100 (RGB 유효성에 어긋남)
  • 기본값
    • 0-0-0

예제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코드의 바탕색을 지정

 

  • 유효성
    • 10진수 RGB 색상 (예: 흰색은 255-0-0)
    • 16진수 [a-fA-F] 3글자 (예: 흰색은 fff)
    • 16진수 [a-fA-F] 6자 (예: 흰색은 ffffff)
  • 잘못된 예
    • 300-100-0 (300은 RGB 표현 범위 초과 
    • GG00AA (`G` 는 유효하지 않음)
    • f029 (4글자는 유효하지 않음)
    • 255-100 (RGB 유효성에 어긋남)
  • 기본값: 0-0-0

예제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코드의 마진을 설정

 

  • 상세설명
    • 픽셀로 그려지는 테두리의 두께. 테두리는 배경색을 따르며(bgc로 설정 가능), size로 지정된 전체 크기에 더해지지 않으며 따라서 size 지정값의 약 1/3을 초과해서는 안됨. 또한 qzone 값이 있는 경우에도 추가로 그려지게 됨. margin 매개변수는 QR 코드 형식이 svg 또는 eps로 설정된 경우(즉, QR 코드가 벡터 그래픽으로 출력되는 경우)에는 무시.
  • 형식
    • 숫자 
  • 최소값
    • 0 (테두리없음)
  • 최대값
    • 50
  • 잘못된 예
    • -1 (최소값 미만)
    • 60 (최대값 이상)
    • a (숫자가 아님)
  • 기본값
    • 1

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&margin=10

qzone

QR코드의 마진을 설정

 

  • 상세설명
    • 그려지는 테두리의 두께(='quiet zone', QR 코드를 찾기 쉽게하기 위한 무장한 영역)를 데이터 요소의 단위, 이는 예를 들어 값이 1이면 QR 코드 주위에 데이터 픽셀/요소와 동일한 너비의 테두리가 그려지게 됨. 테두리는 배경색을 따르며(bgc로 설정 가능), size로 지정된 전체 크기에 더해지지 않음, 또한 margin 값이 있는 경우에도 추가로 그려지게됨
  • 형식
    • 숫자 
  • 최소값
    • 0 (없음)
  • 최대값
    • 100
  • 잘못된 예
    • -1 (최소값 미만)
    • 110 (최대값 이상)
    • a (숫자가 아님)
  • 기본값
    • 0
  • 권장값 
    • 4

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&qzone=4

format

QR코드 이미지 포맷형태 지정

 

  • 가능한 포맷
    • png,gif,jpeg,jpg,svg,eps
  • 기본값
    • png
  • 권장 (웹사이트용)
    • png 또는 gif 가 권장이며 용량이 비교적 작음
  • 권장 (인쇄용) 
    • svg 또는 eps 가 권장이며 용량이 png 또는 gif에 비해 큼

예제) http://api.qrserver.com/v1/create-qr-code/?data=QR코드입니다.&format=png

 

이와 같이 QR Code API의 파라미터 옵션은 다양하게 제공되고 있으니 잘 활용하길 바라며 마지막으로 생성된 이미지를 PHP를 통해 저장하는 방법에 대해 알아보도록 하자.

 

API로 생성된 QR코드 이미지를 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코드 생성해 주는 서비스를 제공해 줄 수 있을 것이다.