Exemplo n.º 1
0
 def show1IFDTag(self, index: int):
     index -= 1
     tag = self.s10_exif_1IFD_3tags[index]
     #
     bayt_length = tag.t2_type_2obj.t3_length * tag.t3_count_2int
     print()
     print("\t" + "#" * 63)
     print("\tTag No          : " + str(index + 1))
     print("\tTag (Hex)       : '" + tag.t1_tag_1bytes.hex(sep=' ') + "'")
     print("\tTag Name        : " + tag.t1_tag_2str)
     print("")
     print("\tData Type (Hex) : " + tag.t2_type_1bytes.hex(sep=' '))
     print("\tData Type (str) : " + tag.t2_type_2obj.t2_name)
     print("\tData Length     : " + str(bayt_length) + " bayt")
     if tag.t4_value_offset_3offset_bool:
         start_offset = clength(tag.t4_value_offset_1bytes) + 10
         print("")
         print("\t(Data)")
         s4hex(dataBytes=self.s11_data[start_offset:start_offset +
                                       bayt_length],
               columnSize=20)
     else:
         print("")
         print("\t(Data)")
         s4hex(dataBytes=tag.t4_value_offset_1bytes, columnSize=20)
     print("\t" + "#" * 63)
    def showAll(self):
        txt1_format = "\t{:<21} : '{}'   {}"
        txt1_tmp1 = "(-" + Kind.findType(
            bytesData=self.s0_app_marker).shortname + "-)"
        txt1 = txt1_format.format('App Marker',
                                  self.s0_app_marker.hex(sep=' '), txt1_tmp1)
        txt2_tmp1 = '(' + str(clength(data=self.s1_app_length)) + ' bayt)'
        txt2 = txt1_format.format('App Length',
                                  self.s1_app_length.hex(sep=' '), txt2_tmp1)
        txt3 = txt1_format.format('JFXX Marker',
                                  self.s2_jfxx_marker.hex(sep=' '),
                                  "'JFXX\\x00'")

        if self.s3_jfxx_thumbnail_format == b'10':
            txt4_tmp1 = '(-JPEG format-)'
        elif self.s3_jfxx_thumbnail_format == b'11':
            txt4_tmp1 = '(-1 byte per pixel palettized format-)'
        elif self.s3_jfxx_thumbnail_format == b'13':
            txt4_tmp1 = '(-3 byte per pixel RGB format-)'
        else:
            txt4_tmp1 = '(?)'
        txt4 = txt1_format.format('JFXX Thumbnail Format',
                                  self.s3_jfxx_thumbnail_format.hex(),
                                  txt4_tmp1)

        print(txt1)
        print(txt2)
        print(txt3)
        print(txt4)
        s2hex(dataBytes=self.s4_jfxx_thumbnail_data,
              dataName="'JFXX Thumbnail Data'",
              columnSize=20)
