A CLI tool to resize images to a target file size.
Project description
ImgByteSizer
ImgByteSizer is a command-line tool that precisely resizes and optimizes images to match a specific file size while maintaining the best possible quality.
Features
- ๐ฏ Resize images to an exact target file size
- ๐ผ๏ธ Maintains aspect ratio during resizing
- ๐ Intelligent quality optimization with binary search
- ๐ Format conversion (JPEG, PNG, WebP)
- ๐ Minimum dimension constraints
- ๐จ Beautiful terminal output with progress indicators
- ๐ Detailed comparison of original vs. processed images
Installation
pip install imgbytesizer
Usage
imgbytesizer image.jpg 500KB
Basic Examples
# Resize an image to 500KB
imgbytesizer large_photo.jpg 500KB
# Resize and convert to WebP format
imgbytesizer image.png 1MB -f webp
# Specify output file path
imgbytesizer photo.jpg 1MB -o compressed_photo.jpg
# Ensure minimum dimension is at least 400px
imgbytesizer large_image.jpg 300KB --min-dimension 400
Command-Line Options
usage: imgbytesizer [-h] [-o OUTPUT] [-f {jpg,jpeg,png,webp}] [--min-dimension MIN_DIMENSION] [--no-exact] [-v] [--debug] [-q] [image_path] [target_size]
Resize an image to match a target file size
positional arguments:
image_path Path to the input image
target_size Target file size (e.g., "1MB", "500KB")
options:
-h, --help show this help message and exit
-o, --output OUTPUT Output path (default: input_resized.ext)
-f, --format {jpg,jpeg,png,webp}
Output format
--min-dimension MIN_DIMENSION
Minimum width/height in pixels
--no-exact Do not pad file to get exact target size
-v, --version Show version information
--debug Enable debug logging
-q, --quiet Minimal output
How It Works
ImgByteSizer uses binary search algorithms to efficiently find the optimal combination of image dimensions and compression quality to match your target file size:
- First attempts to adjust quality without resizing (for formats that support quality settings)
- If quality adjustment alone isn't sufficient, performs binary search for optimal dimensions
- Fine-tunes with an additional quality optimization pass
- Adds minimal padding if necessary to hit the exact target size
The tool prioritizes maintaining the highest possible quality while meeting the target size constraint.
Example Output
โฏ imgbytesizer image.png 1MB -f webp
โ Opening image.png
File: image.png
Format: WEBP
Dimensions: 1024 ร 1024 pixels
Size: 1.95 MB
Target size: 1.00 MB
Trying quality adjustment without resizing...
Testing quality 100 |โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 58% Size: 476.46 KB
โ Found optimal quality: 100 (size: 476.46 KB)
Trying combined scaling and quality approach...
Trying scale factor 1.00 (1024ร1024)...
Quality 100 |โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 100% Size: 476.46 KB
Trying scale factor 1.25 (1280ร1280)...
Quality 100 |โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 100% Size: 680.51 KB
Trying scale factor 1.50 (1536ร1536)...
Quality 100 |โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 100% Size: 903.38 KB
Trying scale factor 2.00 (2048ร2048)...
Quality 96 |โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| 100% Size: 1011.68 KB
โ Combined approach success: scale=2.00, size=1011.68 KB
Adjusting to exact target size...
โ Adjusted to exact size: 1.00 MB
โญโโโโโโโโโโโโโโฌโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโฎ
โ Metric โ Original โ Processed โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Dimensions โ 1024ร1024 โ 2048ร2048 โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Size โ 1.95 MB โ 1.00 MB โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Target Size โ โ 1.00 MB โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Difference โ โ 0 B (0.0%) โ
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโค
โ Reduction โ โ 48.8% smaller โ
โฐโโโโโโโโโโโโโโดโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโฏ
Time taken: 28.12 seconds
Output file: image_resized.webp
Real Use Cases
Web Development
# Create images that won't exceed page weight budget
imgbytesizer hero.jpg 200KB --min-dimension 1200
imgbytesizer background.png 100KB -f webp
Email Attachments
# Shrink images to fit email attachment limits
imgbytesizer family_photo.jpg 5MB
Social Media Uploads
# Optimize images for social media platforms with size limits
imgbytesizer profile_pic.jpg 400KB --min-dimension 400
Requirements
- Python 3.9+
- Dependencies:
- Pillow >= 11.0.0
- tabulate >= 0.9.0
Contributing
Contributions are welcome! Feel free to submit issues or pull requests.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file imgbytesizer-0.2.2.tar.gz.
File metadata
- Download URL: imgbytesizer-0.2.2.tar.gz
- Upload date:
- Size: 16.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c217847c9befa46ead1732f452c1291a856bb43c02b9c55775b0384235530850
|
|
| MD5 |
6a3b67f06ce20c0919aa0125940fd1b4
|
|
| BLAKE2b-256 |
79f9c3f416106ea005423332ce9f1dbb93a4307e305d467f80eeabfcdca3df97
|
File details
Details for the file imgbytesizer-0.2.2-py3-none-any.whl.
File metadata
- Download URL: imgbytesizer-0.2.2-py3-none-any.whl
- Upload date:
- Size: 14.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f7446ba4b73000ab4e8b15c0880543bc1f947d9bf29c68052511ef473255fae
|
|
| MD5 |
92b423cd1c8712a2649fc649555ccd67
|
|
| BLAKE2b-256 |
2f1c8e6091eaafda75d456533397c1732d3624e913ca4994d85e44a7650386b2
|