Index: trunk/src/org/openstreetmap/josm/data/imagery/street_level/IImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/data/imagery/street_level/IImageEntry.java	(revision 18277)
+++ trunk/src/org/openstreetmap/josm/data/imagery/street_level/IImageEntry.java	(revision 18278)
@@ -8,4 +8,5 @@
 import java.time.Instant;
 import java.util.List;
+
 import javax.imageio.IIOParam;
 
@@ -16,4 +17,5 @@
  * An interface for image entries that will be shown in {@link org.openstreetmap.josm.gui.layer.geoimage.ImageDisplay}
  * @author Taylor Smock
+ * @param <I> type of image
  * @since 18246
  */
@@ -94,4 +96,24 @@
 
     /**
+     * Delete the image
+     * @return {@code true} if deletion was successful
+     * @throws UnsupportedOperationException If the implementation does not support deletion.
+     * Use {@link #isDeleteSupported()}} to check for support.
+     * @since 18278
+     */
+    default boolean delete() {
+        throw new UnsupportedOperationException("remove is not supported for " + this.getClass().getSimpleName());
+    }
+
+    /**
+     * Check if image deletion is supported
+     * @return {@code true} if deletion is supported
+     * @since 18278
+     */
+    default boolean isDeleteSupported() {
+        return false;
+    }
+
+    /**
      * Returns a display name for this entry (shown in image viewer title bar)
      * @return a display name for this entry
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 18277)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java	(revision 18278)
@@ -26,4 +26,5 @@
 import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.tools.Logging;
+import org.openstreetmap.josm.tools.Utils;
 
 /**
@@ -189,4 +190,14 @@
         this.dataSet.removeImage(this, false);
         return true;
+    }
+
+    @Override
+    public boolean isDeleteSupported() {
+        return true;
+    }
+
+    @Override
+    public boolean delete() {
+        return Utils.deleteFile(this.getFile());
     }
 
Index: trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java
===================================================================
--- trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 18277)
+++ trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageViewerDialog.java	(revision 18278)
@@ -359,5 +359,7 @@
                             .map(ImageEntry.class::cast).map(ImageEntry::getDataSet).distinct().collect(Collectors.toList());
                     for (IImageEntry<?> delete : toDelete) {
-                        if (delete.isRemoveSupported() && delete.remove()) {
+                        // We have to be able to remove the image from the layer and the image from its storage location
+                        // If either are false, then don't remove the image.
+                        if (delete.isRemoveSupported() && delete.isDeleteSupported() && delete.remove() && delete.delete()) {
                             Logging.info("File {0} deleted.", delete.getFile());
                         } else {
