Skip to content

Commit

Permalink
Merge d1bbb78 into 6eb534b
Browse files Browse the repository at this point in the history
  • Loading branch information
radarhere committed Dec 8, 2017
2 parents 6eb534b + d1bbb78 commit 5684953
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 21 deletions.
35 changes: 14 additions & 21 deletions PIL/GdImageFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,17 +24,10 @@


from . import ImageFile, ImagePalette
from ._binary import i16be as i16
from ._util import isPath
from ._binary import i8, i16be as i16, i32be as i32

__version__ = "0.1"

try:
import builtins
except ImportError:
import __builtin__
builtins = __builtin__


##
# Image plugin for the GD uncompressed format. Note that this format
Expand All @@ -50,19 +43,25 @@ class GdImageFile(ImageFile.ImageFile):
def _open(self):

# Header
s = self.fp.read(775)
s = self.fp.read(1037)

if not i16(s[:2]) in [65534, 65535]:
raise SyntaxError("Not a valid GD 2.x .gd file")

self.mode = "L" # FIXME: "P"
self.size = i16(s[0:2]), i16(s[2:4])
self.size = i16(s[2:4]), i16(s[4:6])

trueColor = i8(s[6])
trueColorOffset = 2 if trueColor else 0

# transparency index
tindex = i16(s[5:7])
tindex = i32(s[7+trueColorOffset:7+trueColorOffset+4])
if tindex < 256:
self.info["transparent"] = tindex
self.info["transparency"] = tindex

self.palette = ImagePalette.raw("RGB", s[7:])
self.palette = ImagePalette.raw("XBGR", s[7+trueColorOffset+4:7+trueColorOffset+4+256*4])

self.tile = [("raw", (0, 0)+self.size, 775, ("L", 0, -1))]
self.tile = [("raw", (0, 0)+self.size, 7+trueColorOffset+4+256*4, ("L", 0, 1))]


def open(fp, mode="r"):
Expand All @@ -78,13 +77,7 @@ def open(fp, mode="r"):
if mode != "r":
raise ValueError("bad mode")

if isPath(fp):
filename = fp
fp = builtins.open(fp, "rb")
else:
filename = ""

try:
return GdImageFile(fp, filename)
return GdImageFile(fp)
except SyntaxError:
raise IOError("cannot identify this image file")
Binary file added Tests/images/hopper.gd
Binary file not shown.
28 changes: 28 additions & 0 deletions Tests/test_file_gd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from helper import unittest, PillowTestCase

from PIL import GdImageFile

import io

TEST_GD_FILE = "Tests/images/hopper.gd"


class TestFileGd(PillowTestCase):

def test_sanity(self):
im = GdImageFile.open(TEST_GD_FILE)
self.assertEqual(im.size, (128, 128))
self.assertEqual(im.format, "GD")

def test_bad_mode(self):
self.assertRaises(ValueError,
GdImageFile.open, TEST_GD_FILE, 'bad mode')

def test_invalid_file(self):
invalid_file = "Tests/images/flower.jpg"

self.assertRaises(IOError, GdImageFile.open, invalid_file)


if __name__ == '__main__':
unittest.main()

0 comments on commit 5684953

Please sign in to comment.