나는 Stanley Lieber를 죽이지 않았다: 9front로 그리는 법

49 minutes ago 1
  • 9front에서 그림을 그리는 전체 흐름을 paint(1) 중심으로 정리하며, 입력 장치 선택부터 캔버스 관리, 이미지 조작, 내보내기까지 연결함
  • 작업은 9front 내부 image(6) 형식에서 진행하고, paint(1)로 그린 뒤 page(1), crop(1), vcrop(1), resize(1), rotate(1)로 결과물을 조정하는 방식임
  • paint(1)은 압력 감지, 레이어, 잘라내기/붙여넣기가 없어 사용자가 종이처럼 작업 영역과 색상을 직접 관리해야 함
  • 마우스, 손가락, 펜, 외장 태블릿, drawterm/VNC 입력을 모두 다루지만, 펜 버튼은 마우스 클릭을 흉내 내므로 키보드와 마우스를 가까이 두는 구성이 실용적임
  • 외부 공유에는 PNG 변환이 적합하며, PNG나 JPG는 paint(1), crop(1), vcrop(1)의 직접 편집 대상이 아니어서 필요하면 다시 9front image 형식으로 바꿔야 함

9front에서 그림을 그리기 위한 기본 구성

  • 그림을 그리려면 “그릴 도구”와 “그릴 표면”이 필요하며, 9front에서는 실제 펜 입력 장치뿐 아니라 여러 입력 방식을 사용할 수 있음
  • 9front가 실행되는 컴퓨터라면 How to draw를 따라 할 수 있고, 화면에 직접 그리는 기기를 원하면 Wacom 지원 2-in-1 노트북이 적합함
  • 실제로 잘 동작한 장치 목록은 다음 ThinkPad 계열임

입력 장치별 특성

  • 마우스 드로잉은 오래된 방식이지만, 마우스가 있는 모든 컴퓨터와 호환된다는 장점이 있음
  • 손가락 입력은 화면 터치가 왼쪽 마우스 클릭을 흉내 내지만 다른 클릭은 대체하지 못해 마우스를 가까이 둬야 함
  • 외장 태블릿은 화면이 있는 제품은 9front에서 동작하지 않을 가능성이 있고, 화면 없는 제품은 동작할 수 있음
    • 추천 장치는 GAOMON S620이며, 9front에서 플러그 앤 플레이로 잘 동작함
    • Wacom CTL-672는 상대 좌표 터치패드처럼 동작함
    • Wacom CTL-490은 동작하지 않음
    • 관련 정보는 [fqa] 3.2.4 - Tablet Digitizers에 있음
  • 키보드만으로 제대로 그리기는 어렵지만, paint(1) 작업에는 키보드가 필요함
    • 물리 키보드 접근이 어려운 태블릿 컴퓨터나 특수 환경에서는 bitsy/keyboard 온스크린 키보드를 사용할 수 있음
    • 실행 예시는 rio -k 'bitsy/keyboard -n'
  • drawterm/VNC를 쓰면 원격 또는 가상 9front 컴퓨터에 접속해 더 다양한 입력 장치를 사용할 수 있음
    • Android 전화에서 손가락으로 그리거나, Linux와 MacOS에서 마우스로 그리거나, Windows에서 9front가 직접 지원하지 않는 입력 장치를 사용할 수 있음
    • 관련 사이트는 drawterm.9front.org

image(6) 형식과 paint(1)의 전제

  • 9front의 그리기, 자르기, 이미지 조작은 내부 image(6) 형식 파일에서 수행됨
  • 그림을 만드는 동안에는 형식을 크게 신경 쓰지 않아도 되지만, 외부에 공유하려면 다른 형식으로 변환해야 함
  • 파일 이름은 file.pic 같은 방식을 예로 들지만, 원하는 이름을 붙일 수 있음
  • 이 안내는 9front의 여러 그리기 프로그램 중 paint(1) 만 다룸
  • paint(1)은 일반적인 디지털 드로잉 프로그램보다 종이, 잉크, 색으로 그리는 작업에 더 가까운 방식으로 접근해야 함

