보통 영수증을 출력할 때 사용하는 프린터는 열전사 프린터입니다. 아래 이미지처럼 생긴건데, 열(heat)에 감응하는 용지에 열로 글자, 이미지 등을 그려내는 방식이라 보면 됩니다.

a6

DIY 용으로도 쉽게 구매해서 사용해 볼 수 있는 프린터라서 이전에 이 프린터를 활용하는 방법에 대한 글을 올린 적이 있습니다. 보통 아두이노 또는 라즈베리 파이에 연결해서 사용합니다.

https://hardcopyworld.com/?p=653

그런데 요즘 aliexpress.com 을 검색해보니 굉장한 열전사 프린터들을 비교적 싼 가격에 판매하는게 눈에 들어오더군요.

ali_bt_printer_resized

동작 방식은 위에서 소개한 프린터와 같지만 더욱 빠르고 충전 가능한 배터리가 있어서 휴대용으로 쓸 수도 있고 블루투스, USB 연결까지 지원해 줍니다. (WiFi, IR 연결은 모델에 따라 옵션) 가격도 30$ ~ 35$ 선에서 구매가 가능합니다. 잉크값 들어갈 일이 없으니 저렴한 전용 용지만 구해두면 맘껏 프린트 할 수 있습니다. (프린터 헤더 수명이 100Km 라고…)

이 제품 보니 딱 휴대용 포토 프린터 용이다 싶어서 직접 만들어 봤습니다.

하드웨어 (프린터)

aliexpress.com 에서 [bluetooth printer] 로 검색하면 유사한 제품들이 주르륵 나옵니다. 제가 사용한 프린터는 아래 스펙을 가지고 있습니다.

  • 프로토콜 : ESC/POS
  • 용지 가로 폭 : 58mm (80mm 프린터도 있음)
  • 용지 롤 직경 : 4cm 이하 사용
  • 열전사 프린터 (Thermal paper 사용)
  • 블루투스 4.0, 3.0 지원
  • 가로 해상도 : 384 dop / line (노멀 사이즈 폰트 사용시 영문 32자 출력)
  • 배터리 : 7.4V, 1500mAh

bt_printer_sample

DIY 라곤 하지만 제품만 구입하면 끝.  58mm 용 감열지 (직경 4Cm 이하) 50롤 구매에 15,000원도 안하니 대량구매.

  • 주의!!  영수증 용지의 환경 호르몬 문제가 제기된 적이 있습니다. 반드시 BPA free 표시된 제품을 사용하시길 권장합니다.

이제 안드로이드 앱을 만들어 요걸 휴대용 포토 프린터로 써먹어 보겠습니다.  :)

이미지 프린트

구글 검색을 해보면 프린터 제작사에서 만들어서 배포하는 안드로이드/iOS 용 앱이 있습니다. 그런데 성능이 너무 떨어져서 그대로 쓸 수가 없는 지경이라 안드로이드 전용 앱 Printer Lab 을 새로 만들었습니다.

PrinterLab_title_small

블루투스  연결 관리는 이전에 작성해 둔게 있어서 쉽게 구현. 블루투스로 프린터 페어링 할 때 PIN 번호를 물어봅니다. 제가 가진 프린터는 PIN 번호가 0000 으로 설정되어 있던데 1234 로 설정된 경우도 있을겁니다. 테스트를 해보니 빠릿빠릿하게 연결되고 배터리로 구동되는 상태에서도 잘 됩니다.

가장 먼저 이미지 출력 기능을 구현했습니다.

app_image_ss

그리고 아들 사진 골라서 출력!!

bw_print_sample1

그런데 흑백으로만 나옵니다. 아들 사진 출력했는데 이래서는 뉘집 아들인지 알 수가…

열전사 프린터는 특성상 1픽셀을 흰색/검은색으로만 표현하기 때문에 명암(grayscale)을 표현할 수 없습니다. 그래서 컬러 이미지를 흑백(grayscale) 이미지로 변환한 뒤, 이미지 전체 grayscale 평균 값을 계산합니다. 그리고 픽셀의 밝기가 평균보다 크면 검은색, 값이 작으면 흰색으로 표현해 버립니다.

그래서 몇 가지 꼼수를 써서 5단계 명암 표현이 가능하도록 수정해 봤습니다. 아래는 수정 후 출력한 결과입니다.

bw_print_sample2

bw_print_sample3

bw_print_sample4

bw_print_sample5

이미지가 한결 보기 좋아졌습니다. 이제 아들이 아들같아 보입니다… 이 방식이 모든 이미지에 최선은 아니라서, 컨트라스트가 강하고 사물과 배경의 경계가 명확한 경우 품질이 좀 떨어져 보이기도 합니다. 하지만 대부분의 이미지에서는 더 좋은 결과를 내줍니다.

bw_print_sample6

bw_print_sample7

위에 적용한 방법은 Ordered dithering 으로 5단계 명암을 표현했습니다. 이번에는 좀 더 진화한(?) Error diffusion dithering을 적용해 보겠습니다. 사진이 훨씬 근사하게 나옵니다.

dithered_1

dithered_2

2018.01.05 업데이트 : 가로로 긴 이미지의 경우 용지 가로 폭에 맞춰 작게 출력되기 때문에 자동 회전하도록 업데이트 했습니다.

