code: def _open(self):
      header_size = i32(self.fp.read(4))
      version = i32(self.fp.read(4))
      if header_size < 20:
          raise SyntaxError("not a GIMP brush")
      if version not in (1, 2):
          raise SyntaxError(
              "Unsupported GIMP brush version: %s" % version
          )
  
      width = i32(self.fp.read(4))
      height = i32(self.fp.read(4))
      color_depth = i32(self.fp.read(4))
      if width <= 0 or height <= 0:
          raise SyntaxError("not a GIMP brush")
      if color_depth not in (1, 4):
          raise SyntaxError(
              "Unsupported GIMP brush color depth: %s" % color_depth
          )
  
      if version == 1:
          comment_length = header_size - 20
      else:
          comment_length = header_size - 28
          magic_number = self.fp.read(4)
          if magic_number != b"GIMP":
              raise SyntaxError("not a GIMP brush, bad magic number")
          self.info["spacing"] = i32(self.fp.read(4))
  
      comment = self.fp.read(comment_length)[:-1]
  
      if color_depth == 1:
          self.mode = "L"
      else:
          self.mode = "RGBA"
  
      self._size = width, height
  
      self.info["comment"] = comment
  
      # Image might not be small
      Image._decompression_bomb_check(self.size)
  
      # Data is an uncompressed block of w * h * bytes/pixel
      self._data_size = width * height * color_depth
  
imports: from .None import Image, ImageFile
  from ._binary import i32be
label_desc: Use image node_id 1 for calling the GbrImageFile obj's underlying member method code with example usage: obj._open() without return types