snapforge 2.1.0__tar.gz → 3.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- snapforge-3.0.0/PKG-INFO +206 -0
- snapforge-3.0.0/README.md +195 -0
- snapforge-3.0.0/dist_release/snapforge/__init__.py +13 -0
- snapforge-3.0.0/dist_release/snapforge/modules/__init__.py +3 -0
- snapforge-3.0.0/dist_release/snapforge/modules/effects.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge/modules/geometry.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge/modules/overlays.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge/utils/__init__.py +3 -0
- snapforge-3.0.0/dist_release/snapforge/utils/inspector.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge/utils/storage.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge/utils/updater.pyc +0 -0
- snapforge-3.0.0/dist_release/snapforge.egg-info/PKG-INFO +206 -0
- snapforge-3.0.0/dist_release/snapforge.egg-info/SOURCES.txt +16 -0
- snapforge-3.0.0/pyproject.toml +27 -0
- snapforge-2.1.0/PKG-INFO +0 -180
- snapforge-2.1.0/README.md +0 -169
- snapforge-2.1.0/pyproject.toml +0 -18
- snapforge-2.1.0/snapforge/__init__.py +0 -3
- snapforge-2.1.0/snapforge/forge.py +0 -359
- snapforge-2.1.0/snapforge.egg-info/PKG-INFO +0 -180
- snapforge-2.1.0/snapforge.egg-info/SOURCES.txt +0 -9
- {snapforge-2.1.0 → snapforge-3.0.0/dist_release}/snapforge.egg-info/dependency_links.txt +0 -0
- {snapforge-2.1.0 → snapforge-3.0.0/dist_release}/snapforge.egg-info/requires.txt +0 -0
- {snapforge-2.1.0 → snapforge-3.0.0/dist_release}/snapforge.egg-info/top_level.txt +0 -0
- {snapforge-2.1.0 → snapforge-3.0.0}/setup.cfg +0 -0
snapforge-3.0.0/PKG-INFO
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: snapforge
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: Powerful and fast image editor! 😎
|
|
5
|
+
Author: Ali.Shm
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: Pillow>=9.0.0
|
|
9
|
+
Requires-Dist: requests>=2.25.0
|
|
10
|
+
Requires-Dist: packaging>=20.0
|
|
11
|
+
|
|
12
|
+
# 📸 SnapForge
|
|
13
|
+
|
|
14
|
+
[](...)
|
|
15
|
+
[](...)
|
|
16
|
+
[](...)
|
|
17
|
+
[](...)
|
|
18
|
+
[](...)
|
|
19
|
+
|
|
20
|
+
> **Forge your images with a single chain of commands.**
|
|
21
|
+
|
|
22
|
+
A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
|
|
23
|
+
|
|
24
|
+
Perfect for resizing, filtering, enhancing and transforming images .
|
|
25
|
+
|
|
26
|
+
## ✨ Features
|
|
27
|
+
|
|
28
|
+
- 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
|
|
29
|
+
|
|
30
|
+
- 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
|
|
31
|
+
|
|
32
|
+
- 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
|
|
33
|
+
|
|
34
|
+
- 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
|
|
35
|
+
|
|
36
|
+
- 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
|
|
37
|
+
|
|
38
|
+
- 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
|
|
39
|
+
|
|
40
|
+
- ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
|
|
41
|
+
|
|
42
|
+
- 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
|
|
43
|
+
|
|
44
|
+
## 🔄 Professional Format Converter 🔄
|
|
45
|
+
Our Storage.convert Supports **more** than **8 Formats** :
|
|
46
|
+
JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## 📦 Installation
|
|
50
|
+
|
|
51
|
+
You can install SnapForge directly from PyPI using `pip`:
|
|
52
|
+
```bash
|
|
53
|
+
pip install snapforge
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 🚀 Quick Start
|
|
57
|
+
|
|
58
|
+
Here is a quick example to get you started with SnapForge:
|
|
59
|
+
```bash
|
|
60
|
+
from snapforge import Storage , Geometry
|
|
61
|
+
|
|
62
|
+
img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
|
|
63
|
+
img=Geometry.round_corners(img,40)
|
|
64
|
+
img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
# 📖 Available Modules
|
|
69
|
+
|
|
70
|
+
SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- 📐 **Geometry** — resizing, cropping, rotating and transforming
|
|
77
|
+
- 💾 **Storage** — loading, saving and format conversion
|
|
78
|
+
- 🔍 **Inspector** — metadata, histogram and color analysis
|
|
79
|
+
- 🎨 **Effects** — lighting and filters
|
|
80
|
+
- 🖼️ **Overlays** — text, watermark, borders and blending
|
|
81
|
+
- 🔄 **SnapForgeUpdater** — update checks and version comparison
|
|
82
|
+
|
|
83
|
+
# 📦 Available Methods
|
|
84
|
+
|
|
85
|
+
Here is the complete list of all available methods in each **snapforge** module:
|
|
86
|
+
|
|
87
|
+
### 📐 Geometry
|
|
88
|
+
|
|
89
|
+
| Method | Description | Example |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
|
|
92
|
+
| `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
|
|
93
|
+
| `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
|
|
94
|
+
| `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
|
|
95
|
+
| `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
|
|
96
|
+
| `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
|
|
97
|
+
| `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 💾 Storage
|
|
102
|
+
|
|
103
|
+
| Method | Description | Example |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
|
|
106
|
+
| `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
|
|
107
|
+
| `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
|
|
108
|
+
| `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 🔍 Inspector
|
|
113
|
+
|
|
114
|
+
| Method | Description | Example |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
|
|
117
|
+
| `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
|
|
118
|
+
| `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
|
|
119
|
+
| `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### 🎨 Effects (Lighting & Filters)
|
|
124
|
+
|
|
125
|
+
| Method | Description | Example |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
|
|
128
|
+
| `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
|
|
129
|
+
| `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
|
|
130
|
+
| `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
|
|
131
|
+
| `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
|
|
132
|
+
| `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
|
|
133
|
+
| `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
|
|
134
|
+
| `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
|
|
135
|
+
| `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
|
|
136
|
+
| `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
|
|
137
|
+
| `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🖼️ Overlays
|
|
142
|
+
|
|
143
|
+
| Method | Description | Example |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
|
|
146
|
+
| `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
|
|
147
|
+
| `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
|
|
148
|
+
| `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 🔄 SnapForgeUpdater
|
|
153
|
+
|
|
154
|
+
| Method | Description | Example |
|
|
155
|
+
| --- | --- | --- |
|
|
156
|
+
| `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
|
|
157
|
+
| `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
|
|
158
|
+
| `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
|
|
159
|
+
| `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
## 🛠️ Requirements
|
|
163
|
+
|
|
164
|
+
To use `SnapForge`, ensure you have the following installed:
|
|
165
|
+
|
|
166
|
+
* **Python:** 3.7 or higher
|
|
167
|
+
* **Dependencies:**
|
|
168
|
+
* `Pillow` (for image processing)
|
|
169
|
+
* `requests` (for automatic update checks)
|
|
170
|
+
* `packaging` (for version comparison logic)
|
|
171
|
+
|
|
172
|
+
## 🤝 Contributing
|
|
173
|
+
|
|
174
|
+
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
|
|
175
|
+
|
|
176
|
+
## 🌟 More Projects
|
|
177
|
+
|
|
178
|
+
If you enjoy SnapForge, you might also like this project ,too:
|
|
179
|
+
|
|
180
|
+
### PixSlim
|
|
181
|
+
|
|
182
|
+
A Python image and ... compression library focused on reducing file size while preserving quality.
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
## 📜 License
|
|
186
|
+
|
|
187
|
+
Distributed under the MIT License.
|
|
188
|
+
|
|
189
|
+
## ❤️ Support
|
|
190
|
+
|
|
191
|
+
If you find SnapForge useful, your support means a lot!
|
|
192
|
+
|
|
193
|
+
You can help by:
|
|
194
|
+
|
|
195
|
+
- 📦 Installing the package and trying it in your projects
|
|
196
|
+
- 📝 Sharing feedback and suggestions
|
|
197
|
+
- 🐛 Reporting bugs and improvements
|
|
198
|
+
- 🌟 Recommending SnapForge to other Python developers
|
|
199
|
+
|
|
200
|
+
🧩 Every piece of feedback helps make SnapForge better. 🙏
|
|
201
|
+
|
|
202
|
+
## 👤 Author
|
|
203
|
+
|
|
204
|
+
### Ali.Shm
|
|
205
|
+
|
|
206
|
+
**Project Maintainer**
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
# 📸 SnapForge
|
|
2
|
+
|
|
3
|
+
[](...)
|
|
4
|
+
[](...)
|
|
5
|
+
[](...)
|
|
6
|
+
[](...)
|
|
7
|
+
[](...)
|
|
8
|
+
|
|
9
|
+
> **Forge your images with a single chain of commands.**
|
|
10
|
+
|
|
11
|
+
A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
|
|
12
|
+
|
|
13
|
+
Perfect for resizing, filtering, enhancing and transforming images .
|
|
14
|
+
|
|
15
|
+
## ✨ Features
|
|
16
|
+
|
|
17
|
+
- 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
|
|
18
|
+
|
|
19
|
+
- 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
|
|
20
|
+
|
|
21
|
+
- 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
|
|
22
|
+
|
|
23
|
+
- 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
|
|
24
|
+
|
|
25
|
+
- 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
|
|
26
|
+
|
|
27
|
+
- 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
|
|
28
|
+
|
|
29
|
+
- ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
|
|
30
|
+
|
|
31
|
+
- 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
|
|
32
|
+
|
|
33
|
+
## 🔄 Professional Format Converter 🔄
|
|
34
|
+
Our Storage.convert Supports **more** than **8 Formats** :
|
|
35
|
+
JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
## 📦 Installation
|
|
39
|
+
|
|
40
|
+
You can install SnapForge directly from PyPI using `pip`:
|
|
41
|
+
```bash
|
|
42
|
+
pip install snapforge
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## 🚀 Quick Start
|
|
46
|
+
|
|
47
|
+
Here is a quick example to get you started with SnapForge:
|
|
48
|
+
```bash
|
|
49
|
+
from snapforge import Storage , Geometry
|
|
50
|
+
|
|
51
|
+
img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
|
|
52
|
+
img=Geometry.round_corners(img,40)
|
|
53
|
+
img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
# 📖 Available Modules
|
|
58
|
+
|
|
59
|
+
SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
|
|
60
|
+
|
|
61
|
+
```python
|
|
62
|
+
from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
- 📐 **Geometry** — resizing, cropping, rotating and transforming
|
|
66
|
+
- 💾 **Storage** — loading, saving and format conversion
|
|
67
|
+
- 🔍 **Inspector** — metadata, histogram and color analysis
|
|
68
|
+
- 🎨 **Effects** — lighting and filters
|
|
69
|
+
- 🖼️ **Overlays** — text, watermark, borders and blending
|
|
70
|
+
- 🔄 **SnapForgeUpdater** — update checks and version comparison
|
|
71
|
+
|
|
72
|
+
# 📦 Available Methods
|
|
73
|
+
|
|
74
|
+
Here is the complete list of all available methods in each **snapforge** module:
|
|
75
|
+
|
|
76
|
+
### 📐 Geometry
|
|
77
|
+
|
|
78
|
+
| Method | Description | Example |
|
|
79
|
+
| --- | --- | --- |
|
|
80
|
+
| `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
|
|
81
|
+
| `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
|
|
82
|
+
| `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
|
|
83
|
+
| `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
|
|
84
|
+
| `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
|
|
85
|
+
| `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
|
|
86
|
+
| `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### 💾 Storage
|
|
91
|
+
|
|
92
|
+
| Method | Description | Example |
|
|
93
|
+
| --- | --- | --- |
|
|
94
|
+
| `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
|
|
95
|
+
| `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
|
|
96
|
+
| `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
|
|
97
|
+
| `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 🔍 Inspector
|
|
102
|
+
|
|
103
|
+
| Method | Description | Example |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
|
|
106
|
+
| `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
|
|
107
|
+
| `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
|
|
108
|
+
| `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 🎨 Effects (Lighting & Filters)
|
|
113
|
+
|
|
114
|
+
| Method | Description | Example |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
|
|
117
|
+
| `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
|
|
118
|
+
| `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
|
|
119
|
+
| `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
|
|
120
|
+
| `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
|
|
121
|
+
| `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
|
|
122
|
+
| `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
|
|
123
|
+
| `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
|
|
124
|
+
| `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
|
|
125
|
+
| `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
|
|
126
|
+
| `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
### 🖼️ Overlays
|
|
131
|
+
|
|
132
|
+
| Method | Description | Example |
|
|
133
|
+
| --- | --- | --- |
|
|
134
|
+
| `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
|
|
135
|
+
| `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
|
|
136
|
+
| `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
|
|
137
|
+
| `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🔄 SnapForgeUpdater
|
|
142
|
+
|
|
143
|
+
| Method | Description | Example |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
|
|
146
|
+
| `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
|
|
147
|
+
| `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
|
|
148
|
+
| `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
## 🛠️ Requirements
|
|
152
|
+
|
|
153
|
+
To use `SnapForge`, ensure you have the following installed:
|
|
154
|
+
|
|
155
|
+
* **Python:** 3.7 or higher
|
|
156
|
+
* **Dependencies:**
|
|
157
|
+
* `Pillow` (for image processing)
|
|
158
|
+
* `requests` (for automatic update checks)
|
|
159
|
+
* `packaging` (for version comparison logic)
|
|
160
|
+
|
|
161
|
+
## 🤝 Contributing
|
|
162
|
+
|
|
163
|
+
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
|
|
164
|
+
|
|
165
|
+
## 🌟 More Projects
|
|
166
|
+
|
|
167
|
+
If you enjoy SnapForge, you might also like this project ,too:
|
|
168
|
+
|
|
169
|
+
### PixSlim
|
|
170
|
+
|
|
171
|
+
A Python image and ... compression library focused on reducing file size while preserving quality.
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
## 📜 License
|
|
175
|
+
|
|
176
|
+
Distributed under the MIT License.
|
|
177
|
+
|
|
178
|
+
## ❤️ Support
|
|
179
|
+
|
|
180
|
+
If you find SnapForge useful, your support means a lot!
|
|
181
|
+
|
|
182
|
+
You can help by:
|
|
183
|
+
|
|
184
|
+
- 📦 Installing the package and trying it in your projects
|
|
185
|
+
- 📝 Sharing feedback and suggestions
|
|
186
|
+
- 🐛 Reporting bugs and improvements
|
|
187
|
+
- 🌟 Recommending SnapForge to other Python developers
|
|
188
|
+
|
|
189
|
+
🧩 Every piece of feedback helps make SnapForge better. 🙏
|
|
190
|
+
|
|
191
|
+
## 👤 Author
|
|
192
|
+
|
|
193
|
+
### Ali.Shm
|
|
194
|
+
|
|
195
|
+
**Project Maintainer**
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# snapforge/__init__.py
|
|
2
|
+
|
|
3
|
+
from .modules.geometry import Geometry
|
|
4
|
+
from .modules.effects import Effects
|
|
5
|
+
from .modules.overlays import Overlays
|
|
6
|
+
from .utils.storage import Storage
|
|
7
|
+
from .utils.inspector import Inspector
|
|
8
|
+
from .utils.updater import SnapForgeUpdater
|
|
9
|
+
|
|
10
|
+
__version__ = "3.0.0"
|
|
11
|
+
|
|
12
|
+
updater = SnapForgeUpdater("snapforge", __version__)
|
|
13
|
+
updater.start_check()
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: snapforge
|
|
3
|
+
Version: 3.0.0
|
|
4
|
+
Summary: Powerful and fast image editor! 😎
|
|
5
|
+
Author: Ali.Shm
|
|
6
|
+
Requires-Python: >=3.7
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
Requires-Dist: Pillow>=9.0.0
|
|
9
|
+
Requires-Dist: requests>=2.25.0
|
|
10
|
+
Requires-Dist: packaging>=20.0
|
|
11
|
+
|
|
12
|
+
# 📸 SnapForge
|
|
13
|
+
|
|
14
|
+
[](...)
|
|
15
|
+
[](...)
|
|
16
|
+
[](...)
|
|
17
|
+
[](...)
|
|
18
|
+
[](...)
|
|
19
|
+
|
|
20
|
+
> **Forge your images with a single chain of commands.**
|
|
21
|
+
|
|
22
|
+
A lightweight, fast and intuitive Python library for image processing built on top of Pillow.
|
|
23
|
+
|
|
24
|
+
Perfect for resizing, filtering, enhancing and transforming images .
|
|
25
|
+
|
|
26
|
+
## ✨ Features
|
|
27
|
+
|
|
28
|
+
- 🚀 **Fast & Lightweight**: Minimal overhead for quick image tasks.
|
|
29
|
+
|
|
30
|
+
- 🔄 **Format Conversion**: Easily switch between JPEG, PNG, BMP, TIFF and more.
|
|
31
|
+
|
|
32
|
+
- 📏 **Smart Resizing**: High-quality scaling and resizing capabilities.
|
|
33
|
+
|
|
34
|
+
- 🛠️ **Easy API**: Designed with developer experience in mind—simple commands for complex tasks.
|
|
35
|
+
|
|
36
|
+
- 🐍 **Pythonic**: Follows Python's best practices for a seamless integration.
|
|
37
|
+
|
|
38
|
+
- 📷 **Powered by Pillow**: Uses the trusted Pillow library for reliable image processing.
|
|
39
|
+
|
|
40
|
+
- ⚡ **Efficient Processing**: Designed for smooth and practical image manipulation workflows.
|
|
41
|
+
|
|
42
|
+
- 🧾 **MIT License**: Open-source and free to use in personal and commercial projects.
|
|
43
|
+
|
|
44
|
+
## 🔄 Professional Format Converter 🔄
|
|
45
|
+
Our Storage.convert Supports **more** than **8 Formats** :
|
|
46
|
+
JPEG, JPG , PNG, WEBP, GIF, TIFF, BMP, ICO and etc.
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## 📦 Installation
|
|
50
|
+
|
|
51
|
+
You can install SnapForge directly from PyPI using `pip`:
|
|
52
|
+
```bash
|
|
53
|
+
pip install snapforge
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## 🚀 Quick Start
|
|
57
|
+
|
|
58
|
+
Here is a quick example to get you started with SnapForge:
|
|
59
|
+
```bash
|
|
60
|
+
from snapforge import Storage , Geometry
|
|
61
|
+
|
|
62
|
+
img=Storage.load(r"C:\Users\almahdilaptop\Pictures\sharp.png")
|
|
63
|
+
img=Geometry.round_corners(img,40)
|
|
64
|
+
img=Storage.save(img,r"C:\Users\almahdilaptop\Pictures\light.png")
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
# 📖 Available Modules
|
|
69
|
+
|
|
70
|
+
SnapForge is now **fully modular** 🔧 — each module has a single responsibility and can be imported independently:
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from snapforge import Storage, Geometry, Effects, Overlays, Inspector, SnapForgeUpdater
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
- 📐 **Geometry** — resizing, cropping, rotating and transforming
|
|
77
|
+
- 💾 **Storage** — loading, saving and format conversion
|
|
78
|
+
- 🔍 **Inspector** — metadata, histogram and color analysis
|
|
79
|
+
- 🎨 **Effects** — lighting and filters
|
|
80
|
+
- 🖼️ **Overlays** — text, watermark, borders and blending
|
|
81
|
+
- 🔄 **SnapForgeUpdater** — update checks and version comparison
|
|
82
|
+
|
|
83
|
+
# 📦 Available Methods
|
|
84
|
+
|
|
85
|
+
Here is the complete list of all available methods in each **snapforge** module:
|
|
86
|
+
|
|
87
|
+
### 📐 Geometry
|
|
88
|
+
|
|
89
|
+
| Method | Description | Example |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| `Geometry.resize(img, w, h)` | Change image dimensions | `Geometry.resize(img, 800, 600)` |
|
|
92
|
+
| `Geometry.thumbnail(img, w, h)` | Resize while keeping aspect ratio | `Geometry.thumbnail(img, 500, 500)` |
|
|
93
|
+
| `Geometry.fit(img, w, h)` | Resize and crop to exact dimensions | `Geometry.fit(img, 1080, 1080)` |
|
|
94
|
+
| `Geometry.crop(img, l, t, r, b)` | Crop image | `Geometry.crop(img, 0, 0, 100, 100)` |
|
|
95
|
+
| `Geometry.rotate(img, a)` | Rotate image | `Geometry.rotate(img, 90)` |
|
|
96
|
+
| `Geometry.flip(img, dir)` | Flip image | `Geometry.flip(img, "horizontal")` |
|
|
97
|
+
| `Geometry.round_corners(img, radius)` | Round image corners | `Geometry.round_corners(img, 40)` |
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
### 💾 Storage
|
|
102
|
+
|
|
103
|
+
| Method | Description | Example |
|
|
104
|
+
| --- | --- | --- |
|
|
105
|
+
| `Storage.load(path)` | Load image from file | `Storage.load("photo.jpg")` |
|
|
106
|
+
| `Storage.save(img, name)` | Save image | `Storage.save(img, "result.jpg")` |
|
|
107
|
+
| `Storage.convert(img, fmt)` | Change image format (PNG, JPG, WEBP…) | `Storage.convert(img, "PNG")` |
|
|
108
|
+
| `Storage.optimize(img, q)` | Set JPEG quality | `Storage.optimize(img, 85)` |
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
### 🔍 Inspector
|
|
113
|
+
|
|
114
|
+
| Method | Description | Example |
|
|
115
|
+
| --- | --- | --- |
|
|
116
|
+
| `Inspector.get_metadata(img)` | Extract detailed image metadata | `Inspector.get_metadata(img)` |
|
|
117
|
+
| `Inspector.histogram(img)` | Generate histogram data | `Inspector.histogram(img)` |
|
|
118
|
+
| `Inspector.compare(img)` | Display metadata and processing summary | `Inspector.compare(img)` |
|
|
119
|
+
| `Inspector.extract_color_palette(img)` | Get dominant colors as Hex codes | `Inspector.extract_color_palette(img)` |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### 🎨 Effects (Lighting & Filters)
|
|
124
|
+
|
|
125
|
+
| Method | Description | Example |
|
|
126
|
+
| --- | --- | --- |
|
|
127
|
+
| `Effects.apply_brightness(img, f)` | Adjust brightness | `Effects.apply_brightness(img, 1.2)` |
|
|
128
|
+
| `Effects.apply_contrast(img, f)` | Adjust contrast | `Effects.apply_contrast(img, 1.5)` |
|
|
129
|
+
| `Effects.adjust_gamma(img, g)` | Correct image gamma | `Effects.adjust_gamma(img, 1.3)` |
|
|
130
|
+
| `Effects.auto_enhance(img)` | Improve brightness, contrast and sharpness | `Effects.auto_enhance(img)` |
|
|
131
|
+
| `Effects.invert(img)` | Invert image colors | `Effects.invert(img)` |
|
|
132
|
+
| `Effects.apply_sepia(img)` | Classic sepia effect | `Effects.apply_sepia(img)` |
|
|
133
|
+
| `Effects.apply_grayscale(img, f)` | Convert to grayscale | `Effects.apply_grayscale(img, 1.0)` |
|
|
134
|
+
| `Effects.apply_blur(img, r)` | Gaussian blur | `Effects.apply_blur(img, 5.0)` |
|
|
135
|
+
| `Effects.apply_sharpen(img, f)` | Sharpen image | `Effects.apply_sharpen(img, 1.0)` |
|
|
136
|
+
| `Effects.apply_camscanner(img)` | Document scanner effect | `Effects.apply_camscanner(img)` |
|
|
137
|
+
| `Effects.apply_preset(img, name)` | Apply a professional preset | `Effects.apply_preset(img, "vintage")` |
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### 🖼️ Overlays
|
|
142
|
+
|
|
143
|
+
| Method | Description | Example |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| `Overlays.add_watermark(img, path)` | Add watermark | `Overlays.add_watermark(img, "logo.png")` |
|
|
146
|
+
| `Overlays.add_text(img, text, pos)` | Draw text | `Overlays.add_text(img, "Hello!", (50, 50))` |
|
|
147
|
+
| `Overlays.add_border(img, size, color)` | Add border | `Overlays.add_border(img, 10, (0, 0, 0))` |
|
|
148
|
+
| `Overlays.double_exposure(img, img2, mode)` | Blend with another image | `Overlays.double_exposure(img, "layer.png", "blend")` |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
### 🔄 SnapForgeUpdater
|
|
153
|
+
|
|
154
|
+
| Method | Description | Example |
|
|
155
|
+
| --- | --- | --- |
|
|
156
|
+
| `SnapForgeUpdater.__init__(package_name, current_version)` | Initialize the updater with the package name and current version | `SnapForgeUpdater("snapforge", "3.0.0")` |
|
|
157
|
+
| `SnapForgeUpdater._check_logic()` | Check PyPI in the background for a newer release | `updater._check_logic()` |
|
|
158
|
+
| `SnapForgeUpdater._notify_user(latest_version, upload_time)` | Display a notification when a new version is available | `updater._notify_user("3.0.1", "2026-08-12 10:30:00")` |
|
|
159
|
+
| `SnapForgeUpdater.start_check()` | Start the update check in a background daemon thread | `updater.start_check()` |
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
## 🛠️ Requirements
|
|
163
|
+
|
|
164
|
+
To use `SnapForge`, ensure you have the following installed:
|
|
165
|
+
|
|
166
|
+
* **Python:** 3.7 or higher
|
|
167
|
+
* **Dependencies:**
|
|
168
|
+
* `Pillow` (for image processing)
|
|
169
|
+
* `requests` (for automatic update checks)
|
|
170
|
+
* `packaging` (for version comparison logic)
|
|
171
|
+
|
|
172
|
+
## 🤝 Contributing
|
|
173
|
+
|
|
174
|
+
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
|
|
175
|
+
|
|
176
|
+
## 🌟 More Projects
|
|
177
|
+
|
|
178
|
+
If you enjoy SnapForge, you might also like this project ,too:
|
|
179
|
+
|
|
180
|
+
### PixSlim
|
|
181
|
+
|
|
182
|
+
A Python image and ... compression library focused on reducing file size while preserving quality.
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
## 📜 License
|
|
186
|
+
|
|
187
|
+
Distributed under the MIT License.
|
|
188
|
+
|
|
189
|
+
## ❤️ Support
|
|
190
|
+
|
|
191
|
+
If you find SnapForge useful, your support means a lot!
|
|
192
|
+
|
|
193
|
+
You can help by:
|
|
194
|
+
|
|
195
|
+
- 📦 Installing the package and trying it in your projects
|
|
196
|
+
- 📝 Sharing feedback and suggestions
|
|
197
|
+
- 🐛 Reporting bugs and improvements
|
|
198
|
+
- 🌟 Recommending SnapForge to other Python developers
|
|
199
|
+
|
|
200
|
+
🧩 Every piece of feedback helps make SnapForge better. 🙏
|
|
201
|
+
|
|
202
|
+
## 👤 Author
|
|
203
|
+
|
|
204
|
+
### Ali.Shm
|
|
205
|
+
|
|
206
|
+
**Project Maintainer**
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
README.md
|
|
2
|
+
pyproject.toml
|
|
3
|
+
dist_release/snapforge/__init__.py
|
|
4
|
+
dist_release/snapforge.egg-info/PKG-INFO
|
|
5
|
+
dist_release/snapforge.egg-info/SOURCES.txt
|
|
6
|
+
dist_release/snapforge.egg-info/dependency_links.txt
|
|
7
|
+
dist_release/snapforge.egg-info/requires.txt
|
|
8
|
+
dist_release/snapforge.egg-info/top_level.txt
|
|
9
|
+
dist_release/snapforge/modules/__init__.py
|
|
10
|
+
dist_release/snapforge/modules/effects.pyc
|
|
11
|
+
dist_release/snapforge/modules/geometry.pyc
|
|
12
|
+
dist_release/snapforge/modules/overlays.pyc
|
|
13
|
+
dist_release/snapforge/utils/__init__.py
|
|
14
|
+
dist_release/snapforge/utils/inspector.pyc
|
|
15
|
+
dist_release/snapforge/utils/storage.pyc
|
|
16
|
+
dist_release/snapforge/utils/updater.pyc
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "snapforge"
|
|
7
|
+
version = "3.0.0"
|
|
8
|
+
description = "Powerful and fast image editor! 😎"
|
|
9
|
+
authors = [{name = "Ali.Shm"}]
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
requires-python = ">=3.7"
|
|
12
|
+
dependencies = [
|
|
13
|
+
"Pillow>=9.0.0",
|
|
14
|
+
"requests>=2.25.0",
|
|
15
|
+
"packaging>=20.0"
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[tool.setuptools]
|
|
19
|
+
package-dir = {"" = "dist_release"}
|
|
20
|
+
|
|
21
|
+
[tool.setuptools.packages.find]
|
|
22
|
+
where = ["dist_release"]
|
|
23
|
+
|
|
24
|
+
[tool.setuptools.package-data]
|
|
25
|
+
snapforge = ["*.pyc"]
|
|
26
|
+
"snapforge.modules" = ["*.pyc"]
|
|
27
|
+
"snapforge.utils" = ["*.pyc"]
|