Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
jdvrif — JPG画像向けステガノグラフィツール | Kitploit
ツール/GitHubGitHub/cleasbycode/jdvrif
暗号化/復号化ツールデータ流出フォレンジックステガノグラフィー暗号化プライバシー
GitHubcleasbycode/jdvrif

jdvrif

JPG画像向けステガノグラフィツール

リポジトリを見る
691355日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
# jdvrif

***jdvrif*** (*JPG Data Vehicle*) は、**JPG** 画像を介してあらゆるファイルタイプを隠蔽・抽出するための、高速で使いやすいステガノグラフィー用コマンドラインツールです。***Linux 専用***です。

データファイルは ***libdeflate/zlib*** で圧縮され、次にランダムに生成された ***リカバリー PIN*** から ***Argon2id*** で導出された鍵の下で ***XChaCha20-Poly1305*** (***libsodium*** secretstream) により暗号化され、最後にカバー画像に埋め込まれます。PIN は ***conceal*** の最後に一度だけ表示され、どこにも保存されません。PIN がなければ、隠蔽されたファイルを復元することはできません。

***デフォルトの conceal モード***を使用すると、あらゆるファイルタイプを隠蔽でき、完成した画像は最大 ***2GiB*** に制限されます。その他のプラットフォーム向け conceal モードや、対応するソーシャルメディアサイト (*以下に記載*) には、それぞれ独自の ***はるかに小さい*** サイズ制限やその他の要件があります。

