make-look-scanned: デジタルPDFをリアルなスキャン文書に変換する

概要

make-look-scanned は、クリーンなデジタルPDFを、物理的に印刷してスキャンしたかのように見える文書に変換するために設計された特化型ユーティリティです。このツールは、各ページを画像にラスタライズし、一連の劣化エフェクトを適用することで、元の選択可能なテキストが削除され、基本的なスキャナーの出力を模倣する画像のみのPDFを作成します。

著者によると、このプロジェクトは、ユーザーが機密ファイルをサードパーティのサーバーにアップロードする必要があるオンラインの「PDFをスキャンしたように見せる」ツールに代わる、プライバシー重視のローカルな代替手段を提供するために作成されました。

技術的な実装とパイプライン

このツールは、物理的なスキャンの不完全さをシミュレートするために、多段階のエフェクト・パイプラインを利用しています。ユーザーは、CLIフラグまたは設定プリセットを介して、以下のパラメータを制御できます:

  • 幾何学的歪み: --skew フラグにより、紙のずれをシミュレートするために最大回転角度(度)を指定できます。
  • 視覚的劣化: オプションには、スキャナーの粒子感を出すための --noise、デフォーカス(ガウス・シグマ)のための --blur、および境界のビネット効果のための --edge-shadow が含まれます。
  • 色とトーン: --grayscale フラグは文書をグレースケール化し、--paper-tone は経年変化した紙や特定の紙の種類をシミュレートするために温かみのある色合いを加えます。
  • 圧縮アーティファクト: --jpeg-quality フラグ(1-100)は、スキャンされた画像PDFによく見られるJPEG圧縮アーティファクトを導入します。

決定論と再現性

デフォルトでは、出力は決定論的です。ツールは入力PDFのコンテンツハッシュからシード値を導出し、同じ入力ファイルは常に同じ視覚的結果を生み出すことを保証します。ユーザーは --seed N フラグを使用して、この挙動を上書きし、異なるが再現可能な外観を生成することができます。

デプロイメント・オプション: CLI vs. ブラウザ

make-look-scanned は、エフェクト・パイプラインを実行するための2つの異なる方法を提供し、処理がユーザーのローカルマシン上で行われることを保証します。

コマンドライン・インターフェース (CLI)

CLIはGoで書かれており、cgoを使用して go-fitz を介して MuPDF にリンクしています。これにより、ランタイムのインストールを必要としない自己完結型のバイナリが生成されます。再利用可能なプリセットを保存するために、$XDG_CONFIG_HOME/make-look-scanned/ または ~/.make-look-scanned/ に配置された config.toml ファイルを介して設定できます。

ブラウザ (WebAssembly)

MuPDF は WASM にコンパイルできないため、ブラウザ版はページのラスタライズに PDF.js を使用します。ページがピクセルに変換されると、WebAssembly にコンパイルされた同じ Go のエフェクト・パイプラインに渡されます。これにより、ツールを完全にクライアントサイドで実行することが可能になります。

特に、著者は、WASM、Goランタイムのグルーコード、および PDF.js を base64 としてインライン化し、サーバーなしでオフラインでも動作する単一の自己完結型 HTML ファイル (dist/make-look-scanned.html) を提供しています。

コミュニティの洞察と代替手段

ユーザー間の議論は、ツールのユーティリティと実装に関するさまざまな視点を示しています:

  • プライバシーとアクセシビリティ: ユーザーは、有料のPDFユーティリティと比較して、このツールがオープンソースで無料である点を高く評価しています。
  • 代替方法: 一部のユーザーは、手動による回避策を提案しています。例えば、モニターにPDFを表示し、それをスマートフォンで撮影することで、自然にモアレ・パターンや埃を捉える方法です。
  • 技術的な代替手段: あるユーザーは、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

  • 機能リクエスト: 改善のための提案には、PDF だけでなく、個別の画像(JPG/PNG)として出力する機能の追加、およびシミュレーションのリアリズムをさらに高めるためにランダムな白紙ページを挿入するフラグの追加が含まれてます。

Sources