1818
1919import abc
2020import math
21- from typing import cast
21+ from typing import NamedTuple , cast
2222
2323TYPE_CHECKING = False
2424if 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+
4350class 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
8693class RankFilter (Filter ):
@@ -265,96 +272,96 @@ def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore:
265272
266273class 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
277284class 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
286293class 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
295302class 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
304311class 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
313320class 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
322329class 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
331338class 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
340347class 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
349356class 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
360367class Color3DLUT (MultibandFilter ):
0 commit comments