Exemplo n.º 3
0
 def showGpsIFDTags(self):
     count = 1
     for tag in self.s9_exif_GpsIFD_3tags:
         bayt_length = tag.t2_type_2obj.t3_length * tag.t3_count_2int
         print()
         print("\t" + "#" * 63)
         print("\tTag No          : " + str(count))
         print("\tTag (Hex)       : '" + tag.t1_tag_1bytes.hex(sep=' ') +
               "'")
         print("\tTag Name        : " + tag.t1_tag_2str)
         print("")
         print("\tData Type (Hex) : " + tag.t2_type_1bytes.hex(sep=' '))
         print("\tData Type (str) : " + tag.t2_type_2obj.t2_name)
         print("\tData Length     : " + str(bayt_length) + " bayt")
         if tag.t4_value_offset_3offset_bool:
             start_offset = clength(tag.t4_value_offset_1bytes) + 10
             print("")
             print("\t(Data)")
             s4hex(dataBytes=self.s11_data[start_offset:start_offset +
                                           bayt_length],
                   columnSize=20)
         else:
             print("")
             print("\t(Data)")
             s4hex(dataBytes=tag.t4_value_offset_1bytes, columnSize=20)
         print("\t" + "#" * 63)
         count += 1
 def find(self):
     data_length = len(self.s4_all_data)
     ii_start = 18
     while True:
         if data_length >= (ii_start + 12):
             if self.s4_all_data[ii_start:ii_start + 4] == b'8BIM':
                 item = photoshoptags()
                 item.t0_index = ii_start
                 item.t1_identifier_mark = self.s4_all_data[
                     ii_start:ii_start + 4]
                 item.t2_tag = self.s4_all_data[ii_start + 4:ii_start + 6]
                 item.t3_padding = self.s4_all_data[ii_start + 6:ii_start +
                                                    8]
                 item.t4_count = self.s4_all_data[ii_start + 8:ii_start +
                                                  12]
                 item.t4_count_int = clength(data=item.t4_count)
                 ii_start += 12
                 item.t5_data = self.s4_all_data[ii_start:(
                     ii_start + item.t4_count_int)]
                 self.s3_photoshop_tags.append(item)
                 ii_start += item.t4_count_int
             else:
                 if self.s4_all_data[ii_start:ii_start + 1] == b'\x00':
                     ii_start += 1
                 else:
                     break
         else:
             break
 def __init__(self, bytesData: bytes):
     self.s0_app_marker = bytesData[0:2]
     self.s1_app_length = bytesData[2:4]
     self.s1_app_length_int = clength(data=self.s1_app_length)
     self.s2_adobe_marker = bytesData[4:10]
     self.s2_adobe_marker_str = 'Adobe\\00'
     self.s3_all_data = bytesData
 def __init__(self, bytesData: bytes):
     self.s0_app_marker = bytesData[0:2]
     self.s1_app_length = bytesData[2:4]
     self.s1_app_length_int = clength(data=self.s1_app_length)
     self.s2_photoshop_marker = bytesData[4:18]
     self.s2_photoshop_marker_str = self.s2_photoshop_marker.decode(
         encoding='utf-8', errors='replace') + '\\00'
     self.s3_photoshop_tags = []
     self.s4_all_data = bytesData
     self.find()
