fotolab 0.21.1__tar.gz → 0.22.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.
- {fotolab-0.21.1 → fotolab-0.22.0}/CHANGELOG.md +9 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/PKG-INFO +6 -4
- {fotolab-0.21.1 → fotolab-0.22.0}/Pipfile.lock +135 -101
- {fotolab-0.21.1 → fotolab-0.22.0}/README.md +5 -3
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/__init__.py +1 -1
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/info.py +16 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/watermark.py +2 -9
- {fotolab-0.21.1 → fotolab-0.22.0}/noxfile.py +28 -6
- {fotolab-0.21.1 → fotolab-0.22.0}/.coveragerc +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/.gitignore +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/.pre-commit-config.yaml +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/.python-version +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/CONTRIBUTING.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/LICENSE.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/Pipfile +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/Makefile +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/make.bat +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/CHANGELOG.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/CONTRIBUTING.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/LICENSE.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/README.md +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/_static/logo.jpg +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/conf.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/docs/source/index.rst +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/__main__.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/animate.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/auto.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/border.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/cli.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/contrast.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/env.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/montage.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/resize.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/rotate.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/fotolab/sharpen.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/pyproject.toml +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/tests/__init__.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/tests/conftest.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/tests/test_env.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/tests/test_help_flag.py +0 -0
- {fotolab-0.21.1 → fotolab-0.22.0}/tests/test_quiet_flag.py +0 -0
@@ -7,6 +7,15 @@ and this project adheres to [0-based versioning](https://0ver.org/).
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## v0.22.0 (2024-12-08)
|
11
|
+
|
12
|
+
- Add `--datetime` to `info` subcommand
|
13
|
+
- Add `--no-lowercase` to `watermark` subcommand
|
14
|
+
- Bump deps
|
15
|
+
- Support major, minor, micro release for `release` job in `nox`
|
16
|
+
- Update help message in readme
|
17
|
+
- Use `camera_data` from `info` subcommand in `watermark` subcommand
|
18
|
+
|
10
19
|
## v0.21.1 (2024-12-01)
|
11
20
|
|
12
21
|
- Add requires-python field to project
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: fotolab
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.22.0
|
4
4
|
Summary: A console program that manipulate images.
|
5
5
|
Keywords: photography,photo
|
6
6
|
Author-email: Kian-Meng Ang <kianmeng@cpan.org>
|
@@ -206,7 +206,7 @@ fotolab info -h
|
|
206
206
|
<!--help-info !-->
|
207
207
|
|
208
208
|
```console
|
209
|
-
usage: fotolab info [-h] [-s] IMAGE_FILENAME
|
209
|
+
usage: fotolab info [-h] [-s] [--camera] IMAGE_FILENAME
|
210
210
|
|
211
211
|
positional arguments:
|
212
212
|
IMAGE_FILENAME set the image filename
|
@@ -214,6 +214,7 @@ positional arguments:
|
|
214
214
|
options:
|
215
215
|
-h, --help show this help message and exit
|
216
216
|
-s, --sort show image info by sorted field name
|
217
|
+
--camera show the camera maker details
|
217
218
|
```
|
218
219
|
|
219
220
|
<!--help-info !-->
|
@@ -326,7 +327,7 @@ usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
|
|
326
327
|
[-p {top-left,top-right,bottom-left,bottom-right}]
|
327
328
|
[-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
|
328
329
|
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
|
329
|
-
[-l]
|
330
|
+
[-l | --lowercase | --no-lowercase]
|
330
331
|
IMAGE_FILENAMES [IMAGE_FILENAMES ...]
|
331
332
|
|
332
333
|
positional arguments:
|
@@ -354,7 +355,8 @@ options:
|
|
354
355
|
set the outline color of the watermark text (default:
|
355
356
|
'black')
|
356
357
|
--camera use camera metadata as watermark
|
357
|
-
-l, --lowercase
|
358
|
+
-l, --lowercase, --no-lowercase
|
359
|
+
lowercase the watermark text
|
358
360
|
```
|
359
361
|
|
360
362
|
<!--help-watermark !-->
|
@@ -16,6 +16,10 @@
|
|
16
16
|
]
|
17
17
|
},
|
18
18
|
"default": {
|
19
|
+
"fotolab": {
|
20
|
+
"file": ".",
|
21
|
+
"markers": "python_version >= '3.9'"
|
22
|
+
},
|
19
23
|
"pillow": {
|
20
24
|
"hashes": [
|
21
25
|
"sha256:00177a63030d612148e659b55ba99527803288cea7c75fb05766ab7981a8c1b7",
|
@@ -102,11 +106,11 @@
|
|
102
106
|
"develop": {
|
103
107
|
"alabaster": {
|
104
108
|
"hashes": [
|
105
|
-
"sha256:
|
106
|
-
"sha256:
|
109
|
+
"sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65",
|
110
|
+
"sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"
|
107
111
|
],
|
108
|
-
"markers": "python_version >= '3.
|
109
|
-
"version": "==
|
112
|
+
"markers": "python_version >= '3.9'",
|
113
|
+
"version": "==0.7.16"
|
110
114
|
},
|
111
115
|
"argcomplete": {
|
112
116
|
"hashes": [
|
@@ -272,71 +276,71 @@
|
|
272
276
|
"toml"
|
273
277
|
],
|
274
278
|
"hashes": [
|
275
|
-
"sha256:
|
276
|
-
"sha256:
|
277
|
-
"sha256:
|
278
|
-
"sha256:
|
279
|
-
"sha256:
|
280
|
-
"sha256:
|
281
|
-
"sha256:
|
282
|
-
"sha256:
|
283
|
-
"sha256:
|
284
|
-
"sha256:
|
285
|
-
"sha256:
|
286
|
-
"sha256:
|
287
|
-
"sha256:
|
288
|
-
"sha256:
|
289
|
-
"sha256:
|
290
|
-
"sha256:
|
291
|
-
"sha256:
|
292
|
-
"sha256:
|
293
|
-
"sha256:
|
294
|
-
"sha256:
|
295
|
-
"sha256:
|
296
|
-
"sha256:
|
297
|
-
"sha256:
|
298
|
-
"sha256:
|
299
|
-
"sha256:
|
300
|
-
"sha256:
|
301
|
-
"sha256:
|
302
|
-
"sha256:
|
303
|
-
"sha256:
|
304
|
-
"sha256:
|
305
|
-
"sha256:
|
306
|
-
"sha256:
|
307
|
-
"sha256:
|
308
|
-
"sha256:
|
309
|
-
"sha256:
|
310
|
-
"sha256:
|
311
|
-
"sha256:
|
312
|
-
"sha256:
|
313
|
-
"sha256:
|
314
|
-
"sha256:
|
315
|
-
"sha256:
|
316
|
-
"sha256:
|
317
|
-
"sha256:
|
318
|
-
"sha256:
|
319
|
-
"sha256:
|
320
|
-
"sha256:
|
321
|
-
"sha256:
|
322
|
-
"sha256:
|
323
|
-
"sha256:
|
324
|
-
"sha256:
|
325
|
-
"sha256:
|
326
|
-
"sha256:
|
327
|
-
"sha256:
|
328
|
-
"sha256:
|
329
|
-
"sha256:
|
330
|
-
"sha256:
|
331
|
-
"sha256:
|
332
|
-
"sha256:
|
333
|
-
"sha256:
|
334
|
-
"sha256:
|
335
|
-
"sha256:
|
336
|
-
"sha256:
|
279
|
+
"sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5",
|
280
|
+
"sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf",
|
281
|
+
"sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb",
|
282
|
+
"sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638",
|
283
|
+
"sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4",
|
284
|
+
"sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc",
|
285
|
+
"sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed",
|
286
|
+
"sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a",
|
287
|
+
"sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d",
|
288
|
+
"sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649",
|
289
|
+
"sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c",
|
290
|
+
"sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b",
|
291
|
+
"sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4",
|
292
|
+
"sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443",
|
293
|
+
"sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83",
|
294
|
+
"sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee",
|
295
|
+
"sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e",
|
296
|
+
"sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e",
|
297
|
+
"sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3",
|
298
|
+
"sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0",
|
299
|
+
"sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb",
|
300
|
+
"sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076",
|
301
|
+
"sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb",
|
302
|
+
"sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787",
|
303
|
+
"sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1",
|
304
|
+
"sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e",
|
305
|
+
"sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce",
|
306
|
+
"sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801",
|
307
|
+
"sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764",
|
308
|
+
"sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365",
|
309
|
+
"sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf",
|
310
|
+
"sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6",
|
311
|
+
"sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71",
|
312
|
+
"sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002",
|
313
|
+
"sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4",
|
314
|
+
"sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c",
|
315
|
+
"sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8",
|
316
|
+
"sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4",
|
317
|
+
"sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146",
|
318
|
+
"sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc",
|
319
|
+
"sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea",
|
320
|
+
"sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4",
|
321
|
+
"sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad",
|
322
|
+
"sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28",
|
323
|
+
"sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451",
|
324
|
+
"sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50",
|
325
|
+
"sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779",
|
326
|
+
"sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63",
|
327
|
+
"sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e",
|
328
|
+
"sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc",
|
329
|
+
"sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022",
|
330
|
+
"sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d",
|
331
|
+
"sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94",
|
332
|
+
"sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b",
|
333
|
+
"sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d",
|
334
|
+
"sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331",
|
335
|
+
"sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a",
|
336
|
+
"sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0",
|
337
|
+
"sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee",
|
338
|
+
"sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92",
|
339
|
+
"sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a",
|
340
|
+
"sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9"
|
337
341
|
],
|
338
342
|
"markers": "python_version >= '3.9'",
|
339
|
-
"version": "==7.6.
|
343
|
+
"version": "==7.6.8"
|
340
344
|
},
|
341
345
|
"distlib": {
|
342
346
|
"hashes": [
|
@@ -431,16 +435,16 @@
|
|
431
435
|
"version": "==0.21.0"
|
432
436
|
},
|
433
437
|
"fotolab": {
|
434
|
-
"
|
435
|
-
"
|
438
|
+
"file": ".",
|
439
|
+
"markers": "python_version >= '3.9'"
|
436
440
|
},
|
437
441
|
"identify": {
|
438
442
|
"hashes": [
|
439
|
-
"sha256:
|
440
|
-
"sha256:
|
443
|
+
"sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02",
|
444
|
+
"sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"
|
441
445
|
],
|
442
|
-
"markers": "python_version >= '3.
|
443
|
-
"version": "==2.6.
|
446
|
+
"markers": "python_version >= '3.9'",
|
447
|
+
"version": "==2.6.3"
|
444
448
|
},
|
445
449
|
"idna": {
|
446
450
|
"hashes": [
|
@@ -584,12 +588,12 @@
|
|
584
588
|
},
|
585
589
|
"myst-parser": {
|
586
590
|
"hashes": [
|
587
|
-
"sha256:
|
588
|
-
"sha256:
|
591
|
+
"sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1",
|
592
|
+
"sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87"
|
589
593
|
],
|
590
594
|
"index": "pypi",
|
591
|
-
"markers": "python_version >= '3.
|
592
|
-
"version": "==
|
595
|
+
"markers": "python_version >= '3.8'",
|
596
|
+
"version": "==3.0.1"
|
593
597
|
},
|
594
598
|
"nodeenv": {
|
595
599
|
"hashes": [
|
@@ -610,11 +614,11 @@
|
|
610
614
|
},
|
611
615
|
"packaging": {
|
612
616
|
"hashes": [
|
613
|
-
"sha256:
|
614
|
-
"sha256:
|
617
|
+
"sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759",
|
618
|
+
"sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"
|
615
619
|
],
|
616
620
|
"markers": "python_version >= '3.8'",
|
617
|
-
"version": "==24.
|
621
|
+
"version": "==24.2"
|
618
622
|
},
|
619
623
|
"pillow": {
|
620
624
|
"hashes": [
|
@@ -757,12 +761,12 @@
|
|
757
761
|
},
|
758
762
|
"pytest": {
|
759
763
|
"hashes": [
|
760
|
-
"sha256:
|
761
|
-
"sha256:
|
764
|
+
"sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6",
|
765
|
+
"sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761"
|
762
766
|
],
|
763
767
|
"index": "pypi",
|
764
768
|
"markers": "python_version >= '3.8'",
|
765
|
-
"version": "==8.3.
|
769
|
+
"version": "==8.3.4"
|
766
770
|
},
|
767
771
|
"pytest-cov": {
|
768
772
|
"hashes": [
|
@@ -874,21 +878,21 @@
|
|
874
878
|
},
|
875
879
|
"sphinx": {
|
876
880
|
"hashes": [
|
877
|
-
"sha256:
|
878
|
-
"sha256:
|
881
|
+
"sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe",
|
882
|
+
"sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"
|
879
883
|
],
|
880
884
|
"index": "pypi",
|
881
|
-
"markers": "python_version >= '3.
|
882
|
-
"version": "==
|
885
|
+
"markers": "python_version >= '3.9'",
|
886
|
+
"version": "==7.4.7"
|
883
887
|
},
|
884
888
|
"sphinx-autodoc-typehints": {
|
885
889
|
"hashes": [
|
886
|
-
"sha256:
|
887
|
-
"sha256:
|
890
|
+
"sha256:3098e2c6d0ba99eacd013eb06861acc9b51c6e595be86ab05c08ee5506ac0c67",
|
891
|
+
"sha256:535c78ed2d6a1bad393ba9f3dfa2602cf424e2631ee207263e07874c38fde084"
|
888
892
|
],
|
889
893
|
"index": "pypi",
|
890
|
-
"markers": "python_version >= '3.
|
891
|
-
"version": "==2.
|
894
|
+
"markers": "python_version >= '3.9'",
|
895
|
+
"version": "==2.3.0"
|
892
896
|
},
|
893
897
|
"sphinx-copybutton": {
|
894
898
|
"hashes": [
|
@@ -949,12 +953,42 @@
|
|
949
953
|
},
|
950
954
|
"tomli": {
|
951
955
|
"hashes": [
|
952
|
-
"sha256:
|
953
|
-
"sha256:
|
956
|
+
"sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6",
|
957
|
+
"sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd",
|
958
|
+
"sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c",
|
959
|
+
"sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b",
|
960
|
+
"sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8",
|
961
|
+
"sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6",
|
962
|
+
"sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77",
|
963
|
+
"sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff",
|
964
|
+
"sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea",
|
965
|
+
"sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192",
|
966
|
+
"sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249",
|
967
|
+
"sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee",
|
968
|
+
"sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4",
|
969
|
+
"sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98",
|
970
|
+
"sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8",
|
971
|
+
"sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4",
|
972
|
+
"sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281",
|
973
|
+
"sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744",
|
974
|
+
"sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69",
|
975
|
+
"sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13",
|
976
|
+
"sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140",
|
977
|
+
"sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e",
|
978
|
+
"sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e",
|
979
|
+
"sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc",
|
980
|
+
"sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff",
|
981
|
+
"sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec",
|
982
|
+
"sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2",
|
983
|
+
"sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222",
|
984
|
+
"sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106",
|
985
|
+
"sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272",
|
986
|
+
"sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a",
|
987
|
+
"sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"
|
954
988
|
],
|
955
989
|
"index": "pypi",
|
956
990
|
"markers": "python_version >= '3.8'",
|
957
|
-
"version": "==2.
|
991
|
+
"version": "==2.2.1"
|
958
992
|
},
|
959
993
|
"urllib3": {
|
960
994
|
"hashes": [
|
@@ -966,19 +1000,19 @@
|
|
966
1000
|
},
|
967
1001
|
"virtualenv": {
|
968
1002
|
"hashes": [
|
969
|
-
"sha256:
|
970
|
-
"sha256:
|
1003
|
+
"sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0",
|
1004
|
+
"sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"
|
971
1005
|
],
|
972
1006
|
"markers": "python_version >= '3.8'",
|
973
|
-
"version": "==20.
|
1007
|
+
"version": "==20.28.0"
|
974
1008
|
},
|
975
1009
|
"zipp": {
|
976
1010
|
"hashes": [
|
977
|
-
"sha256:
|
978
|
-
"sha256:
|
1011
|
+
"sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4",
|
1012
|
+
"sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"
|
979
1013
|
],
|
980
|
-
"markers": "python_version >= '3.
|
981
|
-
"version": "==3.
|
1014
|
+
"markers": "python_version >= '3.9'",
|
1015
|
+
"version": "==3.21.0"
|
982
1016
|
}
|
983
1017
|
}
|
984
1018
|
}
|
@@ -183,7 +183,7 @@ fotolab info -h
|
|
183
183
|
<!--help-info !-->
|
184
184
|
|
185
185
|
```console
|
186
|
-
usage: fotolab info [-h] [-s] IMAGE_FILENAME
|
186
|
+
usage: fotolab info [-h] [-s] [--camera] IMAGE_FILENAME
|
187
187
|
|
188
188
|
positional arguments:
|
189
189
|
IMAGE_FILENAME set the image filename
|
@@ -191,6 +191,7 @@ positional arguments:
|
|
191
191
|
options:
|
192
192
|
-h, --help show this help message and exit
|
193
193
|
-s, --sort show image info by sorted field name
|
194
|
+
--camera show the camera maker details
|
194
195
|
```
|
195
196
|
|
196
197
|
<!--help-info !-->
|
@@ -303,7 +304,7 @@ usage: fotolab watermark [-h] [-t WATERMARK_TEXT]
|
|
303
304
|
[-p {top-left,top-right,bottom-left,bottom-right}]
|
304
305
|
[-pd PADDING] [-fs FONT_SIZE] [-fc FONT_COLOR]
|
305
306
|
[-ow OUTLINE_WIDTH] [-oc OUTLINE_COLOR] [--camera]
|
306
|
-
[-l]
|
307
|
+
[-l | --lowercase | --no-lowercase]
|
307
308
|
IMAGE_FILENAMES [IMAGE_FILENAMES ...]
|
308
309
|
|
309
310
|
positional arguments:
|
@@ -331,7 +332,8 @@ options:
|
|
331
332
|
set the outline color of the watermark text (default:
|
332
333
|
'black')
|
333
334
|
--camera use camera metadata as watermark
|
334
|
-
-l, --lowercase
|
335
|
+
-l, --lowercase, --no-lowercase
|
336
|
+
lowercase the watermark text
|
335
337
|
```
|
336
338
|
|
337
339
|
<!--help-watermark !-->
|
@@ -54,6 +54,14 @@ def build_subparser(subparsers) -> None:
|
|
54
54
|
help="show the camera maker details",
|
55
55
|
)
|
56
56
|
|
57
|
+
info_parser.add_argument(
|
58
|
+
"--datetime",
|
59
|
+
default=False,
|
60
|
+
action="store_true",
|
61
|
+
dest="datetime",
|
62
|
+
help="show the datetime",
|
63
|
+
)
|
64
|
+
|
57
65
|
|
58
66
|
def run(args: argparse.Namespace) -> None:
|
59
67
|
"""Run info subcommand.
|
@@ -67,6 +75,8 @@ def run(args: argparse.Namespace) -> None:
|
|
67
75
|
log.debug(args)
|
68
76
|
if args.camera:
|
69
77
|
print(camera_metadata(args.image_filename))
|
78
|
+
if args.datetime:
|
79
|
+
print(datetime(args.image_filename))
|
70
80
|
else:
|
71
81
|
exif_tags = extract_exif_tags(args.image_filename)
|
72
82
|
if exif_tags:
|
@@ -96,6 +106,12 @@ def extract_exif_tags(image_filename: str, sort: bool = False) -> dict:
|
|
96
106
|
return filtered_info
|
97
107
|
|
98
108
|
|
109
|
+
def datetime(image_filename):
|
110
|
+
"""Extract datetime metadata."""
|
111
|
+
exif_tags = extract_exif_tags(image_filename)
|
112
|
+
return exif_tags["DateTime"]
|
113
|
+
|
114
|
+
|
99
115
|
def camera_metadata(image_filename):
|
100
116
|
"""Extract camera and model metadata."""
|
101
117
|
exif_tags = extract_exif_tags(image_filename)
|
@@ -22,7 +22,7 @@ import math
|
|
22
22
|
from PIL import Image, ImageColor, ImageDraw, ImageFont
|
23
23
|
|
24
24
|
from fotolab import save_image
|
25
|
-
from fotolab.info import
|
25
|
+
from fotolab.info import camera_metadata
|
26
26
|
|
27
27
|
log = logging.getLogger(__name__)
|
28
28
|
|
@@ -139,7 +139,7 @@ def build_subparser(subparsers) -> None:
|
|
139
139
|
"-l",
|
140
140
|
"--lowercase",
|
141
141
|
default=True,
|
142
|
-
action=
|
142
|
+
action=argparse.BooleanOptionalAction,
|
143
143
|
dest="lowercase",
|
144
144
|
help="lowercase the watermark text",
|
145
145
|
)
|
@@ -200,13 +200,6 @@ def watermark_image(image_filename, args):
|
|
200
200
|
return watermarked_image
|
201
201
|
|
202
202
|
|
203
|
-
def camera_metadata(image_filename):
|
204
|
-
"""Extract camera and model metadata."""
|
205
|
-
exif_tags = extract_exif_tags(image_filename)
|
206
|
-
metadata = f'{exif_tags["Make"]} {exif_tags["Model"]}'
|
207
|
-
return metadata.strip()
|
208
|
-
|
209
|
-
|
210
203
|
def calc_font_size(image, args) -> int:
|
211
204
|
"""Calculate the font size based on the width of the image."""
|
212
205
|
width, _height = image.size
|
@@ -118,8 +118,15 @@ def readme(session: nox.Session) -> None:
|
|
118
118
|
|
119
119
|
|
120
120
|
@nox.session(python="3.13", reuse_venv=True)
|
121
|
-
def release(
|
122
|
-
"""Bump release.
|
121
|
+
def release(session: nox.Session) -> None:
|
122
|
+
"""Bump release.
|
123
|
+
|
124
|
+
To set which part of version explicitly:
|
125
|
+
|
126
|
+
nox -s release -- major
|
127
|
+
nox -s release -- minor
|
128
|
+
nox -s release -- micro (default)
|
129
|
+
"""
|
123
130
|
with open("fotolab/__init__.py", "r", encoding="utf8") as f:
|
124
131
|
tree = ast.parse(f.read())
|
125
132
|
current_version = None
|
@@ -134,11 +141,26 @@ def release(_session: nox.Session) -> None:
|
|
134
141
|
raise ValueError("Missing __version__ variable in __init__.py")
|
135
142
|
|
136
143
|
before_version = Version(current_version)
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
144
|
+
|
145
|
+
(major, minor, micro) = (
|
146
|
+
before_version.major,
|
147
|
+
before_version.minor,
|
148
|
+
before_version.micro,
|
141
149
|
)
|
150
|
+
if "major" in session.posargs:
|
151
|
+
major = major + 1
|
152
|
+
minor = 0
|
153
|
+
micro = 0
|
154
|
+
|
155
|
+
if "minor" in session.posargs:
|
156
|
+
minor = minor + 1
|
157
|
+
micro = 0
|
158
|
+
|
159
|
+
if "micro" in session.posargs or session.posargs == []:
|
160
|
+
micro = micro + 1
|
161
|
+
|
162
|
+
after_version = f"{major}.{minor}.{micro}"
|
163
|
+
|
142
164
|
_search_and_replace(
|
143
165
|
"fotolab/__init__.py", str(before_version), after_version
|
144
166
|
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|