Skip to content

Commit 73a4e73

Browse files
committed
Condense PIL
1 parent 31c7338 commit 73a4e73

File tree

4 files changed

+36
-61
lines changed

4 files changed

+36
-61
lines changed

tivars/PIL/TI8caPlugin.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from PIL import Image
21
from tivars import TIImage
32
from .common import *
43

@@ -10,24 +9,8 @@ class TI8caImageFile(TIImageFile):
109
format_description = "TI (e)Z80 Image Format"
1110

1211

13-
class TI8caEncoder(ImageFile.PyEncoder):
14-
_pushes_fd = True
15-
16-
def encode(self, bufsize):
17-
img = TIImage()
18-
img.load_array(np.asarray(self.im).reshape((img.height, img.width)).tolist())
19-
data = img.export().bytes()
20-
21-
return len(data), 0, data
22-
23-
24-
def save(im, fp, *args, **kwargs):
25-
ImageFile._save(im, fp, [(TI8caImageFile.format, (0, 0) + im.size, 0, im.mode)])
26-
12+
class TI8caEncoder(TIEncoder):
13+
_T = TIImage
2714

28-
Image.register_open(TI8caImageFile.format, TI8caImageFile, accept)
29-
Image.register_extension(TI8caImageFile.format, "." + TI8caImageFile.format)
30-
Image.register_decoder(TI8caImageFile.format, TIDecoder)
3115

32-
Image.register_save(TI8caImageFile.format, save)
33-
Image.register_encoder(TI8caImageFile.format, TI8caEncoder)
16+
register(TI8caImageFile, TI8caEncoder)

tivars/PIL/TI8ciPlugin.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from PIL import Image
21
from tivars import TIPicture
32
from .common import *
43

@@ -10,24 +9,8 @@ class TI8ciImageFile(TIImageFile):
109
format_description = "TI (e)Z80 Color Picture Format"
1110

1211

13-
class TI8ciEncoder(ImageFile.PyEncoder):
14-
_pushes_fd = True
15-
16-
def encode(self, bufsize):
17-
img = TIPicture()
18-
img.load_array(np.asarray(self.im).reshape((img.height, img.width)).tolist())
19-
data = img.export().bytes()
20-
21-
return len(data), 0, data
22-
23-
24-
def save(im, fp, *args, **kwargs):
25-
ImageFile._save(im, fp, [(TI8ciImageFile.format, (0, 0) + im.size, 0, im.mode)])
26-
12+
class TI8ciEncoder(TIEncoder):
13+
_T = TIPicture
2714

28-
Image.register_open(TI8ciImageFile.format, TI8ciImageFile, accept)
29-
Image.register_extension(TI8ciImageFile.format, "." + TI8ciImageFile.format)
30-
Image.register_decoder(TI8ciImageFile.format, TIDecoder)
3115

32-
Image.register_save(TI8ciImageFile.format, save)
33-
Image.register_encoder(TI8ciImageFile.format, TI8ciEncoder)
16+
register(TI8ciImageFile, TI8ciEncoder)

tivars/PIL/TI8xiPlugin.py

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from PIL import Image
21
from tivars import TIMonoPicture
32
from .common import *
43

@@ -10,24 +9,8 @@ class TI8xiImageFile(TIImageFile):
109
format_description = "TI (e)Z80 Monochrome Picture Format"
1110

1211

13-
class TI8xiEncoder(ImageFile.PyEncoder):
14-
_pushes_fd = True
15-
16-
def encode(self, bufsize):
17-
img = TIMonoPicture()
18-
img.load_array(np.asarray(self.im).reshape((img.height, img.width)).tolist())
19-
data = img.export().bytes()
20-
21-
return len(data), 0, data
22-
23-
24-
def save(im, fp, *args, **kwargs):
25-
ImageFile._save(im, fp, [(TI8xiImageFile.format, (0, 0) + im.size, 0, im.mode)])
26-
12+
class TI8xiEncoder(TIEncoder):
13+
_T = TIMonoPicture
2714

28-
Image.register_open(TI8xiImageFile.format, TI8xiImageFile, accept)
29-
Image.register_extension(TI8xiImageFile.format, "." + TI8xiImageFile.format)
30-
Image.register_decoder(TI8xiImageFile.format, TIDecoder)
3115

32-
Image.register_save(TI8xiImageFile.format, save)
33-
Image.register_encoder(TI8xiImageFile.format, TI8xiEncoder)
16+
register(TI8xiImageFile, TI8xiEncoder)

tivars/PIL/common.py

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import numpy as np
22
import warnings
33

4-
from PIL import ImageFile
4+
from PIL import Image, ImageFile
55
from tivars import TIVar
66
from tivars.types.picture import PictureEntry
77

@@ -10,6 +10,15 @@ def accept(prefix):
1010
return prefix[:8] in (b"**TI82**", b"**TI83**", b"**TI83F*")
1111

1212

13+
def register(file, encoder):
14+
Image.register_open(file.format, file, accept)
15+
Image.register_extension(file.format, "." + file.format)
16+
Image.register_decoder(file.format, TIDecoder)
17+
18+
Image.register_save(file.format, file._save)
19+
Image.register_encoder(file.format, encoder)
20+
21+
1322
class TIImageFile(ImageFile.ImageFile):
1423
_T = PictureEntry
1524

@@ -31,6 +40,10 @@ def _open(self):
3140

3241
self.tile = [(self.format, (0, 0) + self.size, 0, None)]
3342

43+
@classmethod
44+
def _save(cls, im, fp, format=None, **params):
45+
ImageFile._save(im, fp, format, [(cls.format, (0, 0) + im.size, 0, im.mode)])
46+
3447

3548
class TIDecoder(ImageFile.PyDecoder):
3649
def decode(self, buffer):
@@ -39,3 +52,16 @@ def decode(self, buffer):
3952
self.set_as_raw(np.asarray(var.entries[0].array(), dtype=np.uint8))
4053

4154
return -1, 0
55+
56+
57+
class TIEncoder(ImageFile.PyEncoder):
58+
_pushes_fd = True
59+
60+
_T = PictureEntry
61+
62+
def encode(self, bufsize):
63+
img = self._T()
64+
img.load_array(np.asarray(self.im).reshape((img.height, img.width)).tolist())
65+
data = img.export().bytes()
66+
67+
return len(data), 0, data

0 commit comments

Comments
 (0)