Exemplo n.º 7
0
    def all(self) -> str:
        txt1_format = "\t{:<20} : '{}'   {}"
        txt1_tmp1 = "(-" + Kind.findType(
            bytesData=self.s0_app_marker).shortname + "-)\n"
        txt1 = txt1_format.format('App Marker',
                                  self.s0_app_marker.hex(sep=' '), txt1_tmp1)
        txt2_tmp1 = '(' + str(clength(data=self.s1_app_length)) + ' bayt)\n'
        txt2 = txt1_format.format('App Length',
                                  self.s1_app_length.hex(sep=' '), txt2_tmp1)
        txt3 = txt1_format.format('JFIF Marker',
                                  self.s2_jfif_marker.hex(sep=' '),
                                  "'JFIF\\x00'\n")
        txt4_tmp1 = self.s3_jfif_version_1_major.hex(
        ) + ' ' + self.s3_jfif_version_2_minor.hex()
        txt4_tmp2 = '(' + str(ord(self.s3_jfif_version_1_major)) + '.' + str(
            ord(self.s3_jfif_version_2_minor)) + ')\n'
        txt4 = txt1_format.format('JFIF Version', txt4_tmp1, txt4_tmp2)
        if self.s4_jfif_density_units.lower() == '00':
            txt5_tmp1 = '(-No Units:::Pixel Aspect Ratio-)\n'
        elif self.s4_jfif_density_units.hex().lower() == '01':
            txt5_tmp1 = '(-Pixels Per Inch [2.54 cm]-)\n'
        elif self.s4_jfif_density_units.hex().lower() == '02':
            txt5_tmp1 = '(-Pixels Per Centimeter-)\n'
        else:
            txt5_tmp1 = '(?)\n'
        txt5 = txt1_format.format('JFIF Density Units',
                                  self.s4_jfif_density_units.hex(), txt5_tmp1)
        txt6 = txt1_format.format('JFIF X Density',
                                  self.s5_jfif_xdensity.hex(sep=' '), '\n')
        txt7 = txt1_format.format('JFIF Y Density',
                                  self.s6_jfif_ydensity.hex(sep=' '), '\n')
        txt8 = txt1_format.format('JFIF X Thumbnail',
                                  self.s7_jfif_xthumbnail.hex(sep=' '), '\n')
        txt9 = txt1_format.format('JFIF Y Thumbnail',
                                  self.s8_jfif_ythumbnail.hex(sep=' '), '\n')

        thumbnail_length = len(self.s9_jfif_thumbnaildata)
        txt2_format = "\t{:<20} : '{}"
        txt10 = ''
        for kk in range(0, thumbnail_length):
            if kk % 10 == 0:
                if kk == 0:
                    txt10 = txt2_format.format(
                        'JFIF Thumbnail Data',
                        self.s9_jfif_thumbnaildata[kk:kk + 1].hex())
                else:
                    txt10 += "'\n" + txt2_format.format(
                        '', self.s9_jfif_thumbnaildata[kk:kk + 1].hex())
            else:
                txt10 += ' ' + self.s9_jfif_thumbnaildata[kk:kk + 1].hex()
            if kk == thumbnail_length - 1:
                txt10 += "'"

        result = txt1 + txt2 + txt3 + txt4 + txt5 + txt6 + txt7 + txt8 + txt9 + txt10
        return result
 def __init__(self, bytesData: bytes):
     self.s0_app_marker = bytesData[0:2]
     self.s1_app_length = bytesData[2:4]
     self.s1_app_length_int = clength(data=self.s1_app_length)
     self.s2_xmp_marker = bytesData[4:33]
     self.s2_xmp_marker_str = 'http://ns.adobe.com/xap/1.0/\\x00'
     self.s3_xmp_encoding_bytes = b''
     self.s3_xmp_encoding_int = -1
     self.s3_xmp_encoding_hex_str = ''
     self.s3_xmp_encoding_str = ''
     self.s4_xmp_data = bytesData[33:]
     self.encoding()
Exemplo n.º 9
0
    def showHeader(self):
        txt1 = '\tApp Marker                             : ' + self.s0_app_marker.hex(
            sep=' ') + "  '" + Kind.findType(
                self.s0_app_marker).shortname + "'"
        txt2 = '\tApp Length                             : ' + self.s1_app_length.hex(
            sep=' ') + '  (' + str(self.s1_app_length_int) + ' bayt)'
        txt3 = '\tExif Marker                            : ' + self.s2_exif_marker.hex(
            sep=' ') + "  '" + self.s2_exif_marker_str + "'"
        txt4 = '\tExif Byte Order                        : ' + self.s3_exif_byte_order.hex(
            sep=' ') + "  '" + self.s3_exif_byte_order.decode(
                encoding='Ascii',
                errors='replace') + "'  '" + self.s3_exif_byte_order_str + "'"
        txt5 = '\tExif Version Number                    : ' + self.s4_exif_version_number.hex(
            sep=' ') + "  (" + str(clength(self.s4_exif_version_number)) + ")"
        txt6 = '\tExif IFD                               : ' + self.s5_exif_image_file_directory_ifd.hex(
            sep=' ')
        txt7 = "\tExif 'OIFD' Tags Count                 : " + str(
            len(self.s6_exif_0IFD_3tags))
        txt8 = "\tExif 'Exif IFD' Tags Count             : " + str(
            len(self.s7_exif_ExifIFD_3tags))
        txt9 = "\tExif 'Interoperability IFD' Tags Count : " + str(
            len(self.s8_exif_InterOperability_3tags))
        txt10 = "\tExif 'GPS IFD' Tags Count              : " + str(
            len(self.s9_exif_GpsIFD_3tags))
        txt11 = "\tExif '1IFD' Tags Count                 : " + str(
            len(self.s10_exif_1IFD_3tags))
        txt12 = "\t                                     +           "
        txt13 = "\t                                     ----------- "
        txt14 = "\tExif Total Tags Count                  : " + str(
            len(self.s6_exif_0IFD_3tags) + len(self.s7_exif_ExifIFD_3tags) +
            len(self.s8_exif_InterOperability_3tags) +
            len(self.s9_exif_GpsIFD_3tags) + len(self.s10_exif_1IFD_3tags))

        print(txt1)
        print(txt2)
        print(txt3)
        print(txt4)
        print(txt5)
        print(txt6)
        print()
        print(txt7)
        print(txt8)
        print(txt9)
        print(txt10)
        print(txt11)
        print(txt12)
        print(txt13)
        print(txt14)