***jdvrif*** には [***Web 版***](https://cleasbycode.co.uk/jdvrif/app/) があり、CLI ソースコードをダウンロードしてコンパイルする代わりに、すぐに使用できる便利な選択肢として利用できます。Web でのファイルアップロードは **20MiB** に制限されています。

この言語に興味がある方向けに、実験的な ***Rust*** 移植版 [***jdvrif-rs***](https://github.com/CleasbyCode/jdvrif-rs) も利用可能です。フォーマット互換性があり、どちらのビルドでも相手側の画像を復元できます。

***jdvrif*** は、セキュリティ研究者 ***[David Buchanan](https://www.da.vidbuchanan.co.uk/)*** によって ***[実装された手法](https://www.vice.com/en/article/bj4wxm/tiny-picture-twitter-complete-works-of-shakespeare-steganography)*** に部分的に由来しています。

![Demo Image](https://raw.githubusercontent.com/CleasbyCode/jdvrif/main/demo_image/jrif_043b7c551.jpg)  
*デモ画像: **「隠蔽の場所」** / ***PIN: 7912872750612437051****

## jdvrif がデータを隠蔽する仕組み

カバー画像のピクセル内にデータを隠蔽する一般的な [***LSB***](https://ctf101.org/forensics/what-is-stegonagraphy/) (*最下位ビット*) ステガノグラフィー手法とは異なり、***jdvrif*** は主に ***JPG*** 画像の ***アプリケーションセグメント*** (ICC、EXIF、XMP など) 内にデータを隠します。

| Conceal モード | データの格納先 | 出力画像の共有先 |
| --- | --- | --- |
| *(オプションなし)* | APP2/ICC プロファイルセグメント | X-Twitter、Tumblr、Mastodon、Pixelfed、PostImage、ImgBB、ImgPile、Flickr |
| ***-b*** | フレーム化された EXIF / Photoshop / XMP セグメント | ***Bluesky*** のみ |
| ***-r*** | JPEG DCT 係数 (***QIM***) | ***Reddit*** のみ |
| ***-x*** | JPEG DCT 係数 (***J-UNIWARD/STC***) | ***X-Twitter*** のみ |

デフォルトのセグメント格納方式に対する 2 つのプラットフォーム例外は ***Reddit*** と ***X-Twitter*** です。どちらも独自の conceal モードを持ち、これらのモードはいずれもメタデータセグメントをまったく使用しません。***-r*** と ***-x*** は代わりに ***JPG*** 画像の DCT 係数にペイロードを格納します。

***Reddit*** はアップロードされた画像を再エンコードし、デフォルトモードが依存するメタデータセグメントを破棄するため、***-r*** がそこでは唯一機能するモードです。***X-Twitter*** は単一の小さな ICC セグメントを保持するため、デフォルトモードはそのプラットフォームでも引き続き機能しますが、ごく小さなペイロードに限られます。

***Reddit*** 向け conceal モード (***-r***) では、[***QIM ステガノグラフィー手法***](https://www.google.com/search?q=QIM+steganography+method&sourceid=chrome&ie=UTF-8&source=chrome.ctxt) (*JPEG DCT ドメイン量子化インデックス変調*) を使用します。これは現在 ***Reddit*** で機能する唯一の格納方式であるためです。カバーはベースライン Q75 4:2:0 にトランスコードされ、ペイロードはその輝度 DCT ブロックに格納されます。

***Reddit*** プラットフォーム向けにストレージ容量を最大化するには、大きな寸法のカバー画像 (**2048x2048**、**4096x4096**、**8192x8192 (最大)** など) を使用してください。

この手法ではカバー画像の品質は重要ではなく、カバー画像のファイルサイズを最小化するために、最大寸法では基本的な品質に保つべきです。

***X-Twitter*** プラットフォームは、データが APP2/ICC セグメント内に隠蔽される ***jdvrif*** のデフォルト方式を使用できますが、***X-Twitter*** はこれを最大サイズがわずか **~10KiB** の単一 ICC セグメントに制限します。

**~10KiB** を超えるデータを格納するには、***X-Twitter*** プラットフォーム隠蔽モード (***-x***) を使用します。このモードはメタデータセグメントを完全に放棄し、ICC プロファイルには何も書き込まず、代わりに [***Syndrome-Trellis Coding (STC) を用いた適応型 J-UNIWARD ステガノグラフィ手法***](https://www.google.com/search?q=adaptive+J-UNIWARD+steganography+method+with+Syndrome-Trellis+Coding+(STC)) を使用します。カバー画像は、そのソース由来の品質 (**Q97** を上限とする) でプログレッシブ 4:2:0 にトランスコードされます。

***X-Twitter*** プラットフォーム向けにストレージ容量を最大化するには、大きな寸法サイズ (**1024x1024**、**2048x2048**、**4096x4096 (最大)** など) を持つ高品質で詳細なカバー画像を使用してください。

***-r*** および ***-x*** キャリアはデータを暗号化し、その位置を ***Argon2id*** を用いてリカバリ PIN にキー付けしますが、埋め込みは依然として画像の DCT 統計を変化させるため、専用のステガナリシスによって画像が隠しデータを運んでいることが明らかになる可能性があります。

***jdvrif v9.0*** で作成された ***-r*** および ***-x*** 画像は引き続き復元可能ですが、***v9.0*** は ***v9.1*** で作成された ***-r*** または ***-x*** 画像を復元できません。

両方の DCT モードはデフォルトモードよりもはるかに少ないデータしか運べないため、ペイロードを選択する前に ***capsize*** を使用してカバー画像を測定してください ([容量の確認](#checking-capacity-with-capsize) を参照)。

## 要件とコンパイル (Linux)

ビルドには **CMake 3.20 以降**、**util-linux** の `flock`、および **Ninja** (推奨) または **Make** のいずれかが必要です。コンパイラは **GCC 14 以降**、または `std::format` や `std::print` などの機能を実装した C++23 標準ライブラリと組み合わせた **Clang 18 以降**である必要があります。必要なネイティブライブラリは **libsodium**、**libjpeg-turbo** (*`turbojpeg` と `libjpeg` の両方の API*)、**zlib**、**libdeflate** です。**OpenMP** はオプションです。存在する場合、***-x*** J-UNIWARD コストパスを並列化します。

```console
$ sudo apt update
$ sudo apt install g++ cmake ninja-build util-linux libsodium-dev libturbojpeg0-dev libjpeg-dev zlib1g-dev libdeflate-dev

$ g++ --version   # confirm the reported version is 14 or newer

$ chmod +x compile_jdvrif.sh
$ ./compile_jdvrif.sh

$ sudo cp jdvrif /usr/bin
```

ディストリビューションが GCC 14 をバージョン付きパッケージとして提供している場合は、`g++-14` をインストールし、`CXX=g++-14 ./compile_jdvrif.sh` でビルドしてください。

このラッパーは依存関係を追跡したオブジェクトファイルを `src/build/` 配下に保持するため、以降の呼び出しでは変更された部分のみが再ビルドされ、公開済みの `jdvrif` バイナリは完全かつ成功したビルドの後にのみ置き換えられます。並列度の上限を変更するには `JDVRIF_JOBS=<count>` を設定し(デフォルト: CPU 数、最大 8)、別のビルドキャッシュを使用するには `JDVRIF_BUILD_DIR=<path>` を設定するか、ASan/UBSan ビルドには `BUILD_MODE=sanitize` を設定してください。

## 使用方法

```console
$ jdvrif

Usage: jdvrif conceal [-b|-r|-x] <cover_image> <secret_file>
       jdvrif recover <cover_image>
       jdvrif capsize [-r|-x] <cover_image>
       jdvrif --info
```

`jdvrif --info` を実行すると、モード、プラットフォームオプション、サイズ制限に関する完全な組み込みガイドが表示されます。

```console
$ jdvrif conceal your_cover_image.jpg your_secret_file.doc

Platform compatibility for output image:-

 ✓ X-Twitter
 ✓ Tumblr
 ✓ Mastodon
 ✓ Pixelfed
 ✓ PostImage
 ✓ ImgBB
 ✓ ImgPile
 ✓ Flickr

Recovery PIN: [***2166776980318349924***]

Important: Keep your PIN safe, so that you can extract the hidden file.


Saved "file-embedded" JPG image: jrif_4e87c566c.jpg (143029 bytes).

Complete!

$ jdvrif recover jrif_4e87c566c.jpg

PIN: *******************

Extracted hidden file: your_secret_file.doc (6165 bytes).

Complete! Please check your file.

```

jdvrif ***mode*** 引数:

  ***conceal*** - 秘密データファイルを圧縮・暗号化し、***JPG*** カバー画像内に埋め込みます。  
  ***recover*** - ***JPG*** カバー画像から隠蔽されたデータファイルを復号・解凍・抽出します(*復元 PIN が必要*)。  
  ***capsize*** - ***-r*** または ***-x*** モードにおけるカバー画像の収容容量を報告します。画像は保存されません。

カバー画像の要件:

● JPEG のみ、最低 **400x400** ピクセル、グレースケールまたは YCbCr カラーのいずれか — CMYK/YCCK 画像は事前に RGB へ変換する必要があります。

● デフォルトおよび ***-b*** の上限寸法は **4096x4096px** です。***-r*** は **8192x8192px** を使用し、***-x*** も **4096x4096px** に制限されます。

● デフォルトモード(*オプションなし*)では、推定 JPEG 品質が **Q97** を超えるカバー画像も拒否されます。拒否された場合は、より低い品質で画像を再保存してください。

秘密データファイルの要件:

● 埋め込まれるファイル名は **20 バイト**以内でなければならず、`.` または `-` で始まること、スペースまたは `.` で終わることはできません。また、制御文字や双方向書式文字、`/ \ : * ? " < > |` のいずれも含まない有効な UTF-8 である必要があります。名前は画像内に保存され、***recover*** 時に復元されます。

● データファイルは暗号化前に圧縮されますが、既に圧縮済みと認識されるファイル形式(`.zip`、`.7z`、`.mp4`、`.jpg`、`.png` など)は除きます。デフォルトおよび ***-b*** モードでは、これらの形式は **10MiB** より大きい場合にのみ圧縮をスキップします。***-r*** および ***-x*** モードでは常にスキップします。小さいプラットフォームの制限に合わせて送るその他のファイルについては、保存後の正確なサイズを把握できるよう、事前に自身で圧縮することを検討してください(*zip、rar、7z など*)。

## 対応プラットフォーム

\******************   
注: ***Bluesky*** は現在、画像をデフォルトで ***WEBP*** として保存します。 

***jdvrif*** で隠蔽データを引き続き復元できるよう、画像を ***JPG*** として保存するには:  

まず投稿内の画像をクリックして開き、その画像を右クリックします。メニューから ***新しいタブで画像を開く*** を選択します。  

新しいタブを選択し、アドレスバー内でアドレスの末尾に移動して ***@jpg*** を追加し、Enter キーを押します。  
画像を右クリックし、メニューから ***画像を保存...*** を選択します。  

これで画像が ***JPG*** としてダウンロードされ、***jdvrif*** で動作するようになります。
         
***Bluesky*** に投稿するために ***WEBP*** 画像を使ってデータを隠蔽するツールが必要な場合は、私の ***WEBP*** ステガノグラフィ CLI ツール ***[wbpdv](https://github.com/CleasbyCode/wbpdv)*** を使用できます。  
\******************

*投稿サイズ制限は、***カバー画像*** + ***圧縮データファイル*** の ***合計*** サイズで測定されます:*  

● ***Flickr***(**200MiB**)、***ImgPile***(**100MiB**)、***ImgBB***(**32MiB**)、***PostImage***(**32MiB**)、***Pixelfed***(**15MiB**)。

*サイズ制限は ***圧縮データファイルのサイズのみ*** で測定されます:*  

● ***Mastodon*** (**~6MiB**)、***Tumblr*** (**~64KiB**)、***X-Twitter*** (**~10KiB / デフォルト方式**)。  

例えば ***Mastodon*** では、カバー画像が **1MiB** であっても、**~6MiB** のサイズ制限までデータファイルを埋め込むことができます。

**その他: 独自の conceal モードを持つプラットフォーム:**

● ***Bluesky*** (***-b オプション***)。完成した「*ファイル埋め込み済み*」の ***JPG*** は **2,000,000 バイト (~1.9MiB)** を超えてはならないため、カバー画像と圧縮データファイルは一つの予算を共有します。圧縮データファイル単体は **~171KiB** を超えてはなりません。既に 2,000,000 バイトのカバー画像では余地が全く残らないため、カバー画像は少なくとも圧縮データファイルのサイズ分だけ制限より小さく保ってください。これらの画像を ***Bluesky*** に投稿するには「***create_bsky_post.py***」スクリプトが必要です。*このスクリプトの詳細はページのさらに下にあります。*

● ***Reddit*** (***-r オプション***)。カバー画像とデータファイルはそれぞれ **20MiB** 以下でなければなりませんが、カバー画像の実際の収容容量は***はるかに小さく***、その寸法サイズに依存します。`jdvrif capsize -r` を使用して測定してください。

● ***X-Twitter***(***-x オプション***)。カバー画像とデータファイルはそれぞれ **5MiB** 以下である必要があり、カバーは **4096x4096** ピクセルを超えてはなりません。実際のキャリア容量は***はるかに小さく***、画像の品質と寸法サイズに依存します。`jdvrif capsize -x` を使用して測定してください。

デフォルトモードおよび ***-b*** モードでは、カバー画像は使用前に可逆圧縮で最適化され、そのステップ後に **4MiB** を超えてはなりません。

***X-Twitter***、***Reddit***、***Tumblr*** などデータサイズの上限が小さいプラットフォームでは、テキストファイルなど圧縮効率の良いデータに絞ることをお勧めします。

https://github.com/user-attachments/assets/af330d09-f65d-4f75-8290-883078be34b3

https://github.com/user-attachments/assets/fc454d42-0240-4864-b44b-ce5ef7cfd94c

## capsize で容量を確認する

***capsize*** は ***conceal*** とまったく同じようにカバー画像を準備し、その後、暗号化されたペイロードをどれだけ格納できるかを報告します。ディスクには何も書き込まれません。***Reddit*** キャリアには ***-r*** を、***X-Twitter*** キャリアには ***-x*** を使用します(オプションを指定しない場合、***-x*** がデフォルトです)。

```console
$ jdvrif capsize -r basic_img_large_dims.jpg

Reddit capacity check for conceal -r mode only.

Cover Image: 384KiB, 8192x8192, Baseline YCbCr 4:2:0, Standard Q75 quantization (C3).

Theoretical C3 capacity limit for this cover image:                    436906 bytes (~426KiB).
Conservative maximum compressed capacity with a 20-character filename: 436792 bytes (~426KiB).
Recommended  maximum compressed capacity with a 20-character filename: 435768 bytes (~425KiB).
```

報告されている数値は、暗号化された***エンベロープ***の総容量であり、生の秘密ファイルの上限ではありません。ファイル名、暗号化、復元メタデータが単一フレームのペイロードで95〜114バイトを消費し、より大きなペイロードではフレーミングのオーバーヘッドが加わります。理論上の限界を狙わず、容量が許す範囲で、圧縮済みペイロードを保守的な最大値より少なくとも**1KiB**下に保ってください。***conceal*** が実行するサイズチェックが正式な判定基準です。

## Concealモードのプラットフォームオプション

***Reddit*** プラットフォームに投稿するための互換性のある「*データ隠蔽*」***JPG*** 画像を作成するには、***conceal*** モードで ***-r*** オプションを使用する必要があります。
  ```console
  $ jdvrif conceal -r my_image.jpg hidden.doc
```

  これらの画像は***Reddit***への投稿にのみ互換性があります。別のプラットフォームに投稿すると、埋め込まれたデータファイルは失われます。  
  
***Reddit***から画像を保存/ダウンロードする際は、保存する前に投稿内の画像をクリックして完全に展開してください。  

https://github.com/user-attachments/assets/ead3c34c-dd9a-4018-9ea3-0746fbdfdb8b

J-UNIWARDステガノグラフィ手法を使用して、***X-Twitter***プラットフォームへの投稿用に互換性のある「*data-concealed*」***JPG***画像を作成するには、***conceal***モードで***-x***オプションを使用する必要があります。
  ```console
  $ jdvrif conceal -x my_image.jpg hidden.doc
```

  これらの画像は ***X-Twitter*** への投稿にのみ対応しています。別のプラットフォームに投稿すると、埋め込まれたデータファイルは失われます。  
  
  ***X-Twitter*** から画像を保存/ダウンロードする際は、保存する前に投稿内の画像をクリックして完全に展開してください。  

***Bluesky*** プラットフォームへの投稿に対応した「*file-embedded*」***JPG*** 画像を作成するには、***conceal*** モードで ***-b*** オプションを使用する必要があります。
  ```console
  $ jdvrif conceal -b my_image.jpg hidden.doc
```

  これらの画像は ***Bluesky*** への投稿にのみ対応しています。別のプラットフォームに投稿した場合、埋め込まれたデータファイルは削除されます。
 
  また、画像を ***Bluesky*** に投稿するには、Python スクリプト [create_bsky_post.py](https://github.com/CleasbyCode/jdvrif/blob/main/src/bsky/create_bsky_post.py)(リポジトリの ***src/bsky*** フォルダにあります)を使用する必要があります。
  ブラウザサイトやモバイルアプリ経由で ***Bluesky*** に画像を投稿しても動作しません。  

  このスクリプトを使用するには、***Bluesky*** アカウントで [***app password***](https://bsky.app/settings/app-passwords) を作成する必要があります。認証情報は、`ps` などのツールを通じて他のローカルユーザーに表示される可能性があるコマンドライン上ではなく、環境変数を介して渡してください:

  ```console
  $ pip install -r bsky/requirements.txt

  $ export ATP_AUTH_HANDLE='you.bsky.social'
  $ read -rsp 'Bluesky app password: ' ATP_AUTH_PASSWORD && export ATP_AUTH_PASSWORD

  $ python3 bsky/create_bsky_post.py \
      --image jrif_4e87c566c.jpg \
      --alt-text "alt-text here [optional]" \
      "standard post text here [required]"

  $ unset ATP_AUTH_PASSWORD
```

  完全なオプションセット(*複数画像、返信、引用投稿、リンクカード*)と、スクリプトの堅牢化フォークが何から保護するかについては、[src/bsky/README.md](https://github.com/CleasbyCode/jdvrif/blob/main/src/bsky/README.md) を参照してください。

https://github.com/user-attachments/assets/1daef508-d304-491f-bfe2-2cdbb5d62081

## テスト

`src/tests` 内のテストスクリプトは、それぞれ実行対象のバイナリを引数として受け取ります:

```console
$ bash tests/run_golden_tests.sh --bin ./jdvrif        # recover pre-built images with known PINs
$ bash tests/run_roundtrip_tests.sh --bin ./jdvrif     # fresh conceal/recover round-trips
$ bash tests/run_security_smoke.sh --bin ./jdvrif      # negative-path and boundary checks
$ bash tests/run_reddit_tests.sh --bin ./jdvrif        # -r QIM carrier
$ bash tests/run_twitter_tests.sh --bin ./jdvrif       # -x J-UNIWARD/STC carrier
$ bash tests/run_io_security_tests.sh --bin ./jdvrif   # input-size bounds, PIN signal/job-control handling
$ bash tests/run_jpeg_safety_tests.sh                  # JPEG parser/decoder safety (builds its own test binary)
$ bash tests/run_bsky_tests.sh                         # Bluesky posting helper
```

## サードパーティ製ソフトウェアおよびアセット

  ### コアアプリケーション

  - [libsodium](https://github.com/jedisct1/libsodium) — 暗号学的乱数生成、Argon2id
  鍵導出、およびXChaCha20-Poly1305秘密ストリーム。システムライブラリとして動的にリンクされます。
      
      ライセンス: [ISC License](https://github.com/jedisct1/libsodium/blob/master/LICENSE)
    
      著作権 (c) 2013–2026 Frank Denis。
    
 - [libjpeg-turbo](https://github.com/libjpeg-turbo/libjpeg-turbo) — JPEG処理および可逆変換。システムライブラリとして動的にリンクされます。

      本ソフトウェアは、Independent JPEG Groupの成果の一部に基づいています。

      ライセンス: [Independent JPEG Group License、Modified BSD 3-Clause License、
      およびzlib License](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/2.1.5/LICENSE.md)。

      著作権 © 1991–2020 Thomas G. Lane および Guido Vollbeding。
   
      著作権 © 2009–2023 D. R. Commander。All Rights Reserved。
   
      著作権 © 2015 Viktor Szathmáry。All Rights Reserved。
   
  - [zlib](https://github.com/madler/zlib) — ストリーミングzlib圧縮および伸張。システムライブラリとして動的にリンクされます。

    ライセンス: [zlib License](https://github.com/madler/zlib/blob/develop/LICENSE)
    
    著作権 (C) 1995–2026 Jean-loup Gailly および Mark Adler。

  - [libdeflate](https://github.com/ebiggers/libdeflate) — 高速なバッファ全体のzlib形式圧縮。システムライブラリとして動的にリンクされます。

    ライセンス: [MIT](https://github.com/ebiggers/libdeflate/blob/master/COPYING)
    
    著作権 2016 Eric Biggers。
    
    著作権 2024 Google LLC。

  ### 組み込みコードおよびアセット

  - [Compact ICC Profiles](https://github.com/saucecontrol/Compact-ICC-Profiles) — 埋め込みのAdobe互換
  ICCプロファイル。

    ライセンス: [CC0 1.0 Universal](https://github.com/saucecontrol/Compact-ICC-Profiles/blob/master/license)

  ### オプションのBluesky投稿ヘルパー

  - Bryan Newbold / ATProto Hacker Cookbook — create_bsky_post.py — [フォークした](https://gist.github.com/CleasbyCode/1eb678ca1fa1975b1c1e20aeec33637e) Bluesky投稿ヘルパー(src/bsky/create_bsky_post.py)の基礎。
    参考として[Cookbookのコピー](https://github.com/bluesky-social/cookbook/blob/main/python-bsky-post/create_bsky_post.py)を参照してください。

    ライセンス: [CC0 1.0 Universal](https://github.com/bluesky-social/cookbook/blob/main/LICENSE-CC0)。

  - Requests — HTTPおよびBluesky APIリクエスト。

    ライセンス: [Apache 2.0](https://github.com/psf/requests/blob/main/LICENSE) / [NOTICE](https://github.com/psf/requests/blob/main/NOTICE)
    
    著作権 2019 Kenneth Reitz。

  - Beautiful Soup 4 — HTML および Open Graph メタデータの解析。

    ライセンス: [MIT](https://pypi.org/project/beautifulsoup4/)
    
    著作権 (c) Leonard Richardson。

  - Pillow — 画像の検証、寸法、およびアスペクト比の処理。

    ライセンス: [MIT-CMU](https://github.com/python-pillow/Pillow/blob/main/LICENSE)
    
    PILの著作権 © 1997–2011 Secret Labs AB および © 1995–2011 Fredrik Lundh ならびに貢献者。
    
    Pillowの著作権 © 2010 Jeffrey “Alex” Clark ならびに貢献者。
    
##
ツールをダウンロード