make-look-scanned: 디지털 PDF를 사실적인 스캔 문서로 변환하기

개요

make-look-scanned는 깨끗한 디지털 PDF를 물리적으로 인쇄하고 스캔한 것처럼 보이는 문서로 변환하도록 설계된 특화된 유틸리티입니다. 이 도구는 각 페이지를 이미지로 래스터화하고 일련의 열화 효과를 적용하여, 기본 스캐너의 출력물을 모방하기 위해 원래의 선택 가능한 텍스트가 제거된 이미지 전용 PDF를 생성합니다.

저자에 따르면, 이 프로젝트는 사용자가 민감한 파일을 제3자 서버에 업로드해야 하는 온라인 "make my PDF look scanned" 도구들에 대한 개인정보 보호 중심의 로컬 대안을 제공하기 위해 만들어졌습니다.

기술적 구현 및 파이프라인

이 도구는 물리적 스캔의 불완전함을 시뮬레이션하기 위해 다단계 효과 파이프라인을 활용합니다. 사용자는 CLI 플래그나 설정 프리셋을 통해 다음 매개변수를 제어할 수 있습니다:

  • Geometric Distortion (기하학적 왜곡): --skew 플래그를 통해 종이가 어긋난 것을 시뮬레이션하기 위한 최대 회전 각도를 설정할 수 있습니다.
  • Visual Degradation (시각적 열화): 옵션에는 스캐너 입자감을 위한 --noise, 초점 이탈을 위한 --blur (Gaussian sigma), 그리고 테두리 비네팅을 위한 --edge-shadow가 포함됩니다.
  • Color and Tone (색상 및 톤): --grayscale 플래그는 문서를 무채색으로 만들고, --paper-tone은 오래되거나 특정 종류의 종이 느낌을 주기 위해 따뜻한 색조를 추가합니다.
  • Compression Artifacts (압축 아티팩트): --jpeg-quality 플래그 (1-100)는 스캔된 이미지 PDF에서 흔히 발생하는 JPEG 압축 아티팩트를 도입합니다.

Determinism and Reproducibility (결정론 및 재현성)

기본적으로 출력은 결정론적입니다. 이 도구는 입력 PDF의 콘텐츠 해시로부터 시드를 추출하여, 동일한 입력 파일이 항상 동일한 시각적 결과를 생성하도록 보장합니다. 사용자는 --seed N 플래그를 사용하여 다른 결과물을 만들면서도 여전히 재현 가능한 외형을 생성할 수 있습니다.

배포 옵션: CLI vs. Browser

make-look-scanned는 효과 파이프라인을 실행하는 두 가지 뚜렷한 방식을 제공하여, 프로세싱이 사용자의 로컬 머신에서 발생하도록 보장합니다.

Command Line Interface (CLI)

CLI는 Go로 작성되었으며 cgo를 통해 go-fitz를 사용하여 MuPDF에 연결됩니다. 이는 별도의 런타임 설치가 필요 없는 독립형 바이너리를 생성합니다. 재사용 가능한 프리셋을 저장하기 위해 $XDG_CONFIG_HOME/make-look-scanned/ 또는 ~/.make-look-scanned/에 위치한 config.toml 파일을 통해 설정할 수 있습니다.

Browser (WebAssembly)

MuPDF는 WASM으로 컴파일할 수 없기 때문에, 브라우저 버전은 페이지 래스터화를 위해 PDF.js를 사용합니다. 페이지가 픽셀로 변환되면, WebAssembly로 컴파일된 동일한 Go 효과 파이프라인으로 전달됩니다. 이를 통해 도구가 완전히 클라이언트 측에서 실행될 수 있습니다.

Community Insights and Alternatives (커뮤니티 인사이트 및 대안)

사용자들 사이의 논의는 이 도구의 유용성과 구현에 대해 다양한 관점을 보여줍니다:

  • Privacy and Accessibility (개인정보 보호 및 접근성): 사용자들은 유료 PDF 유틸리티와 대조되는, 이 도구가 오픈 소스이며 무료라는 점을 높이 평가했습니다.
  • Alternative Methods (대안 방법): 일부 사용자는 모니터에 PDF를 띄워놓고 휴대폰으로 촬영하여 자연스러운 무아레 패턴과 먼지를 캡처하는 수동적인 우회 방법을 제안했습니다.
  • Technical Alternatives (기술적 대안): 한 사용자는 ImageMagick을 사용하여 다음과 유사한 워크플로우를를 공유했습니다:

magick -density 150 input.pdf -colorspace Gray -virtual-pixel White -background White -rotate 0.7 +repage -attenuate 0.45 +noise Gaussian -blur 0x0.4 -brightness-contrast -5x12 -compress jpeg -quality 78 scanned.pdf

  • Feature Requests (기기능 요청): 개선 사항으로 PDF만 출력하는 대신 개별 이미지 (JPG/PNG)를 출력하는 기능과, 시뮬레이션의 사실성을 더욱 높이기 위해 무작위 빈 페이지를 삽입하는 플래그를 추가해 달라는 제안이 있었습니다.

Sources