          dict:
              The icons formatted as described in :attr:`icons`
  
          """
          size = get_config().user_config_dict.get("icon_size", 16)
          size = int(round(size * get_config().scaling_factor))
          icons: Dict[str, ImageTk.PhotoImage] = {}
          pathicons = os.path.join(PATHCACHE, "icons")
          for fname in os.listdir(pathicons):
              name, ext = os.path.splitext(fname)
              if ext != ".png":
                  continue
              img = Image.open(os.path.join(pathicons, fname))
              img = ImageTk.PhotoImage(img.resize((size, size), resample=Image.HAMMING))
              icons[name] = img
          logger.debug(icons)
          return icons
  
      def set_faceswap_output_path(self, location: str, batch_mode: bool = False) -> None:
          """ Set the path that will contain the output from an Extract or Convert task.
  
          Required so that the GUI can fetch output images to display for return in
 
</s> remove     def resize_image(self, name: str, frame_dims: Optional[Tuple[int, int]]) -> None:
        """ Resize the training preview image based on the passed in frame size.
 </s> add         """
        size = get_config().user_config_dict.get("icon_size", 16)
        size = int(round(size * get_config().scaling_factor))
        icons: Dict[str, ImageTk.PhotoImage] = {}
        pathicons = os.path.join(PATHCACHE, "icons")
        for fname in os.listdir(pathicons):
            name, ext = os.path.splitext(fname)
            if ext != ".png":
                continue
            img = Image.open(os.path.join(pathicons, fname))
            img = ImageTk.PhotoImage(img.resize((size, size), resample=Image.HAMMING))
            icons[name] = img
        logger.debug(icons)
        return icons </s> remove         Returns
        -------
        dict:
            The icons formatted as described in :attr:`icons`
 </s> add         self._batch_mode = False
        self._output_path = "" </s> remove         self._pathoutput = location
 </s> add         self._output_path = location </s> remove     @property
    def icons(self) -> Dict[str, ImageTk.PhotoImage]:
        """ dict: The faceswap icons for all parts of the GUI. The dictionary key is the icon
        name (`str`) the value is the icon sized and formatted for display
        (:class:`PIL.ImageTK.PhotoImage`).
 </s> add  </s> remove     def previewoutput(self) -> Tuple[Image.Image, ImageTk.PhotoImage]:
        """ Tuple: First item in the tuple is the extract or convert preview image
        (:class:`PIL.Image`), the second item is the image in a format that tkinter can display
        (:class:`PIL.ImageTK.PhotoImage`).
 </s> add     def buffer(self) -> PreviewBuffer:
        """ :class:`~lib.training.PreviewBuffer` The preview buffer for the training preview
        image. """
        return self._buffer

    def load(self) -> bool:
        """ Load the latest training preview image(s) from disk and add to :attr:`buffer` """
        logger.trace("Loading Training preview images")  # type:ignore
        image_files = _get_previews(self._cache_path)
        filename = next((fname for fname in image_files
                         if os.path.basename(fname) == TRAININGPREVIEW), "")
        if not filename:
            logger.trace("No preview to display")  # type:ignore
            return False
        try:
            modified = os.path.getmtime(filename)
            if modified <= self._modified:
                logger.trace("preview '%s' not updated. Current timestamp: %s, "  # type:ignore
                             "existing timestamp: %s", filename, modified, self._modified)
                return False

            logger.debug("Loading preview: '%s'", filename)
            img = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
            self._modified = modified
            self._buffer.add_image(os.path.basename(filename), img)
            self._error_count = 0
        except ValueError:
            # This is probably an error reading the file whilst it's being saved so ignore it
            # for now and only pick up if there have been multiple consecutive fails
            logger.warning("Unable to display preview: (image: '%s', attempt: %s)",
                           img, self._error_count)
            if self._error_count < 10:
                self._error_count += 1
            else:
                logger.error("Error reading the preview file for '%s'", filename)
            return False
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
          dict:
              The icons formatted as described in :attr:`icons`
  
          """
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
        logger.debug("Saving preview to %s", filename)
        assert self._preview_image is not None
        self._preview_image.save(filename)
  
      def set_faceswap_output_path(self, location: str, batch_mode: bool = False) -> None:
          """ Set the path that will contain the output from an Extract or Convert task.
  
          Required so that the GUI can fetch output images to display for return in
keep keep keep keep replace replace replace replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 GUI - Preview updates
  - Training preview. Embed preview pop-out window
  - Bugfix - convert/extract previews 
lib/gui/utils/image.py