diff --git a/overviewer_core/tileset.py b/overviewer_core/tileset.py index 01b03728a..b00cb4867 100644 --- a/overviewer_core/tileset.py +++ b/overviewer_core/tileset.py @@ -984,9 +984,6 @@ def _render_compositetile(self, dest, name): # Ignore errors if it's "file doesn't exist" if e.errno != errno.ENOENT: raise - logging.warning( - "Tile %s was requested for render, but no children were found! " - "This is probably a bug.", imgpath) return # Create the actual image now @@ -1049,7 +1046,8 @@ def _render_rendertile(self, tile): The argument is a RenderTile object The image is rendered and saved to disk in the place this tileset is - configured to save images. + configured to save images, unless the rendered image is blank, in + which case no image is saved to disk. """ @@ -1073,18 +1071,6 @@ def _render_rendertile(self, tile): logging.debug("%s deleted", tile) return - # Create the directory if not exists - dirdest = os.path.dirname(imgpath) - if not os.path.exists(dirdest): - try: - os.makedirs(dirdest) - except OSError as e: - # Ignore errno EEXIST: file exists. Due to a race condition, - # two processes could conceivably try and create the same - # directory at the same time - if e.errno != errno.EEXIST: - raise - # Compile this image tileimg = Image.new("RGBA", (384, 384), self.options['bgcolor']) @@ -1120,6 +1106,24 @@ def _render_rendertile(self, tile): logging.error("Full error was:", exc_info=1) sys.exit(1) + # Don't save if the output is blank (384*384 pixels all colored bgcolor at 0% opacity) + # The viewer will fill in this missing tile with the default blank tile created in the + # AssetManager, so there's no need to spend compute time on compressing and disk space + # & network traffic on serving a blank image. + if tileimg.getcolors() == [(147456, self.options['bgcolor'])]: + return + + # Create the directory if not exists + dirdest = os.path.dirname(imgpath) + if not os.path.exists(dirdest): + try: + os.makedirs(dirdest) + except OSError as e: + # Ignore errno EEXIST: file exists. Due to a race condition, + # two processes could conceivably try and create the same + # directory at the same time + if e.errno != errno.EEXIST: + raise # Save them with FileReplacer(imgpath, capabilities=self.fs_caps) as tmppath: if self.imgextension == 'jpg':