paint(1)의 제한과 기본 조작

  • 펜과 태블릿 버튼은 마우스 입력을 흉내 내며, 안내에서는 모두 마우스 조작으로 표현함
    • 화면 위에 떠 있는 상태는 마우스 이동
    • 표면을 터치하면 왼쪽 클릭 또는 누르고 있기
    • 이상적인 펜은 가운데 클릭과 오른쪽 클릭을 위한 버튼 2개를 가짐
    • 오른쪽 클릭만 되는 버튼이 있으면 Shift를 누른 채 버튼을 눌러 가운데 클릭을 흉내 낼 수 있음
  • paint(1)과 9front는 압력 감지를 지원하지 않음
  • 레이어와 잘라내기/붙여넣기도 없으며, 그린 그대로 결과물이 됨
  • 저장과 열기는 키 입력으로 수행함
    • w: 파일 저장
    • r: 파일 열기 또는 다시 읽기
    • |: 현재 캔버스를 명령으로 파이프해 변환
    • < command: 명령 결과를 paint(1)로 읽어 현재 캔버스를 대체
    • > command: 현재 캔버스를 명령으로 넘겨 파일에 쓰기
  • 예시 작업은 다음과 같음
    • | rotate -u: 캔버스 회전
    • < crop -i -50 glenda.pic: glenda.pic에 50픽셀 검은 테두리를 추가해 열기
    • > crop -i -50 | rotate -r 90 > modified_glenda.pic: 현재 캔버스에 테두리를 추가하고 90도 회전해 저장

캔버스는 픽셀이 찍힌 범위로 결정됨

  • paint(1)에서 캔버스는 그림을 포함하는 직사각형 영역임
  • 시작 직후의 흰 창은 비어 있는 파일이며, 첫 픽셀을 그리거나 지운 뒤에야 캔버스가 만들어짐
  • paint(1)은 가장 멀리 놓인 픽셀을 캔버스의 경계로 간주함
    • 창 크기는 캔버스 크기를 결정하지 않음
    • 지우개로 지운 픽셀도 픽셀을 놓은 것으로 취급됨
  • 처음 만든 paint(1) 창 크기를 작업 캔버스처럼 생각하고 모서리에 자르기 표시를 그린 뒤 작업하는 방식이 권장됨
  • 정확한 크기의 그림이 필요하면 별도 절차로 고정 크기 캔버스를 만들고, 작업 후 자르기 계산이나 여백 제거를 해야 함

paint(1)의 주요 도구

  • 도구 선택은 하단 툴바를 왼쪽 마우스로 클릭해 수행함
  • 색상
    • 왼쪽 클릭으로 색을 선택함
    • 툴바 색상을 오른쪽 클릭하면 16진수 코드를 입력해 팔레트를 바꿀 수 있음
    • paint(1)은 종료 후 팔레트를 기억하지 않으므로 새 창을 열 때마다 다시 바꿔야 함
    • 16개보다 많은 색을 쓰려면 여러 paint(1) 창에서 같은 그림 파일을 열고 w와 r로 동기화할 수 있음
  • 브러시
    • 0-9 또는 왼쪽 마우스로 브러시 크기를 고르고 드래그해 그림
  • 채우기
    • f, c, 왼쪽 마우스, 가운데 마우스를 사용함
    • 같은 색으로 이어진 픽셀 영역을 다른 색으로 바꿈
    • 배경색 변경에도 쓰이며, 배경색은 지우개가 바꾸는 색이 됨
    • c는 모든 것을 제거하고 선택한 색을 배경으로 바꿔 빈 파일 상태로 만듦
  • 지우개
    • 0-9, 가운데 마우스를 사용함
    • 현재 브러시 크기와 같은 크기로 커서 아래를 배경색으로 바꿈
  • 직선과 원
    • 직선은 자를 사용함
    • 원은 납작하고 둥근 물체나 양파지에 컴퍼스로 미리 그린 원을 따라 그리는 방식을 사용함
  • 이동, 확대, 되돌리기
    • 오른쪽 마우스를 누르고 움직이면 패닝함
    • -, +로 확대/축소하지만 원래 확대 수준보다 더 멀리 축소할 수 없음
    • Esc는 확대를 초기화하고 캔버스를 가운데로 맞춤
    • u는 마지막 연속 선분을 되돌리며, 긴 선 하나도 여러 undo 단계로 나뉠 수 있음

가짜 레이어와 색상 기반 제거

  • paint(1)에는 레이어가 없지만, 실제로 쓰지 않을 색으로 스케치한 뒤 그 위에 선을 그리는 방식으로 가짜 레이어를 만들 수 있음
  • 예시에서는 HotPink를 스케치 색으로 쓰고, 완료 후 해당 색만 제거함
  • 수동으로 채우기나 정밀 지우개를 쓰면 오래 걸릴 수 있어 pico로 특정 색을 배경색으로 치환하는 방식이 유용함
  • pico는 다음 명령으로 받을 수 있음
  • 관련 설명은 Image Manipulation on Plan 9 Using pico에 있음
  • HotPink #ff5fd7의 10진수 RGB 값은 255, 95, 215이며, pc(1)로 변환하는 예시를 포함함

