Skip to content

Commit 8f05310

Browse files
committed
Add _FilterArgs NamedTuple to ImageFilter
1 parent 3c7080c commit 8f05310

2 files changed

Lines changed: 31 additions & 24 deletions

File tree

Tests/test_image_filter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_sanity_error(mode: str) -> None:
7676

7777
def test_noop_on_small_images() -> None:
7878
# If image is smaller than the kernel size, return it as-is.
79-
kernel_size: tuple[int, int] = ImageFilter.SMOOTH_MORE.filterargs[0]
79+
kernel_size: tuple[int, int] = ImageFilter.SMOOTH_MORE.filterargs.size
8080
kernel_w, kernel_h = kernel_size
8181
for w in range(1, kernel_w):
8282
for h in range(1, kernel_h):

src/PIL/ImageFilter.py

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
import abc
2020
import math
21-
from typing import cast
21+
from typing import NamedTuple, cast
2222

2323
TYPE_CHECKING = False
2424
if TYPE_CHECKING:
@@ -40,9 +40,16 @@ class MultibandFilter(Filter):
4040
pass
4141

4242

43+
class _FilterArgs(NamedTuple):
44+
size: tuple[int, int]
45+
scale: float
46+
offset: float
47+
kernel: Sequence[float]
48+
49+
4350
class BuiltinFilter(MultibandFilter):
4451
name: str
45-
filterargs: tuple[Any, ...]
52+
filterargs: _FilterArgs
4653

4754
def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore:
4855
if image.mode == "P":
@@ -80,7 +87,7 @@ def __init__(
8087
if size[0] * size[1] != len(kernel):
8188
msg = "not enough coefficients in kernel"
8289
raise ValueError(msg)
83-
self.filterargs = size, scale, offset, kernel
90+
self.filterargs = _FilterArgs(size, scale, offset, kernel)
8491

8592

8693
class RankFilter(Filter):
@@ -265,96 +272,96 @@ def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore:
265272

266273
class BLUR(BuiltinFilter):
267274
name = "Blur"
268-
filterargs = (5, 5), 16, 0, (
275+
filterargs = _FilterArgs(size=(5, 5), scale=16, offset=0, kernel=(
269276
1, 1, 1, 1, 1,
270277
1, 0, 0, 0, 1,
271278
1, 0, 0, 0, 1,
272279
1, 0, 0, 0, 1,
273280
1, 1, 1, 1, 1,
274-
) # fmt: skip
281+
)) # fmt: skip
275282

276283

277284
class CONTOUR(BuiltinFilter):
278285
name = "Contour"
279-
filterargs = (3, 3), 1, 255, (
286+
filterargs = _FilterArgs(size=(3, 3), scale=1, offset=255, kernel=(
280287
-1, -1, -1,
281288
-1, 8, -1,
282289
-1, -1, -1,
283-
) # fmt: skip
290+
)) # fmt: skip
284291

285292

286293
class DETAIL(BuiltinFilter):
287294
name = "Detail"
288-
filterargs = (3, 3), 6, 0, (
295+
filterargs = _FilterArgs(size=(3, 3), scale=6, offset=0, kernel=(
289296
0, -1, 0,
290297
-1, 10, -1,
291298
0, -1, 0,
292-
) # fmt: skip
299+
)) # fmt: skip
293300

294301

295302
class EDGE_ENHANCE(BuiltinFilter):
296303
name = "Edge-enhance"
297-
filterargs = (3, 3), 2, 0, (
304+
filterargs = _FilterArgs(size=(3, 3), scale=2, offset=0, kernel=(
298305
-1, -1, -1,
299306
-1, 10, -1,
300307
-1, -1, -1,
301-
) # fmt: skip
308+
)) # fmt: skip
302309

303310

304311
class EDGE_ENHANCE_MORE(BuiltinFilter):
305312
name = "Edge-enhance More"
306-
filterargs = (3, 3), 1, 0, (
313+
filterargs = _FilterArgs(size=(3, 3), scale=1, offset=0, kernel=(
307314
-1, -1, -1,
308315
-1, 9, -1,
309316
-1, -1, -1,
310-
) # fmt: skip
317+
)) # fmt: skip
311318

312319

313320
class EMBOSS(BuiltinFilter):
314321
name = "Emboss"
315-
filterargs = (3, 3), 1, 128, (
322+
filterargs = _FilterArgs(size=(3, 3), scale=1, offset=128, kernel=(
316323
-1, 0, 0,
317324
0, 1, 0,
318325
0, 0, 0,
319-
) # fmt: skip
326+
)) # fmt: skip
320327

321328

322329
class FIND_EDGES(BuiltinFilter):
323330
name = "Find Edges"
324-
filterargs = (3, 3), 1, 0, (
331+
filterargs = _FilterArgs(size=(3, 3), scale=1, offset=0, kernel=(
325332
-1, -1, -1,
326333
-1, 8, -1,
327334
-1, -1, -1,
328-
) # fmt: skip
335+
)) # fmt: skip
329336

330337

331338
class SHARPEN(BuiltinFilter):
332339
name = "Sharpen"
333-
filterargs = (3, 3), 16, 0, (
340+
filterargs = _FilterArgs(size=(3, 3), scale=16, offset=0, kernel=(
334341
-2, -2, -2,
335342
-2, 32, -2,
336343
-2, -2, -2,
337-
) # fmt: skip
344+
)) # fmt: skip
338345

339346

340347
class SMOOTH(BuiltinFilter):
341348
name = "Smooth"
342-
filterargs = (3, 3), 13, 0, (
349+
filterargs = _FilterArgs(size=(3, 3), scale=13, offset=0, kernel=(
343350
1, 1, 1,
344351
1, 5, 1,
345352
1, 1, 1,
346-
) # fmt: skip
353+
)) # fmt: skip
347354

348355

349356
class SMOOTH_MORE(BuiltinFilter):
350357
name = "Smooth More"
351-
filterargs = (5, 5), 100, 0, (
358+
filterargs = _FilterArgs(size=(5, 5), scale=100, offset=0, kernel=(
352359
1, 1, 1, 1, 1,
353360
1, 5, 5, 5, 1,
354361
1, 5, 44, 5, 1,
355362
1, 5, 5, 5, 1,
356363
1, 1, 1, 1, 1,
357-
) # fmt: skip
364+
)) # fmt: skip
358365

359366

360367
class Color3DLUT(MultibandFilter):

0 commit comments

Comments
 (0)