결과를 보면 시중에 판매되는 전용 포토 프린터에 비할바가 아니지만 이게 어딥니까. 값비싼 잉크나 포토 프린터 용지를 사지 않고도 싼 값으로 마음껏 프린트해서 놀 수 있으니까요. 핸드폰 카메라로 사진을 찍어서 바로 출력도 가능합니다.

print_sample_all

이정도 출력해도 3cm 1롤을 다 못쓸 정도로 경제적입니다. 그리고 열전사 프린터의 진정한 가치는 다음에 소개할 다양한 부가 기능에 있습니다.

다양한 부가 기능

사실 열전사 프린터는 이미지가 아니라 문자 출력용이죠. 그래서 기본 영문 폰트에 몇 가지 효과를 먹여서 출력할 수 있습니다.

char_print_sample

영문 출력을 테스트 해보니 속도도 빠르고 깔끔하게 프린트 됩니다. 문제는 한글… 프린터 스펙에 다국어 지원이라 적혀있긴 한데, 중국산이라 그런지 한자(간체, 번체)는 되지만 한글은 출력이 되질 않습니다. 매뉴얼을 뒤져서 한글 code page 설정법은 찾았는데 프린터에 폰트가 탑재되지 않았는지 사용불가.

이래저래 고민을 거듭하다 내린 결론은… 한글도 이미지로 출력해 버리자;;;  아래는 문자열을 이미지로 그려서 출력한 결과입니다.

print_korean_lang

영문 폰트처럼 깔끔하게 출력되는건 아니지만 상당히 괜찮게 나옵니다. 어쨌든 문제는 해결 됐으니 이걸로 다양한 부가 기능들을 구현해 봤습니다.

# 간단한 메모, 텍스트 출력

메모를 적어서 바로 출력 가능하도록 만들었습니다. 그리고 외부 앱, 예를 들어 카카오 톡이나 일정 관리 앱에서 텍스트(메시지)를 Printer Lab 앱으로 전달해서 출력할 수 있습니다. (외부 앱에서 이미지를 전달받아 출력도 가능)

app_text_ss

# QR  코드, 바코드 출력

QR 코드로 만들 텍스트를 넣으면 QR 코드를 프린트 해줍니다. 즉석에서 원하는 만큼 뽑아서 사람들에게 나눠줄 수 있습니다. 바코드 출력 기능도 구현을 해두긴 했는데… 전 쓸 일이 없어서…

app_test2

# RSS 뉴스 출력

뉴스를 받아와서 출력할 수 있도록 RSS 기능을 넣었습니다. RSS 주소를 등록하면 RSS 피드를 주기적으로 가져옵니다. 수집된 RSS 피드는 타임라인 탭에 쌓입니다.

app_extensions2

RSS 업데이트 주기를 설정해두면 자동으로 피드를 업데이트 해줍니다. 요건 [타임라인(Timeline)] 탭에서 확인 후 한꺼번에 출력 가능합니다.

RSS 피드는 제목만 출력합니다. (본문은 출력하기엔 너무 깁니다)  RSS 피드는 최대 10개만 가져옵니다. (너무 많으면 프린터 출력에 부담, 설정에서 변경 가능)

# 일정 출력

구글 캘린더에서 일정을 가져와 출력할 수 있습니다. 먼저 일정 가져오기 버튼을 누르면 원하는 구글 계정을 선택하도록 창이 뜹니다. 계정을 선택하면 지금부터 24시간 이내의 일정을 가져와 타임라인에 등록해줍니다.

# 연락처 출력

2018.01.05 업데이트 : 전화번호부에서 연락처를 1개 이상 공유하는 경우 Printer Lab 에서 연락처를 받아 출력할 수 있습니다. Printer Lab에서 버튼을 눌러 연락처를 가져와 프린트 하거나 직접 입력해서 프린트 할 수 있습니다.

# 타임라인

업데이트 된 RSS 피드, 일정 데이터를 모아서 보여주고 한꺼번에 출력할 수 있습니다. 한번 프린트 한건 다시 출력되지 않으며 24시간이 지난 데이터는 자동으로 지워집니다.

app_extensions

# 기타 

  • 앱 실행시 프린터 자동 연결 기능 – 요건 PIN 코드를 미리 입력해둬야 합니다.
  • 자동 프린트 – 일정 간격으로 타임라인 탭에 쌓인 데이터를 자동 출력합니다. 프린터 자동 연결이 설정되어 있어야 합니다.
  • 2018.01.05 업데이트 : 80mm 프린터를 지원합니다. 이 경우 프린터가 576 dot/line 을 지원해야 합니다.

PortablePhotoPrinter_small

처음에는 열전사 프린터로 포토 프린터를 만들어보자는 취지로 시작했는데 앱을 만들다보니 점점 일이 커져서… 이런저런 기능들을 추가하게 되었네요. 여기 있는 기능외에 더 좋은 아이디어 있으면 제게도 알려주세요.

열전사 프린터 구매해서 활용해 보고 싶으시다면 Printer Lab 앱을 다운받아 꼭 써보세요. But… 안드로이드 v5.0 이상만 지원합니다.

참고자료

Printer Lab 앱 다운로드 (안드로이드 v5.0 이상만 지원)

블루투스 열전사 프린터 판매 제품 목록

전용 용지

안드로이드 ESC/POS 프린팅 How-To