image

画像にファイルを埋め込む

任意の1ファイルを画像の画素へ埋め込み、生成PNGからあとで元ファイルを取り出します。必要ならパスワード保護できます。

ローカル処理
ファイルについてこのツールで選択したファイルや入力内容は、Browser Kittyのバックエンドへアップロードせずブラウザ内で処理します。
操作デモ 実際の操作の流れを短い動画で確認できます。

このツールについて

画像にファイルを埋め込む / File in Imageは、PNG・JPEG・WebP画像を元に、任意の1ファイルを画像の画素へ埋め込み、生成したPNGからあとで元ファイルを取り出すツールです。埋め込める元ファイルは1回につき1つ、最大32 MiBです。

埋め込み容量はファイルサイズだけでは決めず、完全に不透明なRGB画素と、必要に応じてGZIPしたあとの実際の保存サイズから判定します。任意でパスワード保護を有効にすると、元ファイル名を含む埋め込みデータをPBKDF2-HMAC-SHA-256とAES-256-GCMで保護します。

生成したPNGは保存前にアプリ自身で再読込し、通常の取り出し処理を通して元ファイルを復元し、SHA-256が一致した場合だけ保存できます。画像・埋め込むファイル・パスワード・生成PNG・復元データはブラウザ内で処理され、変換のためにBrowser Kittyへアップロードしません。

こんなときに便利

  • 画像と関連する小さなファイルを1つのPNGとして手元でまとめて保管したい
  • 任意のファイルを画像へ埋め込み、あとで同じツールから元のバイト列を復元したい
  • 埋め込みデータをパスワードで保護し、ファイル名を含めて暗号化したい

できること

このツールで利用できる主な機能です。

使い方

  1. PNG / JPEG / WebP画像を選択またはDrag & Dropします。
  2. 埋め込みたい1ファイルを選びます。元ファイルは最大32 MiBです。
  3. 表示された利用可能容量と実際の保存サイズを確認します。
  4. 必要なら「パスワードで保護する」を有効にして、同じパスワードを2回入力します。
  5. 「画像に埋め込む」を実行し、適応埋め込みと生成PNGの自動復元確認が終わるまで待ちます。
  6. SHA-256一致まで確認できたら、必要に応じて出力ファイル名を変更してPNGを保存します。
  7. 復元するときは「取り出す」へ切り替え、生成PNGを読み込み、必要ならパスワードを入力して元ファイルを保存します。

対応範囲

  • 元画像: PNG / JPEG / WebP。出力画像はPNGのみです。
  • 埋め込むファイル: 形式を問わず1ファイル、最大32 MiB。画像側は最大32 MPの範囲で、完全に不透明な画素だけを埋め込み容量として使います。
  • 圧縮: BKFCコンテナ全体をGZIPし、元より小さくなる場合だけ圧縮結果を採用します。
  • パスワード保護: PBKDF2-HMAC-SHA-256を600,000回で使用し、AES-256-GCMでファイル名・MIME・SHA-256・元データを含むbodyを保護します。
  • 復元確認: 生成PNGを保存前に再デコードし、通常の復元経路を通したあと、元ファイルのSHA-256、ファイル名、MIME、byte長を確認します。
  • 互換性: v1.0.0はformat version 1を書き出し、v0.2.0〜v0.8.0で作成したversion 0画像も読み込めます。

制限・注意点

  • 1回に埋め込めるのは1ファイルで、元ファイルは最大32 MiBです。実際に埋め込める容量は元画像の大きさと完全に不透明な画素数、圧縮後サイズによって変わります。
  • 出力はPNGのみです。生成PNGをリサイズ、トリミング、フィルター処理、スクリーンショット化、JPEG・非可逆WebPへ変換すると、埋め込みデータが壊れる可能性があります。
  • SNSやメッセージアプリが画像を再圧縮・変換すると復元できなくなる場合があります。生成PNGは編集せず、そのまま保管・受け渡ししてください。
  • 適応埋め込みは1bitのRGB変化を高ディテール領域へ分散するための処理です。画像編集への耐性や、埋め込みデータが検出不能であることを保証しません。
  • 高解像度画像ではCanvas / ImageDataやWorker処理で端末メモリを多く使用する場合があります。
  • GZIP復元にはDecompressionStream、パスワード保護にはWeb Crypto、適応画像処理にはBlob Web Workerが必要です。利用できないブラウザ機能によって一部処理が制限されます。

よくある質問

どんなファイルを画像へ埋め込めますか?

ファイル形式は問いません。1回につき1ファイル、最大32 MiBまでです。ただし実際に収まるかどうかは元画像の利用可能な不透明RGB画素と、GZIPを含む実際の保存サイズで決まります。

元画像はどの形式を使えますか?

PNG / JPEG / WebPを元画像として読み込めます。埋め込み後の出力はPNGです。

パスワードを付けられますか?

はい。任意でパスワード保護を有効にできます。新しい出力ではPBKDF2-HMAC-SHA-256とAES-256-GCMを使い、元ファイル名を含む埋め込みデータを保護します。

生成したPNGを圧縮・リサイズしても取り出せますか?

保証できません。画素の下位bitへデータを埋め込むため、リサイズ、トリミング、画像編集、JPEG変換、非可逆WebP変換、再圧縮などでデータが壊れる可能性があります。生成PNGは編集せずそのまま保存してください。

生成したPNGが本当に復元できるか保存前に確認されますか?

はい。生成PNGをもう一度読み込み、通常の取り出し処理を通して復元し、SHA-256、ファイル名、MIME、byte長が一致した場合だけ保存できます。

画像や埋め込むファイルはサーバーへ送られますか?

いいえ。Web版では最初にアプリ本体のHTMLを取得しますが、その後の画像読込、圧縮、暗号化、埋め込み、復元確認、取り出しはブラウザ内で行い、ユーザーファイルをBrowser Kittyへ送信しません。

オフライン版・ソースコード

GitHub Pagesで公開されているdist/index.htmlは、アプリのコードを内包した単一HTMLとして生成されます。保存したHTMLを対応ブラウザでfile://から直接開けば、画像読込、GZIP、任意のパスワード保護、適応埋め込み、生成PNGの復元確認、ファイル取り出しを実行時の外部通信なしで利用できます。

GitHubでソースを見る