QR 코드 해독
QR 코드 이미지를 온라인으로 스캔하고 디코딩합니다. 드래그 앤 드롭, 클립보드 붙여넣기 지원. 모든 처리가 브라우저에서 이루어집니다.
QR 코드 이미지를 여기에 드래그 앤 드롭하세요
PNG, JPG, GIF, BMP, WebP 및 기타 일반적인 이미지 형식 지원
Ctrl+V로 클립보드에서 이미지를 붙여넣을 수도 있습니다
QR 코드 디코딩이란?
QR 코드 디코딩은 QR 코드 이미지에 저장된 정보를 읽고 추출하는 과정입니다. QR 코드가 포함된 이미지를 업로드하면 도구가 자동으로 텍스트, URL 또는 기타 데이터를 인식하고 디코딩합니다. 이 도구는 브라우저에서 완전히 실행되며, 이미지가 서버에 업로드되지 않습니다. 여러 사람이 함께 사용할 때는 입력, 전제, 기대 결과를 미리 맞춰 결과가 잘못 해석되지 않도록 해야 합니다.
사용 방법
사용 방법
- 업로드 영역을 클릭하여 QR 코드 이미지를 선택하거나, 이미지를 드래그 앤 드롭하세요
- Ctrl+V (Mac에서는 Cmd+V)를 사용하여 클립보드에서 이미지를 붙여넣을 수도 있습니다
- 도구가 QR 코드 내용을 자동으로 감지하고 디코딩합니다
- 디코딩된 결과는 자동 콘텐츠 유형 감지 (URL 또는 텍스트)와 함께 아래에 표시됩니다
- '결과 복사' 버튼을 클릭하여 디코딩된 내용을 클립보드에 복사하세요
디코딩 팁
- 안정적인 감지를 위해 QR 코드 전체가 보이고 주변에 충분한 여백이 있는 선명한 이미지를 사용하세요.
- 디코딩된 링크는 주의해서 다루세요. 익숙하지 않은 QR 코드 URL을 열기 전에 텍스트를 미리 보고 도메인을 확인하세요.
활용 사례
기술 원리
QR 코드 디코딩은 사진이나 스크린샷에서 코드를 찾고, 원근 왜곡을 보정하고, 이미지를 흑백으로 이진화하고, 모듈 격자를 읽고, 오류 정정을 적용하고, 인코딩 모드에 따라 데이터를 디코딩하는 다단계 이미지 처리 파이프라인이다. 이 도구는 브라우저의 메인 스레드에서 JavaScript로 전체 파이프라인을 구현하는 jsQR 라이브러리를 사용한다. 첫 번째 단계는 세 가지 파인더 패턴을 찾는 것이다. 파인더 패턴은 모든 QR 코드의 좌상단, 우상단, 좌하단 모퉁이에 있는 독특한 7x7 정사각-in-정사각-in-정사각 마커이다. jsQR은 회전에 관계없이 파인더 패턴 단면의 특징인 1:1:3:1:1 비율에 맞는 흑백 픽셀 교대 실행을 이미지에서 스캔한다. 세 개의 파인더가 위치하면 그 무게중심이 코드의 경계 사각형을 정의한다. 원근 보정은 네 모서리 점에서 계산된 호모그래피 매트릭스를 사용하여 사각형을 정사각 격자로 변환한다. 이는 필수적이다. QR 코드는 정면에서 촬영되는 경우가 드물기 때문이다. 보정은 코드를 왜곡 복원하여 각 모듈(비트를 나타내는 검은색 또는 흰색 정사각형)이 정규 격자에 놓이도록 한다. 모듈 크기는 파인더 패턴 크기와 파인더 인접 형식 정보 스트립에서 읽은 버전 번호에 의해 결정된다. 이미지 이진화는 그레이스케일 픽셀 값을 순수 흑백으로 변환한다. jsQR은 로컬 임계값 방식을 사용한다. 단일 전역 임계값(불균일한 조명이나 그림자에서 실패) 대신 이미지의 작은 영역에 대해 임계값을 계산하여, 스마트폰 사진에서 흔한 그라디언트와 비네팅에 강건하다. 오류 정정은 ISO/IEC 18004:2015에 지정된 리드-솔로몬 코드를 사용한다. QR 코드는 4가지 오류 정정 레벨을 지원한다: L(~7% 복구), M(~15%), Q(~25%), H(~30%). 데이터 코드워드와 오류 정정 코드워드는 블록으로 인터리브된다. jsQR은 신드롬 계산을 수행하고 벨캠프-매시 알고리즘을 적용하여 코드의 정격 용량 내에서 오류 위치를 찾고 정정한다. 손상이 정정 레벨을 초과하면 손상된 데이터를 반환하는 대신 디코딩이 실패한다. 마지막으로, 디코딩된 비트 스트림은 처음 4비트의 인코딩 모드 지시자에 따라 해석된다: 숫자(0001, 3자리당 10비트), 영숫자(0010, 2문자당 11비트), 바이트(0100, 문자당 8비트, 일반적으로 UTF-8 또는 Latin-1), 칸지(1000, Shift JIS 사용, 문자당 13비트), 또는 ECI(0111, 문자셋 지정을 위한 확장 채널 해석). 도구는 디코딩된 문자열을 표시하고 URL( new URL() 파싱 시도로 판별)인지 일반 텍스트인지 자동 감지한다.
- 파인더 패턴 감지: jsQR은 1:1:3:1:1 비율에 맞는 흑백 픽셀 교대 실행을 행에서 스캔. 서로 대략 직각을 이루는 세 개의 패턴이 회전에 관계없이 QR 코드의 존재와 방향을 확인.
- 원근 보정: 네 개의 감지된 모서리 점에서 계산된 호모그래피 매트릭스가 기울어진 사각형을 정사각 격자에 매핑. 실제 사진에서 QR 코드를 정면으로 촬영하는 경우가 드물기 때문에 이 단계는 필수적.
- 적응형 이진화: 로컬 임계값이 이미지를 작은 영역으로 나누고 영역별 임계값을 계산하여, 전역 임계값을 무력화하는 불균일한 조명, 그림자, 그라디언트에 대해 디코더를 강건하게 만듦.
- 리드-솔로몬 오류 정정(ISO/IEC 18004): 4가지 레벨(L/M/Q/H)로 7~30% 데이터 복구 제공. 벨캠프-매시 알고리즘이 오류 위치를 찾고 포니 알고리즘이 정정 크기를 계산. 손상이 레벨을 초과하면 깔끔하게 디코딩 실패.
- 인코딩 모드 감지: 처음 4데이터 비트가 모드를 나타냄. 숫자(0001, 숫자에 효율적), 영숫자(0010, A-Z 0-9 및 기호용), 바이트(0100, 임의의 UTF-8/Latin-1 데이터용), 칸지(1000, Shift JIS용), ECI(0111, 문자셋 지정용).
- 버전 및 모듈 격자: QR 코드 버전은 1(21x21 모듈)부터 40(177x177)까지, 각 버전은 한 변에 4모듈씩 추가. 버전은 파인더 패턴 근처 형식 정보 스트립에서 읽으며, 모듈 수가 샘플링 격자 밀도를 결정.
- 브라우저 로컬 실행: 이미지를 숨겨진 Canvas 요소에 그리고, getImageData()로 원시 RGBA 픽셀 버퍼를 추출하여 jsQR이 브라우저 메인 스레드에서 전부 처리. 이미지 데이터가 서버에 업로드되지 않으며, 디코딩 완료 후 캔버스는 가비지 컬렉션됨.
예시
URL QR 코드
스캔 페이로드: https://example.com
유형: URL
동작: 스캐너가 확인 후 시스템 브라우저에서 링크를 엶일반 텍스트 QR 코드
스캔 페이로드: This is text content
유형: 텍스트
동작: 스캐너가 텍스트를 클립보드에 복사하거나 결과 시트에 표시WiFi 자격 증명 QR 코드
스캔 페이로드: WIFI:T:WPA;S:NetworkName;P:Password;;
유형: WiFi (WPA2)
동작: 포맷을 인식하는 휴대폰은 'NetworkName에 연결하시겠습니까?' 안내를 띄우고 지정된 비밀번호로 접속vCard 연락처 카드
스캔 페이로드: BEGIN:VCARD\nVERSION:3.0\nFN:Jane Doe\nTEL:+1-555-0142\nEMAIL:jane@example.com\nEND:VCARD
유형: 연락처 카드
동작: 휴대폰이 파싱한 필드를 이용해 새 주소록 항목 생성을 제안자주 묻는 질문
이미지가 디코딩을 위해 업로드되나요?
아니요. 디코딩은 WebAssembly 또는 순수 JS를 통해 브라우저에서 실행됩니다. 이미지 바이트는 로컬에서 읽히며 서버로 전송되지 않습니다.
어떤 입력 방식을 지원하나요?
파일 업로드, 클립보드에서 이미지 붙여넣기, 이미지 파일 드래그 앤 드롭이 가능합니다. 이미지는 브라우저에서 처리되며 서버로 업로드되지 않습니다.
디코더가 무엇을 반환하나요?
원본 디코딩 텍스트입니다. 페이지는 결과가 URL인지 일반 텍스트인지 감지해 그에 맞는 배지를 표시합니다. URL이라면 Open URL 버튼이 제공됩니다.
내 QR이 디코딩되지 않는 이유는 무엇인가요?
흔한 원인은 흐림, 낮은 대비, 빛 반사, 원근 기울기, 코드 일부가 가려진 경우입니다. 더 가까이 자르고, 밝기를 높이고, 표면에 90°로 휴대폰을 안정되게 들어 보세요. 오류 정정 레벨 L의 QR 코드는 거의 손상을 복구하지 못하지만, 레벨 H는 상당한 가림도 견딥니다.
스크린샷이나 PDF에서도 QR을 디코딩할 수 있나요?
스크린샷은 대비가 완벽하고 원근 왜곡이 없어 보통 잘 디코딩됩니다. PDF의 경우 QR 부분을 먼저 스크린샷으로 찍어 이미지를 업로드하세요.
QR에 포함된 모든 URL을 열어도 되나요?
아니요. QR 코드는 URL이 시각 안에 숨겨져 있어 알려진 피싱 경로(‘퀴싱’)입니다. 열기 전에 디코딩된 URL을 확인하세요. 페이지가 전체 URL을 보여주므로 도메인을 읽을 수 있습니다. 오타 도메인, IP 주소, 실제 목적지를 가리는 단축 URL을 주의하세요.
한 이미지에서 여러 QR을 디코딩할 수 있나요?
페이지는 이미지당 한 개의 QR 코드를 감지합니다. 여러 코드가 있는 이미지는 각각을 따로 잘라 개별적으로 업로드하면 가장 안정적인 결과를 얻습니다.