page(1), crop(1), vcrop(1), resize(1), rotate(1)

  • page(1)은 문서 뷰어이며, 여러 이미지 형식, PDF, 전자책 등을 표시하는 데 쓰임
    • page my_picture.pic로 그림을 볼 수 있음
    • 이미지 조작 결과를 파일로 쓰기 전에 page(1)로 확인하는 습관이 권장됨
    • page(1)에서도 w를 눌러 표시 중인 결과를 파일로 저장할 수 있음
  • paint(1) 창보다 그림이 커졌다면 별도 page picture.file 창을 만들고 fit width나 fit height로 미리보기 창처럼 사용할 수 있음
  • vcrop(1)은 그래픽 자르기 도구임
    • 왼쪽 마우스로 패닝
    • 가운데 마우스로 자르기 도구 선택
    • 오른쪽 마우스로 저장 등 옵션 표시
    • 확대가 안 되므로 창보다 큰 영역을 자르거나 픽셀 단위 정밀 자르기가 필요할 때는 한계가 있음
  • crop(1)은 픽셀 줄을 제거하거나 추가함
    • crop -x 50 mypic.pic > mypic_crop.pic: 좌우에서 50픽셀 자르기
    • crop -i -10 -b 255 255 255 mypic.pic: 10픽셀 흰 테두리 추가
  • resize(1)는 그림을 크게 또는 작게 만듦
    • 원본 비율을 유지하려면 -x나 -y 중 하나만 지정함
    • 예시: resize -n -y 245 mypic.pic > mypic_resized.pic
  • rotate(1)는 이미지를 90도 단위로 회전할 수 있음
    • rotate -r 90 my.pic > rotated.my.pic
    • rotate -ul > flipped.my.pic

정확한 캔버스 크기 만들기와 자르기 전략

  • 정확히 250x250 같은 크기가 필요하면 빈 이미지를 만들고 resize(1)로 원하는 크기를 만든 뒤 paint(1)로 여는 절차를 사용함
    • w empty_canvas.pic
    • resize -n -x 250 -y 250 empty_canvas.pic > empty_canvas_250x250.pic
    • cp empty_canvas_250x250.pic mypicture.pic
    • paint mypicture.pic
  • paint(1)은 캔버스 경계를 넘어 그리는 것을 막지 않고, 경계를 넘으면 그림 크기를 확장함
  • 선택지는 세 가지임
    • 경계를 넘은 선을 신경 쓰지 않고, 작업 후 수학적으로 잘라냄
    • 작업 전 여분의 균등 여백을 추가하고, 완료 후 제거함
    • 모서리에 자르기 표시를 그려 두고 나중에 자름
  • crop -r a b c d는 이미지의 절대 좌표를 이용해 자르며, dd -bs 128 -count 1로 좌표를 확인할 수 있음
  • 여백 방식은 예를 들어 250x250 흰 캔버스에 25픽셀 빨간 여백을 붙여 작업한 뒤, 끝나면 crop -i 25로 제거해 정확한 250x250 결과를 얻음

트레이싱과 팔레트

  • 인터넷 이미지를 가져와 9front 형식으로 변환한 뒤, pico로 밝게 만들어 paint(1)에서 따라 그릴 수 있음
  • paint(1)에서 HotPink 같은 특정 색으로 선을 따라 그린 뒤, pico로 그 색만 남기고 나머지를 흰색으로 바꿀 수 있음
  • 팔레트 관련 자료로 git.sr.ht/~amavect/makeu가 있음

외부로 내보내기와 공유

  • 9front에서 그린 이미지는 사실상 픽셀 아트이므로 PNG로 변환하는 것이 권장됨
  • PNG는 JPG보다 항상 더 작고 선명하며, paint(1)에서 보이던 그대로 보인다고 정리함
  • PNG나 JPG 같은 다른 형식은 paint(1), crop(1), vcrop(1)에서 직접 다룰 수 없지만 page(1)로 표시할 수 있음
  • 원본을 잃어버렸다면 PNG를 다시 9front 형식으로 변환해 편집할 수 있음
    • png -c9 my_picture.png > my_picture.pic
  • 결과물을 다른 기기로 옮기는 방법은 단순한 것부터 복잡한 것까지 다양함
    • page(1)로 열고 휴대폰으로 화면을 촬영
    • FAT USB 드라이브를 연결해 /shr/sdS0M3TH1NG로 복사
    • sshfs(4)로 Unix 컴퓨터에 전송
    • Unix 컴퓨터에서 drawterm으로 접속해 /mnt/term/some/where로 복사
    • mothra(1)로 snac에 게시
    • 9front 컴퓨터에서 자신에게 이메일 전송
    • 9front 안의 가상 머신으로 sshfs(4) 전송
    • 9front 웹서버에 복사한 뒤 다른 장치에서 다운로드
Read Entire Article