Exemplo n.º 10
0
 def showAll(self):
     txt1_format = "\t{:<20} : '{}'   {}"
     txt1_tmp1 = "(-" + Kind.findType(
         bytesData=self.s0_app_marker).shortname + "-)"
     txt1 = txt1_format.format('App Marker',
                               self.s0_app_marker.hex(sep=' '), txt1_tmp1)
     txt2_tmp1 = '(' + str(clength(data=self.s1_app_length)) + ' bayt)'
     txt2 = txt1_format.format('App Length',
                               self.s1_app_length.hex(sep=' '), txt2_tmp1)
     txt3 = txt1_format.format('JFIF Marker',
                               self.s2_jfif_marker.hex(sep=' '),
                               "'JFIF\\x00'")
     txt4_tmp1 = self.s3_jfif_version_1_major.hex(
     ) + ' ' + self.s3_jfif_version_2_minor.hex()
     txt4_tmp2 = '(' + str(ord(self.s3_jfif_version_1_major)) + '.' + str(
         ord(self.s3_jfif_version_2_minor)) + ')'
     txt4 = txt1_format.format('JFIF Version', txt4_tmp1, txt4_tmp2)
     if self.s4_jfif_density_units.lower() == '00':
         txt5_tmp1 = '(-No Units:::Pixel Aspect Ratio-)'
     elif self.s4_jfif_density_units.hex().lower() == '01':
         txt5_tmp1 = '(-Pixels Per Inch [2.54 cm]-)'
     elif self.s4_jfif_density_units.hex().lower() == '02':
         txt5_tmp1 = '(-Pixels Per Centimeter-)'
     else:
         txt5_tmp1 = '(?)'
     txt5 = txt1_format.format('JFIF Density Units',
                               self.s4_jfif_density_units.hex(), txt5_tmp1)
     txt6 = txt1_format.format('JFIF X Density',
                               self.s5_jfif_xdensity.hex(sep=' '), '')
     txt7 = txt1_format.format('JFIF Y Density',
                               self.s6_jfif_ydensity.hex(sep=' '), '')
     txt8 = txt1_format.format('JFIF X Thumbnail',
                               self.s7_jfif_xthumbnail.hex(sep=' '), '')
     txt9 = txt1_format.format('JFIF Y Thumbnail',
                               self.s8_jfif_ythumbnail.hex(sep=' '), '')
     print(txt1)
     print(txt2)
     print(txt3)
     print(txt4)
     print(txt5)
     print(txt6)
     print(txt7)
     print(txt8)
     print(txt9)
     s2hex(dataBytes=self.s9_jfif_thumbnaildata,
           dataName="'JFIF Thumbnail Data'",
           columnSize=20)
