  
          Parameters
          ----------
          filename: str
              The filename of the image to be saved
          image: numpy.ndarray
              The image to be saved
          """
          self._set_thread()
          logger.trace("Putting to save queue: '%s'", filename)
          self._queue.put((filename, image))
  
 
</s> remove         logger.trace("Putting to save queue: '%s'", filename)
        self._queue.put((filename, image))
 </s> add         logger.trace("Putting to save queue: '%s'", filename)  # type:ignore
        self._queue.put((filename, image, sub_folder)) </s> remove         image: numpy.ndarray
            The image to be saved
 </s> add         image: bytes
            The encoded image to be saved
        subfolder: str or ``None``
            If the file should be saved in a subfolder in the output location, the subfolder should
            be provided here. ``None`` for no subfolder. </s> remove         filename = os.path.join(self.location, os.path.basename(filename))
 </s> add         location = os.path.join(self.location, sub_folder) if sub_folder else self._location
        if sub_folder and not os.path.exists(location):
            os.makedirs(location)

        filename = os.path.join(location, os.path.basename(filename)) </s> remove     def _save(self, filename, image):
 </s> add     def _save(self, filename: str, image: bytes, sub_folder: Optional[str]) -> None: </s> remove     def save(self, filename, image):
 </s> add     def save(self, filename: str, image: bytes, sub_folder: Optional[str] = None) -> None:
            The filename of the image to be saved. NB: Any folders passed in with the filename
            will be stripped and replaced with :attr:`location`.
        image: bytes
            The encoded image to be saved
        subfolder: str, optional
            If the file should be saved in a subfolder in the output location, the subfolder should
            be provided here. ``None`` for no subfolder. Default: ``None``
  
          Parameters
          ----------
          filename: str
            The filename of the image to be saved. NB: Any folders passed in with the filename
            will be stripped and replaced with :attr:`location`.
        image: bytes
            The encoded image to be saved
        subfolder: str, optional
            If the file should be saved in a subfolder in the output location, the subfolder should
            be provided here. ``None`` for no subfolder. Default: ``None``
            The filename of the image to be saved. NB: Any folders passed in with the filename
            will be stripped and replaced with :attr:`location`.
        image: bytes
            The encoded image to be saved
        subfolder: str, optional
            If the file should be saved in a subfolder in the output location, the subfolder should
            be provided here. ``None`` for no subfolder. Default: ``None``
            The filename of the image to be saved. NB: Any folders passed in with the filename
            will be stripped and replaced with :attr:`location`.
        image: bytes
            The encoded image to be saved
        subfolder: str, optional
            If the file should be saved in a subfolder in the output location, the subfolder should
            be provided here. ``None`` for no subfolder. Default: ``None``
          """
          self._set_thread()
          logger.trace("Putting to save queue: '%s'", filename)
          self._queue.put((filename, image))
  
keep keep keep keep replace replace replace keep keep keep keep keep
 Extract filter: Allow saving of filtered images 
lib/image.py