Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
jdvrif — JPG 이미지용 스테가노그래피 도구 | Kitploit
도구/GitHubGitHub/cleasbycode/jdvrif
Encryption/Decryption ToolsData ExfiltrationForensicsSteganographyCryptographyPrivacy
GitHubcleasbycode/jdvrif

jdvrif

JPG 이미지용 스테가노그래피 도구

저장소 보기
691353일 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
# jdvrif

***jdvrif***(*JPG Data Vehicle*)는 **JPG** 이미지를 통해 모든 파일 형식을 은닉하고 추출할 수 있는 빠르고 사용하기 쉬운 스테가노그래피 명령줄 도구입니다. ***Linux 전용***입니다.

데이터 파일은 ***libdeflate/zlib***로 압축된 후, 무작위로 생성된 ***복구 PIN***에서 ***Argon2id***로 파생된 키 아래 ***XChaCha20-Poly1305***(***libsodium*** secretstream)로 암호화되며, 최종적으로 커버 이미지에 삽입됩니다. PIN은 ***conceal*** 작업이 끝날 때 한 번만 표시되며 어디에도 저장되지 않습니다. PIN 없이는 은닉된 파일을 복구할 수 없습니다.

***기본 conceal 모드***를 사용하면 모든 파일 형식을 은닉할 수 있으며, 완성된 이미지는 최대 ***2GiB***로 제한됩니다. 다른 플랫폼 conceal 모드와 호환되는 소셜 미디어 사이트(*아래 나열*)는 각각 ***훨씬 더 작은*** 크기 제한과 기타 요구 사항이 있습니다.

***jdvrif***의 [***웹 에디션***](https://cleasbycode.co.uk/jdvrif/app/)이 있어 CLI 소스 코드를 다운로드하고 컴파일하는 대신 즉시 편리하게 사용할 수 있습니다. 웹 파일 업로드는 **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)  
*데모 이미지: **"A place of concealment"** / ***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*** 전용 |

기본 세그먼트 저장 방식에 대한 두 가지 플랫폼 예외는 ***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).
```

보고된 수치는 총 암호화된 ***envelope*** 용량이며, 원시 비밀 파일 한도가 아닙니다. 파일 이름, 암호화 및 복구 메타데이터가 단일 프레임 페이로드에 대해 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*** 플랫폼에 게시할 수 있는 호환되는 "*파일 임베디드*" ***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*** 계정에서 [***앱 비밀번호***](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)
    
      Copyright (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,
      and zlib License](https://github.com/libjpeg-turbo/libjpeg-turbo/blob/2.1.5/LICENSE.md).

      Copyright © 1991–2020 Thomas G. Lane and Guido Vollbeding.
   
      Copyright © 2009–2023 D. R. Commander. All Rights Reserved.
   
      Copyright © 2015 Viktor Szathmáry. All Rights Reserved.
   
  - [zlib](https://github.com/madler/zlib) — 스트리밍 zlib 압축 및 압축 해제. 시스템 라이브러리로 동적 링크됩니다.

    라이선스: [zlib License](https://github.com/madler/zlib/blob/develop/LICENSE)
    
    Copyright (C) 1995–2026 Jean-loup Gailly and Mark Adler.

  - [libdeflate](https://github.com/ebiggers/libdeflate) — 빠른 전체 버퍼 zlib 형식 압축. 시스템 라이브러리로 동적 링크됩니다.

    라이선스: [MIT](https://github.com/ebiggers/libdeflate/blob/master/COPYING)
    
    Copyright 2016 Eric Biggers.
    
    Copyright 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)
    
    Copyright 2019 Kenneth Reitz.

  - Beautiful Soup 4 — penguraian metadata HTML dan Open Graph.

    라이선스: [MIT](https://pypi.org/project/beautifulsoup4/)
    
    Copyright (c) Leonard Richardson.

  - Pillow — 이미지 검증, 크기 및 종횡비 처리.

    라이선스: [MIT-CMU](https://github.com/python-pillow/Pillow/blob/main/LICENSE)
    
    PIL copyright © 1997–2011 Secret Labs AB and © 1995–2011 Fredrik Lundh and contributors.
    
    Pillow copyright © 2010 Jeffrey “Alex” Clark and contributors.
    
##
도구 다운로드