diff --git a/src/metabase/pulse/render.clj b/src/metabase/pulse/render.clj
index d9bbd926f1aac471821230a87a6f5a9d64a4e673..9b03b2b3560e21b8838b4cc28e8280101ec4e251 100644
--- a/src/metabase/pulse/render.clj
+++ b/src/metabase/pulse/render.clj
@@ -291,6 +291,14 @@
   [card]
   (h (urls/card-url (:id card))))
 
+(defn- write-image
+  [^BufferedImage image ^String format-name ^ByteArrayOutputStream output-stream]
+  (try
+    (ImageIO/write image format-name output-stream)
+    (catch javax.imageio.IIOException iioex
+      (log/error iioex "Error writing image to output stream")
+      (throw iioex))))
+
 ;; ported from https://github.com/radkovo/CSSBox/blob/cssbox-4.10/src/main/java/org/fit/cssbox/demo/ImageRenderer.java
 (defn- render-to-png
   [^String html, ^ByteArrayOutputStream os, width]
@@ -317,7 +325,7 @@
       (.setLoadImages true)
       (.setLoadBackgroundImages true))
     (.createLayout content-canvas window-size)
-    (ImageIO/write (.getImage content-canvas) "png" os)))
+    (write-image (.getImage content-canvas) "png" os)))
 
 (s/defn ^:private render-html-to-png :- bytes
   [{:keys [content]} :- RenderedPulseCard