docs: def is_contiguous(self):
          """Return offset and size of contiguous data, else None.
  
          Excludes prediction and fill_order.
  
          """
          if (self.compression != 1
                  or self.bitspersample not in (8, 16, 32, 64)):
              return None
          if 'TileWidth' in self.tags:
              if (self.imagewidth != self.tilewidth or
                      self.imagelength % self.tilelength or
                      self.tilewidth % 16 or self.tilelength % 16):
                  return None
              if ('ImageDepth' in self.tags and 'TileDepth' in self.tags and
                      (self.imagelength != self.tilelength or
                       self.imagedepth % self.tiledepth)):
                  return None
  
          offsets = self.dataoffsets
          bytecounts = self.databytecounts
          if len(offsets) == 1:
              return offsets[0], bytecounts[0]
          if self.is_stk or all((offsets[i] + bytecounts[i] == offsets[i+1] or
                                 bytecounts[i+1] == 0)  # no data/ignore offset
                                for i in range(len(offsets)-1)):
              return offsets[0], sum(bytecounts)
          return None