The above solution is great and I use it. I also added an additional function for when I don't want to display the images inline in the text, which creates scrolling issues.

    (use-package url)
    (defun display-online-image-in-new-buffer (&optional url)
      (interactive)
      (unless url (setq url (url-get-url-at-point)))
      (unless url
        (error "Couldn't find URL."))
      (let ((buffer (url-retrieve-synchronously url))
            (image-buffer (generate-new-buffer "*Image*")))
        (unwind-protect
            (with-current-buffer buffer
              (goto-char (point-min))
              (search-forward "\n\n")
              (let ((data (buffer-substring (point) (point-max))))
                (with-current-buffer image-buffer
                  (insert-image (create-image data nil t))
                  ;; Check if the current frame is already split
                  (if (> (length (window-list)) 1)
                      (set-window-buffer (next-window) image-buffer)  ; Use existing window
                    ;; Else, split the window and switch to the image buffer
                    (split-window-right)
                    (other-window 1)
                    (switch-to-buffer image-buffer)
                    (other-window -1))))
          (kill-buffer buffer))))