pixelkid 0.1.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.
pixelkid-0.1.0/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MASTERSAM
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,93 @@
1
+ Metadata-Version: 2.4
2
+ Name: pixelkid
3
+ Version: 0.1.0
4
+ Summary: Превращает любое фото в пиксель-арт одной функцией. Сделано для мастер-классов по Python.
5
+ License: MIT
6
+ Keywords: pixel art,image,pillow,education,kids
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Topic :: Multimedia :: Graphics
10
+ Classifier: Intended Audience :: Education
11
+ Requires-Python: >=3.8
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: Pillow>=9.1
15
+ Provides-Extra: dev
16
+ Requires-Dist: pytest; extra == "dev"
17
+ Requires-Dist: build; extra == "dev"
18
+ Requires-Dist: twine; extra == "dev"
19
+ Dynamic: license-file
20
+
21
+ # pixelkid
22
+
23
+ Превращает любое фото в пиксель-арт **одной функцией**. Сделано для мастер-классов по Python (возраст 11–17).
24
+
25
+ ```python
26
+ from pixelkid import pixelate
27
+
28
+ pixelate("photo.jpg", pixel_size=12, colors=16, save_as="art.png")
29
+ ```
30
+
31
+ ## Установка
32
+
33
+ ```
34
+ pip install pixelkid
35
+ ```
36
+
37
+ Нужен Python 3.8+. Вместе с `pixelkid` автоматически установится Pillow.
38
+
39
+ ## Функция `pixelate`
40
+
41
+ ```python
42
+ pixelate(image, pixel_size=12, colors=32, save_as=None, upscale=True)
43
+ ```
44
+
45
+ | Параметр | Что это | По умолчанию |
46
+ |---|---|---|
47
+ | `image` | Путь к файлу (`"photo.jpg"`) или картинка Pillow (`Image`) | — |
48
+ | `pixel_size` | Размер «большого пикселя» в обычных пикселях, от 2. Чем больше — тем крупнее квадраты | `12` |
49
+ | `colors` | Сколько цветов оставить, от 2 до 256 | `32` |
50
+ | `save_as` | Куда сохранить результат. Если не указать — файл не создаётся | `None` |
51
+ | `upscale` | `True` — картинка исходного размера с крупными пикселями. `False` — маленькая картинка, где 1 точка = 1 большой пиксель | `True` |
52
+
53
+ **Возвращает** картинку Pillow (`PIL.Image.Image`), поэтому её можно показать (`.show()`), сохранить (`.save(...)`) или обработать дальше.
54
+
55
+ **Ошибки.** Если `pixel_size` меньше 2 или `colors` вне диапазона 2–256, функция выбросит `ValueError`.
56
+
57
+ ## Примеры
58
+
59
+ ```python
60
+ from pixelkid import pixelate
61
+
62
+ # 1. Просто показать результат
63
+ pixelate("cat.jpg").show()
64
+
65
+ # 2. Очень крупные пиксели и всего 4 цвета
66
+ pixelate("cat.jpg", pixel_size=30, colors=4, save_as="cat_8bit.png")
67
+
68
+ # 3. Пять версий одного фото
69
+ for size in (4, 8, 16, 24, 32):
70
+ pixelate("cat.jpg", pixel_size=size, save_as=f"cat_{size}.png")
71
+
72
+ # 4. Маленькая «сетка» для своих игр и раскрасок
73
+ grid = pixelate("cat.jpg", pixel_size=16, upscale=False)
74
+ print(grid.size) # например, (48, 48): можно перебрать каждую клеточку
75
+ ```
76
+
77
+ ## Как это работает
78
+
79
+ 1. **Уменьшаем** фото: каждый квадрат `pixel_size × pixel_size` становится одной точкой.
80
+ 2. **Оставляем** только `colors` цветов (`quantize`).
81
+ 3. **Увеличиваем** обратно методом `NEAREST` — он просто копирует цвет и не размывает границы.
82
+
83
+ ## Разработка
84
+
85
+ ```
86
+ pip install -e .[dev] # или: pip install -e . pytest
87
+ pytest
88
+ python -m build # собрать пакет в папку dist/
89
+ ```
90
+
91
+ ## Лицензия
92
+
93
+ MIT
@@ -0,0 +1,73 @@
1
+ # pixelkid
2
+
3
+ Превращает любое фото в пиксель-арт **одной функцией**. Сделано для мастер-классов по Python (возраст 11–17).
4
+
5
+ ```python
6
+ from pixelkid import pixelate
7
+
8
+ pixelate("photo.jpg", pixel_size=12, colors=16, save_as="art.png")
9
+ ```
10
+
11
+ ## Установка
12
+
13
+ ```
14
+ pip install pixelkid
15
+ ```
16
+
17
+ Нужен Python 3.8+. Вместе с `pixelkid` автоматически установится Pillow.
18
+
19
+ ## Функция `pixelate`
20
+
21
+ ```python
22
+ pixelate(image, pixel_size=12, colors=32, save_as=None, upscale=True)
23
+ ```
24
+
25
+ | Параметр | Что это | По умолчанию |
26
+ |---|---|---|
27
+ | `image` | Путь к файлу (`"photo.jpg"`) или картинка Pillow (`Image`) | — |
28
+ | `pixel_size` | Размер «большого пикселя» в обычных пикселях, от 2. Чем больше — тем крупнее квадраты | `12` |
29
+ | `colors` | Сколько цветов оставить, от 2 до 256 | `32` |
30
+ | `save_as` | Куда сохранить результат. Если не указать — файл не создаётся | `None` |
31
+ | `upscale` | `True` — картинка исходного размера с крупными пикселями. `False` — маленькая картинка, где 1 точка = 1 большой пиксель | `True` |
32
+
33
+ **Возвращает** картинку Pillow (`PIL.Image.Image`), поэтому её можно показать (`.show()`), сохранить (`.save(...)`) или обработать дальше.
34
+
35
+ **Ошибки.** Если `pixel_size` меньше 2 или `colors` вне диапазона 2–256, функция выбросит `ValueError`.
36
+
37
+ ## Примеры
38
+
39
+ ```python
40
+ from pixelkid import pixelate
41
+
42
+ # 1. Просто показать результат
43
+ pixelate("cat.jpg").show()
44
+
45
+ # 2. Очень крупные пиксели и всего 4 цвета
46
+ pixelate("cat.jpg", pixel_size=30, colors=4, save_as="cat_8bit.png")
47
+
48
+ # 3. Пять версий одного фото
49
+ for size in (4, 8, 16, 24, 32):
50
+ pixelate("cat.jpg", pixel_size=size, save_as=f"cat_{size}.png")
51
+
52
+ # 4. Маленькая «сетка» для своих игр и раскрасок
53
+ grid = pixelate("cat.jpg", pixel_size=16, upscale=False)
54
+ print(grid.size) # например, (48, 48): можно перебрать каждую клеточку
55
+ ```
56
+
57
+ ## Как это работает
58
+
59
+ 1. **Уменьшаем** фото: каждый квадрат `pixel_size × pixel_size` становится одной точкой.
60
+ 2. **Оставляем** только `colors` цветов (`quantize`).
61
+ 3. **Увеличиваем** обратно методом `NEAREST` — он просто копирует цвет и не размывает границы.
62
+
63
+ ## Разработка
64
+
65
+ ```
66
+ pip install -e .[dev] # или: pip install -e . pytest
67
+ pytest
68
+ python -m build # собрать пакет в папку dist/
69
+ ```
70
+
71
+ ## Лицензия
72
+
73
+ MIT
@@ -0,0 +1,25 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "pixelkid"
7
+ version = "0.1.0"
8
+ description = "Превращает любое фото в пиксель-арт одной функцией. Сделано для мастер-классов по Python."
9
+ readme = "README.md"
10
+ requires-python = ">=3.8"
11
+ license = { text = "MIT" }
12
+ dependencies = ["Pillow>=9.1"]
13
+ keywords = ["pixel art", "image", "pillow", "education", "kids"]
14
+ classifiers = [
15
+ "Programming Language :: Python :: 3",
16
+ "License :: OSI Approved :: MIT License",
17
+ "Topic :: Multimedia :: Graphics",
18
+ "Intended Audience :: Education",
19
+ ]
20
+
21
+ [project.optional-dependencies]
22
+ dev = ["pytest", "build", "twine"]
23
+
24
+ [tool.setuptools.packages.find]
25
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,46 @@
1
+ """pixelkid — превращает фото в пиксель-арт одной функцией.
2
+
3
+ from pixelkid import pixelate
4
+ pixelate("photo.jpg", pixel_size=12, colors=16, save_as="art.png")
5
+ """
6
+ from PIL import Image
7
+
8
+ __version__ = "0.1.0"
9
+ __all__ = ["pixelate"]
10
+
11
+
12
+ def pixelate(image, pixel_size=12, colors=32, save_as=None, upscale=True):
13
+ """Делает из фотографии пиксель-арт.
14
+
15
+ image -- путь к файлу ("photo.jpg") или картинка Pillow (Image).
16
+ pixel_size -- размер одного «большого пикселя» в обычных пикселях (2 и больше).
17
+ colors -- сколько цветов оставить (от 2 до 256).
18
+ save_as -- куда сохранить результат ("art.png"). Если не нужно -- не указывай.
19
+ upscale -- True: вернуть картинку исходного размера с крупными пикселями;
20
+ False: вернуть маленькую картинку, где 1 точка = 1 большой пиксель.
21
+
22
+ Возвращает картинку Pillow (Image).
23
+ """
24
+ if pixel_size < 2:
25
+ raise ValueError("pixel_size должен быть 2 или больше")
26
+ if not 2 <= colors <= 256:
27
+ raise ValueError("colors должен быть от 2 до 256")
28
+
29
+ if isinstance(image, Image.Image):
30
+ photo = image.convert("RGB")
31
+ else:
32
+ photo = Image.open(image).convert("RGB")
33
+
34
+ # 1. Уменьшаем: каждый квадрат pixel_size x pixel_size станет одной точкой
35
+ small_size = (max(1, photo.width // pixel_size), max(1, photo.height // pixel_size))
36
+ small = photo.resize(small_size, Image.Resampling.LANCZOS)
37
+
38
+ # 2. Оставляем только нужное количество цветов
39
+ small = small.quantize(colors=colors).convert("RGB")
40
+
41
+ # 3. Увеличиваем обратно без размытия
42
+ result = small.resize(photo.size, Image.Resampling.NEAREST) if upscale else small
43
+
44
+ if save_as:
45
+ result.save(save_as)
46
+ return result
@@ -0,0 +1,93 @@
1
+ Metadata-Version: 2.4
2
+ Name: pixelkid
3
+ Version: 0.1.0
4
+ Summary: Превращает любое фото в пиксель-арт одной функцией. Сделано для мастер-классов по Python.
5
+ License: MIT
6
+ Keywords: pixel art,image,pillow,education,kids
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Classifier: Topic :: Multimedia :: Graphics
10
+ Classifier: Intended Audience :: Education
11
+ Requires-Python: >=3.8
12
+ Description-Content-Type: text/markdown
13
+ License-File: LICENSE
14
+ Requires-Dist: Pillow>=9.1
15
+ Provides-Extra: dev
16
+ Requires-Dist: pytest; extra == "dev"
17
+ Requires-Dist: build; extra == "dev"
18
+ Requires-Dist: twine; extra == "dev"
19
+ Dynamic: license-file
20
+
21
+ # pixelkid
22
+
23
+ Превращает любое фото в пиксель-арт **одной функцией**. Сделано для мастер-классов по Python (возраст 11–17).
24
+
25
+ ```python
26
+ from pixelkid import pixelate
27
+
28
+ pixelate("photo.jpg", pixel_size=12, colors=16, save_as="art.png")
29
+ ```
30
+
31
+ ## Установка
32
+
33
+ ```
34
+ pip install pixelkid
35
+ ```
36
+
37
+ Нужен Python 3.8+. Вместе с `pixelkid` автоматически установится Pillow.
38
+
39
+ ## Функция `pixelate`
40
+
41
+ ```python
42
+ pixelate(image, pixel_size=12, colors=32, save_as=None, upscale=True)
43
+ ```
44
+
45
+ | Параметр | Что это | По умолчанию |
46
+ |---|---|---|
47
+ | `image` | Путь к файлу (`"photo.jpg"`) или картинка Pillow (`Image`) | — |
48
+ | `pixel_size` | Размер «большого пикселя» в обычных пикселях, от 2. Чем больше — тем крупнее квадраты | `12` |
49
+ | `colors` | Сколько цветов оставить, от 2 до 256 | `32` |
50
+ | `save_as` | Куда сохранить результат. Если не указать — файл не создаётся | `None` |
51
+ | `upscale` | `True` — картинка исходного размера с крупными пикселями. `False` — маленькая картинка, где 1 точка = 1 большой пиксель | `True` |
52
+
53
+ **Возвращает** картинку Pillow (`PIL.Image.Image`), поэтому её можно показать (`.show()`), сохранить (`.save(...)`) или обработать дальше.
54
+
55
+ **Ошибки.** Если `pixel_size` меньше 2 или `colors` вне диапазона 2–256, функция выбросит `ValueError`.
56
+
57
+ ## Примеры
58
+
59
+ ```python
60
+ from pixelkid import pixelate
61
+
62
+ # 1. Просто показать результат
63
+ pixelate("cat.jpg").show()
64
+
65
+ # 2. Очень крупные пиксели и всего 4 цвета
66
+ pixelate("cat.jpg", pixel_size=30, colors=4, save_as="cat_8bit.png")
67
+
68
+ # 3. Пять версий одного фото
69
+ for size in (4, 8, 16, 24, 32):
70
+ pixelate("cat.jpg", pixel_size=size, save_as=f"cat_{size}.png")
71
+
72
+ # 4. Маленькая «сетка» для своих игр и раскрасок
73
+ grid = pixelate("cat.jpg", pixel_size=16, upscale=False)
74
+ print(grid.size) # например, (48, 48): можно перебрать каждую клеточку
75
+ ```
76
+
77
+ ## Как это работает
78
+
79
+ 1. **Уменьшаем** фото: каждый квадрат `pixel_size × pixel_size` становится одной точкой.
80
+ 2. **Оставляем** только `colors` цветов (`quantize`).
81
+ 3. **Увеличиваем** обратно методом `NEAREST` — он просто копирует цвет и не размывает границы.
82
+
83
+ ## Разработка
84
+
85
+ ```
86
+ pip install -e .[dev] # или: pip install -e . pytest
87
+ pytest
88
+ python -m build # собрать пакет в папку dist/
89
+ ```
90
+
91
+ ## Лицензия
92
+
93
+ MIT
@@ -0,0 +1,10 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ src/pixelkid/__init__.py
5
+ src/pixelkid.egg-info/PKG-INFO
6
+ src/pixelkid.egg-info/SOURCES.txt
7
+ src/pixelkid.egg-info/dependency_links.txt
8
+ src/pixelkid.egg-info/requires.txt
9
+ src/pixelkid.egg-info/top_level.txt
10
+ tests/test_pixelate.py
@@ -0,0 +1,6 @@
1
+ Pillow>=9.1
2
+
3
+ [dev]
4
+ pytest
5
+ build
6
+ twine
@@ -0,0 +1 @@
1
+ pixelkid
@@ -0,0 +1,33 @@
1
+ from PIL import Image
2
+ import pytest
3
+ from pixelkid import pixelate
4
+
5
+
6
+ def make_photo():
7
+ return Image.effect_mandelbrot((200, 150), (-2, -1.5, 1, 1.5), 30)
8
+
9
+
10
+ def test_keeps_size():
11
+ assert pixelate(make_photo(), pixel_size=10).size == (200, 150)
12
+
13
+
14
+ def test_small_image():
15
+ assert pixelate(make_photo(), pixel_size=10, upscale=False).size == (20, 15)
16
+
17
+
18
+ def test_color_limit():
19
+ result = pixelate(make_photo(), pixel_size=5, colors=4)
20
+ assert len(result.getcolors(10000)) <= 4
21
+
22
+
23
+ def test_save(tmp_path):
24
+ path = tmp_path / "art.png"
25
+ pixelate(make_photo(), save_as=str(path))
26
+ assert path.exists()
27
+
28
+
29
+ def test_bad_values():
30
+ with pytest.raises(ValueError):
31
+ pixelate(make_photo(), pixel_size=1)
32
+ with pytest.raises(ValueError):
33
+ pixelate(make_photo(), colors=1)