仕組み
ファイルは、いま使っているブラウザが開きます。どこにも送られません。
実際に走っているものを、走る順に。最後に、一分もかからない確認方法を書いています。
ファイルは読み込むだけ、送信はしない
ファイルを置くと、ページは File オブジェクトを受け取り、File API でこのタブのメモリに読み込みます。それを運ぶ通信はありません。行き先が無いからです。このサイトは CDN 上の静的ファイルだけで、受け取るサーバー側のコードがありません。
- バイト列は File と Blob、読み取りは FileReader と arrayBuffer
- ドラッグ&ドロップ、ファイル選択、貼り付け、どれも同じオブジェクトを渡す
- fetch・アップロード・form action・API パスがページに現れた時点でビルドが落ちる
デコードはタブの中
カメラやデザインソフトが書き出す形式は、ブラウザ単体では開けません。だからデコーダーをページと一緒に配り、その場で動かします。
- HEIC・HEIF:libheif の JavaScript ビルドを、当サイト自身が配信
- PDF:PDF.js。PDF 内の一部の画像コーデックで WebAssembly を使います
- SVG 化は ImageTracer、QR の読み取りは jsQR、PDF の書き出しは pdf-lib
- どのライブラリもビルド時に取得してこのドメインから配るので、外部 CDN に訪問が見えることはありません
処理は canvas で、しかも worker の中で
リサイズ・圧縮・変換はすべて canvas の処理です。Web Worker の中で走らせているので、大きな写真でも目の前のページは固まりません。
- worker 内の OffscreenCanvas が一枚ずつ描画し、書き直す
- convertToBlob が JPG・PNG・WebP を作る。画質はあなたが決める
- PNG の圧縮は、当サイト用に書いた median cut のパレット処理。既存ライブラリではありません
- ファイルに関するもの — 名前・サイズ・中身・そこから導けるもの — は一切計測も送信もしません
結果もここで作られる
ダウンロードされるのは、このタブで組み立てた Blob を object URL としてブラウザに渡したものです。他のどこにも存在したことがありません。
- 一つずつ、またはタブの中で作った ZIP でまとめて
- タブを閉じれば結果は消えます。後から取りに戻れる形では何も保存しません
自分で確かめる
このページの言い分を信じる必要はありません。方法は二つ、どちらも一分かかりません。
- DevTools の Network タブを開いてから変換する。ファイルを運ぶ通信は出て行きません。
- ページを読み込んだあとネットワークを切り、そのまま使う。問題なく動きます。
- ソースを読む。ここで動いているものは、そのまま開いて読める素のファイルです。
端末内で処理する道具と、アップロードする道具
どちらも普通にあるもので、どちらも正当です。違いはファイルがどこへ行くか。そしてその違いが、何を信じる必要があるかを決めます。
| 端末の中 | サーバーへ送る | |
|---|---|---|
| ファイルの行き先 | タブの中に留まる | サーバーへ渡る |
| 保存期間 | 保存するものが無い | 多くは一定時間後に削除 |
| オフラインで使えるか | 読み込み後なら使える | 使えない |
| サイズの上限 | 端末のメモリ | サービスが許す範囲 |
| 何を信じることになるか | ページの挙動。自分で見られる | サービスの説明 |
どの道具も、同じ決まり
すべてこの仕組みで動きます。有料版もアカウントも、出ていくファイルもありません。