code: def _fromdata(self, data, maxval=None):
          
          data = numpy.array(data, ndmin=2, copy=True)
          if data.dtype.kind not in "uib":
              raise ValueError("not an integer type: %s" % data.dtype)
          if data.dtype.kind == 'i' and numpy.min(data) < 0:
              raise ValueError("data out of range: %i" % numpy.min(data))
          if maxval is None:
              maxval = numpy.max(data)
              maxval = 255 if maxval < 256 else 65535
          if maxval < 0 or maxval > 65535:
              raise ValueError("data out of range: %i" % maxval)
          data = data.astype('u1' if maxval < 256 else '>u2')
          self._data = data
          if data.ndim > 2 and data.shape[-1] in (3, 4):
              self.depth = data.shape[-1]
              self.width = data.shape[-2]
              self.height = data.shape[-3]
              self.magicnum = b'P7' if self.depth == 4 else b'P6'
          else:
              self.depth = 1
              self.width = data.shape[-1]
              self.height = data.shape[-2]
              self.magicnum = b'P5' if maxval > 1 else b'P4'
          self.maxval = maxval
          self.tupltypes = [self._types[self.magicnum]]
          self.header = self._header()
docs: Initialize instance from numpy array.