Exemplo n.º 11
0
    def all(self) -> str:
        txt1_format = "\t{:<21} : '{}'   {}\n"
        txt1_tmp1 = "(-" + Kind.findType(
            bytesData=self.s0_app_marker).shortname + "-)"
        txt1 = txt1_format.format('App Marker',
                                  self.s0_app_marker.hex(sep=' '), txt1_tmp1)
        txt2_tmp1 = '(' + str(clength(data=self.s1_app_length)) + ' bayt)'
        txt2 = txt1_format.format('App Length',
                                  self.s1_app_length.hex(sep=' '), txt2_tmp1)
        txt3 = txt1_format.format('JFXX Marker',
                                  self.s2_jfxx_marker.hex(sep=' '),
                                  "'JFXX\\x00'")

        if self.s3_jfxx_thumbnail_format == b'10':
            txt4_tmp1 = '(-JPEG format-)'
        elif self.s3_jfxx_thumbnail_format == b'11':
            txt4_tmp1 = '(-1 byte per pixel palettized format-)'
        elif self.s3_jfxx_thumbnail_format == b'13':
            txt4_tmp1 = '(-3 byte per pixel RGB format-)'
        else:
            txt4_tmp1 = '(?)'
        txt4 = txt1_format.format('JFXX Thumbnail Format',
                                  self.s3_jfxx_thumbnail_format.hex(),
                                  txt4_tmp1)
        thumbnail_length = len(self.s4_jfxx_thumbnail_data)
        txt2_format = "\t{:<21} : '{}"
        txt5 = ''
        for kk in range(0, thumbnail_length):
            if kk % 10 == 0:
                if kk == 0:
                    txt5 = txt2_format.format(
                        'JFIF Thumbnail Data',
                        self.s4_jfxx_thumbnail_data[kk:kk + 1].hex())
                else:
                    txt5 += "'\n" + txt2_format.format(
                        '', self.s4_jfxx_thumbnail_data[kk:kk + 1].hex())
            else:
                txt5 += ' ' + self.s4_jfxx_thumbnail_data[kk:kk + 1].hex()
            if kk == thumbnail_length - 1:
                txt5 += "'"

        result = txt1 + txt2 + txt3 + txt4 + txt5
        return result
Exemplo n.º 12
0
 def assignExifTag(bytesData: bytes):
     item = exif_Tag()
     #
     item.t1_tag_1bytes = bytesData[0:2]
     item.t2_type_1bytes = bytesData[2:4]
     item.t3_count_1bytes = bytesData[4:8]
     item.t4_value_offset_1bytes = bytesData[8:12]
     #
     item.t2_type_2obj = exif_Data_Type.find(item.t2_type_1bytes)
     item.t3_count_2int = clength(item.t3_count_1bytes)
     item.t3_count_3baytslength = item.t3_count_2int * item.t2_type_2obj.t3_length
     #
     if item.t1_tag_1bytes == b'\x87\x69':
         item.t1_tag_2str = 'Exif IFD'
         item.t1_tag_3bool = True
         item.t4_value_offset_2int = 1
         item.t4_value_offset_3offset_bool = True
         item.t4_value_offset_4type_str = 'OFFSET'
     elif item.t1_tag_1bytes == b'\xA0\x05':
         item.t1_tag_2str = 'Interoperability IFD'
         item.t1_tag_3bool = True
         item.t4_value_offset_2int = 1
         item.t4_value_offset_3offset_bool = True
         item.t4_value_offset_4type_str = 'OFFSET'
     elif item.t1_tag_1bytes == b'\x88\x25':
         item.t1_tag_2str = 'GPS IFD'
         item.t1_tag_3bool = True
         item.t4_value_offset_2int = 1
         item.t4_value_offset_3offset_bool = True
         item.t4_value_offset_4type_str = 'OFFSET'
     elif item.t3_count_3baytslength > 4:
         item.t4_value_offset_2int = 1
         item.t4_value_offset_3offset_bool = True
         item.t4_value_offset_4type_str = 'OFFSET'
     elif item.t3_count_3baytslength <= 4:
         item.t4_value_offset_2int = 2
         item.t4_value_offset_3offset_bool = False
         item.t4_value_offset_4type_str = 'VALUE'
     else:
         item.t4_value_offset_4type_str = 'UNKNOWN'
     return item
