Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8277572

ImageStorage should correctly handle MIME types for images encoded in data URIs

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • jfx19
    • jfx17
    • javafx
    • None

      `com.sun.javafx.iio.ImageStorage` currently ignores the MIME image subtype specified for images encoded in data URIs. This should be improved as follows:

      1. If the specified image subtype is not supported, an exception will be thrown.
      2. If the specified image subtype is supported, but the data contained in the URI is of a different (but also supported) image format, the image will be loaded and a warning will be logged. For example, if the MIME type is "image/jpeg", but the image data is PNG, the following warning will be generated:

          Image format 'PNG' does not match MIME type 'image/jpeg' in URI 'data:image/jpeg;base64,iVBORw0KGgoAAA...AAAElFTkSuQmCC'

      Also, the javadoc of `javafx.scene.image.Image` incorrectly states:

          94 * If a URL uses the "data" scheme, the data must be base64-encoded
          95 * and the MIME type must either be empty or a subtype of the
          96 * {@code image} type.

      However, omitting the MIME type of a data URI is specified to imply "text/plain" (RFC 2397, section 2). Since the `com.sun.javafx.util.DataURI` class is implemented according to this specification, trying to load an image without MIME type correctly fails with an `ImageStorageException`: "Unexpected MIME type: text".

      The solution is to fix the documentation.

            mstrauss Michael Strauß
            mstrauss Michael Strauß
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: