code: def image_information_response(self):
          
          dr = degraded_request(self.identifier)
          if (dr):
              self.logger.info("image_information: degraded %s -> %s" %
                               (self.identifier, dr))
              self.degraded = self.identifier
              self.identifier = dr
          else:
              self.logger.info("image_information: %s" % (self.identifier))
          # get size
          self.manipulator.srcfile = self.file
          self.manipulator.do_first()
          # most of info.json comes from config, a few things specific to image
          info = {'tile_height': self.config.tile_height,
                  'tile_width': self.config.tile_width,
                  'scale_factors': self.config.scale_factors
                  }
          # calculate scale factors if not hard-coded
          if ('auto' in self.config.scale_factors):
              info['scale_factors'] = self.manipulator.scale_factors(
                  self.config.tile_width, self.config.tile_height)
          i = IIIFInfo(conf=info, api_version=self.api_version)
          i.server_and_prefix = self.server_and_prefix
          i.identifier = self.iiif.identifier
          i.width = self.manipulator.width
          i.height = self.manipulator.height
          if (self.api_version >= '2.0'):
              # FIXME - should come from manipulator
              i.qualities = ["default", "color", "gray"]
          else:
              # FIXME - should come from manipulator
              i.qualities = ["native", "color", "gray"]
          i.formats = ["jpg", "png"]  # FIXME - should come from manipulator
          if (self.auth):
              self.auth.add_services(i)
          return self.make_response(i.as_json(),
                                    headers={"Content-Type": self.json_mime_type})
docs: Parse image information request and create response.