Exemplo n.º 13
0
 def __init__(self, bytesData: bytes):
     self.s0_app_marker = bytesData[0:2]
     self.s1_app_length = bytesData[2:4]
     self.s1_app_length_int = clength(data=self.s1_app_length)
     self.s2_exif_marker = bytesData[4:10]
     self.s2_exif_marker_str = 'Exif\\x00\\x00'
     self.s3_exif_byte_order = bytesData[10:12]
     if self.s3_exif_byte_order == b'MM':
         self.s3_exif_byte_order_str = 'Big Endian'
         self.s3_exif_byte_order_int = 1
     elif self.s3_exif_byte_order == b'II':
         self.s3_exif_byte_order_str = 'Little Endian'
         self.s3_exif_byte_order_int = 2
     else:
         self.s3_exif_byte_order_str = 'Unknown'
         self.s3_exif_byte_order_int = -1
     self.s4_exif_version_number = bytesData[12:14]
     self.s5_exif_image_file_directory_ifd = bytesData[14:18]
     #      ---- 0IFD ----
     self.s6_exif_0IFD_1tags_counts = bytesData[18:20]
     self.s6_exif_0IFD_2tags_counts_int = clength(
         self.s6_exif_0IFD_1tags_counts)
     self.s6_exif_0IFD_3tags = []
     #   ---- Exif IFD ----
     self.s7_exif_ExifIFD_0offset = -1
     self.s7_exif_ExifIFD_1counts = b'\x00\x00'
     self.s7_exif_ExifIFD_2counts_int = 0
     self.s7_exif_ExifIFD_3tags = []
     #  ---- InterOperability IFD ----
     self.s8_exif_InterOperability_0offset = -1
     self.s8_exif_InterOperability_1counts = b'\x00\x00'
     self.s8_exif_InterOperability_2counts_int = 0
     self.s8_exif_InterOperability_3tags = []
     # ---- GPS IFD ----
     self.s9_exif_GpsIFD_0offset = -1
     self.s9_exif_GpsIFD_1counts = b'\x00\00'
     self.s9_exif_GpsIFD_2counts_int = 0
     self.s9_exif_GpsIFD_3tags = []
     # ---- 1IFD (Thumbnail Exif) ----
     self.s10_exif_1IFD_0offset = -1
     self.s10_exif_1IFD_1counts = b'\x00\x00'
     self.s10_exif_1IFD_2counts_int = 0
     self.s10_exif_1IFD_3tags = []
     # ---- All Data ----
     self.s11_data = bytesData
     # ########################################################################
     # Find "1IFD" , "0IFD" , "Exif IFD" , "InterOperability IFD" , "GPS IFD"
     # ########################################################################
     # ---- Define 1IFD Offset ----
     jj = 20 + self.s6_exif_0IFD_2tags_counts_int * 12
     ifd1_offset = self.s11_data[jj:jj + 4]
     if ifd1_offset != b'\x00\x00\x00\x00':
         ifd1_offset_int = clength(ifd1_offset)
         self.s10_exif_1IFD_0offset = ifd1_offset_int + 10
         self.s10_exif_1IFD_1counts = self.s11_data[
             self.s10_exif_1IFD_0offset:self.s10_exif_1IFD_0offset + 2]
         self.s10_exif_1IFD_2counts_int = clength(
             self.s10_exif_1IFD_1counts)
     #
     # ---- (1) Define OIFD Tags  ----
     for ii in range(0, self.s6_exif_0IFD_2tags_counts_int):
         jj = 20 + ii * 12
         item = exif_Tag.assignExifTag(self.s11_data[jj:jj + 12])
         #
         # Exif IFD
         if item.t1_tag_1bytes == b'\x87\x69':
             kk = clength(item.t4_value_offset_1bytes)
             self.s7_exif_ExifIFD_0offset = kk + 10
             self.s7_exif_ExifIFD_1counts = self.s11_data[
                 self.s7_exif_ExifIFD_0offset:self.s7_exif_ExifIFD_0offset +
                 2]
             self.s7_exif_ExifIFD_2counts_int = clength(
                 self.s7_exif_ExifIFD_1counts)
         # InterOperability IFD
         elif item.t1_tag_1bytes == b'\xA0\x05':
             kk = clength(item.t4_value_offset_1bytes)
             self.s8_exif_InterOperability_0offset = kk + 10
             self.s8_exif_InterOperability_1counts = self.s11_data[
                 self.s8_exif_InterOperability_0offset:self.
                 s8_exif_InterOperability_0offset + 2]
             self.s8_exif_InterOperability_2counts_int = clength(
                 self.s8_exif_InterOperability_1counts)
         # GPS IFD
         elif item.t1_tag_1bytes == b'\x88\x25':
             kk = clength(item.t4_value_offset_1bytes)
             self.s9_exif_GpsIFD_0offset = kk + 10
             self.s9_exif_GpsIFD_1counts = self.s11_data[
                 self.s9_exif_GpsIFD_0offset:self.s9_exif_GpsIFD_0offset +
                 2]
             self.s9_exif_GpsIFD_2counts_int = clength(
                 self.s9_exif_GpsIFD_1counts)
         else:
             # find tag func
             if not item.t1_tag_3bool:
                 item.t1_tag_2str = ftag(item.t1_tag_1bytes)
             self.s6_exif_0IFD_3tags.append(item)
     #
     #  ---- (2) Define Exif IFD ----
     for ii in range(0, self.s7_exif_ExifIFD_2counts_int):
         jj = (self.s7_exif_ExifIFD_0offset + 2) + ii * 12
         #
         item = exif_Tag.assignExifTag(self.s11_data[jj:jj + 12])
         #
         # find Tag
         item.t1_tag_2str = ftag(item.t1_tag_1bytes)
         #
         self.s7_exif_ExifIFD_3tags.append(item)
     #
     #  ---- (2) Define InterOperability IFD ----
     for ii in range(0, self.s8_exif_InterOperability_2counts_int):
         jj = (self.s8_exif_InterOperability_0offset + 2) + ii * 12
         #
         item = exif_Tag.assignExifTag(self.s11_data[jj:jj + 12])
         #
         # find Tag
         item.t1_tag_2str = ftag(item.t1_tag_1bytes)
         #
         self.s8_exif_InterOperability_3tags.append(item)
     #
     #  ---- (3) Define GPS IFD ----
     for ii in range(0, self.s9_exif_GpsIFD_2counts_int):
         jj = (self.s9_exif_GpsIFD_0offset + 2) + ii * 12
         #
         item = exif_Tag.assignExifTag(self.s11_data[jj:jj + 12])
         #
         # find Tag
         item.t1_tag_2str = fgtag(item.t1_tag_1bytes)
         #
         self.s9_exif_GpsIFD_3tags.append(item)
     #
     #  ---- (4) Define 1IFD ----
     for ii in range(0, self.s10_exif_1IFD_2counts_int):
         jj = (self.s10_exif_1IFD_0offset + 2) + ii * 12
         #
         item = exif_Tag.assignExifTag(self.s11_data[jj:jj + 12])
         #
         # find Tag
         item.t1_tag_2str = ftag(item.t1_tag_1bytes)
         #
         self.s10_exif_1IFD_3tags.append(item)
 def __init__(self, bytesData: bytes):
     self.s0_app_marker = bytesData[0:2]
     self.s1_app_length = bytesData[2:4]
     self.s1_app_length_int = clength(data=self.s1_app_length)
     self.s2_all_data = bytesData