code: def do_quality(self, quality):
          
          if (quality == 'grey' or quality == 'gray'):
              # Checking for 1.1 gray or 20.0 grey elsewhere
              self.logger.debug("quality: converting to gray")
              self.image = self.image.convert('L')
          elif (quality == 'bitonal'):
              self.logger.debug("quality: converting to bitonal")
              self.image = self.image.convert('1')
          else:  # color or default/native (which we take as color)
              # Deal first with conversions from I;16* formats which Pillow
              # appears not to handle properly, resulting in mostly white images
              # if we convert directly. See:
              # <http://stackoverflow.com/questions/7247371/python-and-16-bit-tiff>
              if (self.image.mode.startswith('I;16')):
                  self.logger.debug("quality: fudged conversion from mode %s to I"
                                    % (self.image.mode))
                  self.image = self.image.convert('I')
                  self.image = self.image.point(lambda i: i * (1.0 / 256.0))
              if (self.image.mode not in ('1', 'L', 'RGB', 'RGBA')):
                  # Need to convert from palette etc. in order to write out
                  self.logger.debug("quality: converting from mode %s to RGB"
                                    % (self.image.mode))
                  self.image = self.image.convert('RGB')
              else:
                  self.logger.debug("quality: quality (nop)")
docs: Apply value of quality parameter.
  
          For PIL docs see
          <http://pillow.readthedocs.org/en/latest/reference/Image.html#PIL.Image.Image.convert>