mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-30 23:47:27 +03:00 
			
		
		
		
	Merge pull request #3201 from landfillbaby/patch-1
unpack_from is faster than unpack of slice
This commit is contained in:
		
						commit
						2be5c035fb
					
				|  | @ -65,7 +65,7 @@ def decode_dxt1(data, alpha=False): | |||
|     for block in range(blocks): | ||||
|         # Decode next 8-byte block. | ||||
|         idx = block * 8 | ||||
|         color0, color1, bits = struct.unpack("<HHI", data[idx:idx + 8]) | ||||
|         color0, color1, bits = struct.unpack_from("<HHI", data, idx) | ||||
| 
 | ||||
|         r0, g0, b0 = unpack_565(color0) | ||||
|         r1, g1, b1 = unpack_565(color1) | ||||
|  | @ -121,10 +121,10 @@ def decode_dxt3(data): | |||
|         idx = block * 16 | ||||
|         block = data[idx:idx + 16] | ||||
|         # Decode next 16-byte block. | ||||
|         bits = struct.unpack("<8B", block[:8]) | ||||
|         color0, color1 = struct.unpack("<HH", block[8:12]) | ||||
|         bits = struct.unpack_from("<8B", block) | ||||
|         color0, color1 = struct.unpack_from("<HH", block, 8) | ||||
| 
 | ||||
|         code, = struct.unpack("<I", block[12:]) | ||||
|         code, = struct.unpack_from("<I", block, 12) | ||||
| 
 | ||||
|         r0, g0, b0 = unpack_565(color0) | ||||
|         r1, g1, b1 = unpack_565(color1) | ||||
|  | @ -174,17 +174,17 @@ def decode_dxt5(data): | |||
|         idx = block * 16 | ||||
|         block = data[idx:idx + 16] | ||||
|         # Decode next 16-byte block. | ||||
|         a0, a1 = struct.unpack("<BB", block[:2]) | ||||
|         a0, a1 = struct.unpack_from("<BB", block) | ||||
| 
 | ||||
|         bits = struct.unpack("<6B", block[2:8]) | ||||
|         bits = struct.unpack_from("<6B", block, 2) | ||||
|         alphacode1 = ( | ||||
|             bits[2] | (bits[3] << 8) | (bits[4] << 16) | (bits[5] << 24) | ||||
|         ) | ||||
|         alphacode2 = bits[0] | (bits[1] << 8) | ||||
| 
 | ||||
|         color0, color1 = struct.unpack("<HH", block[8:12]) | ||||
|         color0, color1 = struct.unpack_from("<HH", block, 8) | ||||
| 
 | ||||
|         code, = struct.unpack("<I", block[12:]) | ||||
|         code, = struct.unpack_from("<I", block, 12) | ||||
| 
 | ||||
|         r0, g0, b0 = unpack_565(color0) | ||||
|         r1, g1, b1 = unpack_565(color1) | ||||
|  |  | |||
|  | @ -29,13 +29,13 @@ def _parse_codestream(fp): | |||
|     siz = hdr + fp.read(lsiz - 2) | ||||
|     lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, xtsiz, ytsiz, \ | ||||
|         xtosiz, ytosiz, csiz \ | ||||
|         = struct.unpack('>HHIIIIIIIIH', siz[:38]) | ||||
|         = struct.unpack_from('>HHIIIIIIIIH', siz) | ||||
|     ssiz = [None]*csiz | ||||
|     xrsiz = [None]*csiz | ||||
|     yrsiz = [None]*csiz | ||||
|     for i in range(csiz): | ||||
|         ssiz[i], xrsiz[i], yrsiz[i] \ | ||||
|             = struct.unpack('>BBB', siz[36 + 3 * i:39 + 3 * i]) | ||||
|             = struct.unpack_from('>BBB', siz, 36 + 3 * i) | ||||
| 
 | ||||
|     size = (xsiz - xosiz, ysiz - yosiz) | ||||
|     if csiz == 1: | ||||
|  | @ -114,9 +114,9 @@ def _parse_jp2_header(fp): | |||
|                     mode = 'RGBA' | ||||
|                 break | ||||
|         elif tbox == b'colr': | ||||
|             meth, prec, approx = struct.unpack('>BBB', content[:3]) | ||||
|             meth, prec, approx = struct.unpack_from('>BBB', content) | ||||
|             if meth == 1: | ||||
|                 cs = struct.unpack('>I', content[3:7])[0] | ||||
|                 cs = struct.unpack_from('>I', content, 3)[0] | ||||
|                 if cs == 16:   # sRGB | ||||
|                     if nc == 1 and (bpc & 0x7f) > 8: | ||||
|                         mode = 'I;16' | ||||
|  |  | |||
|  | @ -133,7 +133,7 @@ class MspDecoder(ImageFile.PyDecoder): | |||
|                     runtype = i8(row[idx]) | ||||
|                     idx += 1 | ||||
|                     if runtype == 0: | ||||
|                         (runcount, runval) = struct.unpack("Bc", row[idx:idx+2]) | ||||
|                         (runcount, runval) = struct.unpack_from("Bc", row, idx) | ||||
|                         img.write(runval * runcount) | ||||
|                         idx += 2 | ||||
|                     else: | ||||
|  |  | |||
|  | @ -11,7 +11,7 @@ | |||
| # See the README file for information on usage and redistribution. | ||||
| # | ||||
| 
 | ||||
| from struct import unpack, pack | ||||
| from struct import unpack_from, pack | ||||
| from ._util import py3 | ||||
| 
 | ||||
| if py3: | ||||
|  | @ -36,7 +36,7 @@ def i16le(c, o=0): | |||
|     c: string containing bytes to convert | ||||
|     o: offset of bytes to convert in string | ||||
|     """ | ||||
|     return unpack("<H", c[o:o+2])[0] | ||||
|     return unpack_from("<H", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| def si16le(c, o=0): | ||||
|  | @ -46,7 +46,7 @@ def si16le(c, o=0): | |||
|     c: string containing bytes to convert | ||||
|     o: offset of bytes to convert in string | ||||
|     """ | ||||
|     return unpack("<h", c[o:o+2])[0] | ||||
|     return unpack_from("<h", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| def i32le(c, o=0): | ||||
|  | @ -56,7 +56,7 @@ def i32le(c, o=0): | |||
|     c: string containing bytes to convert | ||||
|     o: offset of bytes to convert in string | ||||
|     """ | ||||
|     return unpack("<I", c[o:o+4])[0] | ||||
|     return unpack_from("<I", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| def si32le(c, o=0): | ||||
|  | @ -66,15 +66,15 @@ def si32le(c, o=0): | |||
|     c: string containing bytes to convert | ||||
|     o: offset of bytes to convert in string | ||||
|     """ | ||||
|     return unpack("<i", c[o:o+4])[0] | ||||
|     return unpack_from("<i", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| def i16be(c, o=0): | ||||
|     return unpack(">H", c[o:o+2])[0] | ||||
|     return unpack_from(">H", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| def i32be(c, o=0): | ||||
|     return unpack(">I", c[o:o+4])[0] | ||||
|     return unpack_from(">I", c, o)[0] | ||||
| 
 | ||||
| 
 | ||||
| # Output, le = little endian, be = big endian | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user