Skip to content

Commit bda7572

Browse files
author
bstorm
committed
Merge remote-tracking branch 'origin/master' into ppm
2 parents f74c329 + 1663263 commit bda7572

File tree

6 files changed

+71
-3
lines changed

6 files changed

+71
-3
lines changed

adafruit_imageload/__init__.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,3 @@ def load(filename, *, bitmap=None, palette=None):
5555
return pnm.load(f, header, bitmap=bitmap, palette=palette)
5656
else:
5757
raise RuntimeError("Unsupported image format")
58-

adafruit_imageload/pnm/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,9 @@ def load(f, header, *, bitmap=None, palette=None):
4141
while True:
4242
# We have all we need at length 3
4343
if len(pnm_header) == 3:
44-
f.read(1)
4544
break
4645
if magic_number.startswith(b"P1") or magic_number.startswith(b"P4"):
4746
if len(pnm_header) == 2:
48-
f.read(1)
4947
from . import pbm
5048

5149
return pbm.load(
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import logging
2+
3+
4+
5+
def load(f, magic_number, header, bitmap = None , palette = None):
6+
# type: (stream, str, list, c_obj, c_obj) -> bitmap, palette
7+
height = header[0]
8+
width = header[1]
9+
logging.info(f'height: {height}')
10+
if palette:
11+
palette = palette(1)
12+
if bitmap:
13+
bitmap = bitmap(header[0], header[1], 1)
14+
for line in range(height-1,-1,-1):
15+
16+
chunk = f.read(width)
17+
#logging.info(chunk)
18+
return bitmap, palette
19+
20+
#while not has 3 signnif

adafruit_imageload/tests/__init__.py

Whitespace-only changes.
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from unittest import TestCase
2+
from adafruit_imageload import pnm
3+
from io import BytesIO
4+
import logging
5+
import os
6+
7+
class Bitmap(object):
8+
def __init__(self, width, height, colors):
9+
self.width = width
10+
self.height = height
11+
self.colors = colors
12+
13+
logging.getLogger().setLevel(logging.INFO)
14+
15+
class TestPnmLoad(TestCase):
16+
17+
def test_load_fails_with_no_header_data(self):
18+
f = BytesIO(b"some initial binary data: \x00\x01")
19+
try:
20+
pnm.load(f, b'P1', bitmap=Bitmap)
21+
self.fail('should have failed')
22+
except Exception as e:
23+
if "Unsupported image format" not in str(e):
24+
raise
25+
26+
def test_load_works_p1_ascii(self):
27+
test_file = os.path.join(os.path.dirname(__file__), '..', '..', 'examples', 'images', 'netpbm_p1_mono.pbm')
28+
with open(test_file, 'rb') as f:
29+
bitmap, palette = pnm.load(f, b'P1', bitmap=Bitmap)
30+
self.assertTrue(isinstance(bitmap, Bitmap), bitmap)
31+
self.assertEqual(1, bitmap.colors)
32+
self.assertEqual(13, bitmap.width)
33+
self.assertEqual(21, bitmap.height)
34+
35+
def test_load_works_p4_binary(self):
36+
test_file = os.path.join(os.path.dirname(__file__), '..', '..', 'examples', 'images', 'netpbm_p4_mono.pbm')
37+
with open(test_file, 'rb') as f:
38+
bitmap, palette = pnm.load(f, b'P4', bitmap=Bitmap)
39+
self.assertTrue(isinstance(bitmap, Bitmap))
40+
self.assertEqual(1, bitmap.colors)
41+
self.assertEqual(8, bitmap.width)
42+
self.assertEqual(8, bitmap.height)
43+
44+
def test_load_works_p4_binary_high_res(self):
45+
test_file = os.path.join(os.path.dirname(__file__), '..', '..', 'examples', 'images', 'MARBLES.PBM')
46+
with open(test_file, 'rb') as f:
47+
bitmap, palette = pnm.load(f, b'P4', bitmap=Bitmap)
48+
self.assertTrue(isinstance(bitmap, Bitmap))
49+
self.assertEqual(1, bitmap.colors)
50+
self.assertEqual(1152, bitmap.width)
51+
self.assertEqual(813, bitmap.height)

examples/images/MARBLES.PBM

114 KB
Binary file not shown.

0 commit comments

Comments
 (0)