avoid divisions to keep integer

This commit is contained in:
Mickael B 2017-07-22 11:00:15 -04:00 committed by Eric Soroos
parent bb889a59d6
commit e162963064
2 changed files with 13 additions and 12 deletions

View File

@ -200,7 +200,7 @@ class ImageFile(Image.Image):
for decoder_name, extents, offset, args in self.tile: for decoder_name, extents, offset, args in self.tile:
decoder = Image._getdecoder(self.mode, decoder_name, decoder = Image._getdecoder(self.mode, decoder_name,
args, self.decoderconfig) args, self.decoderconfig)
seek(int(offset)) seek(offset)
decoder.setimage(self.im, extents) decoder.setimage(self.im, extents)
if decoder.pulls_fd: if decoder.pulls_fd:
decoder.setfd(self.fp) decoder.setfd(self.fp)

View File

@ -45,8 +45,8 @@ class SgiImageFile(ImageFile.ImageFile):
def _open(self): def _open(self):
# HEAD # HEAD
offset = 512 headlen = 512
s = self.fp.read(offset) s = self.fp.read(headlen)
# magic number : 474 # magic number : 474
if i16(s) != 474: if i16(s) != 474:
@ -55,8 +55,8 @@ class SgiImageFile(ImageFile.ImageFile):
# compression : verbatim or RLE # compression : verbatim or RLE
compression = i8(s[2]) compression = i8(s[2])
# depth : 1 or 2 bytes (8bits or 16bits) # bpc : 1 or 2 bytes (8bits or 16bits)
depth = i8(s[3]) * 8 bpc = i8(s[3])
# dimension : 1, 2 or 3 (depending on xsize, ysize and zsize) # dimension : 1, 2 or 3 (depending on xsize, ysize and zsize)
dimension = i16(s[4:]) dimension = i16(s[4:])
@ -71,14 +71,14 @@ class SgiImageFile(ImageFile.ImageFile):
zsize = i16(s[10:]) zsize = i16(s[10:])
# layout # layout
layout = depth, dimension, zsize layout = bpc, dimension, zsize
# determine mode from bits/zsize # determine mode from bits/zsize
if layout == (8, 2, 1) or layout == (8, 1, 1): if layout == (1, 2, 1) or layout == (1, 1, 1):
self.mode = "L" self.mode = "L"
elif layout == (8, 3, 3): elif layout == (1, 3, 3):
self.mode = "RGB" self.mode = "RGB"
elif layout == (8, 3, 4): elif layout == (1, 3, 4):
self.mode = "RGBA" self.mode = "RGBA"
else: else:
raise ValueError("Unsupported SGI image mode") raise ValueError("Unsupported SGI image mode")
@ -90,16 +90,17 @@ class SgiImageFile(ImageFile.ImageFile):
# decoder info # decoder info
if compression == 0: if compression == 0:
pagesize = xsize * ysize * (depth / 8) pagesize = xsize * ysize * bpc
self.tile = [] self.tile = []
offset = headlen
for layer in self.mode: for layer in self.mode:
self.tile.append( self.tile.append(
("raw", (0, 0) + self.size, ("raw", (0, 0) + self.size,
offset, (layer, 0, orientation))) offset, (layer, 0, orientation)))
offset = offset + pagesize offset += pagesize
elif compression == 1: elif compression == 1:
self.tile = [("sgi_rle", (0, 0) + self.size, self.tile = [("sgi_rle", (0, 0) + self.size,
offset, (self.mode, orientation, depth))] headlen, (self.mode, orientation, bpc * 8))]
def _save(im, fp, filename): def _save(im, fp, filename):