R: Image file output

renderImage {shiny} | R Documentation

## Image file output

### Description

Renders a reactive image that is suitable for assigning to an `output` slot.

### Usage

    renderImage(expr, env = parent.frame(), quoted = FALSE, deleteFile = TRUE,
      outputArgs = list())

### Arguments

`expr` | An expression that returns a list.
`env` | The environment in which to evaluate `expr`.
`quoted` | Is `expr` a quoted expression (with `quote()`)? This is useful if you want to save an expression in a variable.
`deleteFile` | Should the file in `func()$src` be deleted after it is sent to the client browser? Generally speaking, if the image is a temp file generated within `func`, then this should be `TRUE`; if the image is not a temp file, this should be `FALSE`.
`outputArgs` | A list of arguments to be passed through to the implicit call to `imageOutput` when `renderImage` is used in an interactive R Markdown document.

### Details

The expression `expr` must return a list containing the attributes for the `img` object on the client web page. For the image to display, properly, the list must have at least one entry, `src`, which is the path to the image file. It may also useful to have a `contentType` entry specifying the MIME type of the image. If one is not provided, `renderImage` will try to autodetect the type, based on the file extension.

Other elements such as `width`, `height`, `class`, and `alt`, can also be added to the list, and they will be used as attributes in the `img` object.

The corresponding HTML output tag should be `div` or `img` and have the CSS class name `shiny-image-output`.

### See Also

For more details on how the images are generated, and how to control the output, see `plotPNG`.

### Examples

    ## Only run examples in interactive R sessions
    if (interactive()) {
    options(device.ask.default = FALSE)

    ui <- fluidPage(
      sliderInput("n", "Number of observations", 2, 1000, 500),
      plotOutput("plot1"),
      plotOutput("plot2"),
      plotOutput("plot3")
    )

    server <- function(input, output, session) {

      # A plot of fixed size
      output$plot1 <- renderImage({
        # A temp file to save the output. It will be deleted after renderImage
        # sends it, because deleteFile=TRUE.
        outfile <- tempfile(fileext='.png')

        # Generate a png
        png(outfile, width=400, height=400)
        hist(rnorm(input$n))
        dev.off()

        # Return a list
        list(src = outfile,
             alt = "This is alternate text")
      }, deleteFile = TRUE)

      # A dynamically-sized plot
      output$plot2 <- renderImage({
        # Read plot2's width and height. These are reactive values, so this
        # expression will re-run whenever these values change.
        width  <- session$clientData$output_plot2_width
        height <- session$clientData$output_plot2_height

        # A temp file to save the output.
        outfile <- tempfile(fileext='.png')

        png(outfile, width=width, height=height)
        hist(rnorm(input$n))
        dev.off()

        # Return a list containing the filename
        list(src = outfile,
             width = width,
             height = height,
             alt = "This is alternate text")
      }, deleteFile = TRUE)

      # Send a pre-rendered image, and don't delete the image after sending it
      # NOTE: For this example to work, it would require files in a subdirectory
      # named images/
      output$plot3 <- renderImage({
        # When input$n is 1, filename is ./images/image1.jpeg
        filename <- normalizePath(file.path('./images',
                                  paste('image', input$n, '.jpeg', sep='')))

        # Return a list containing the filename
        list(src = filename)
      }, deleteFile = FALSE)
    }

    shinyApp(ui, server)
    }

[Package shiny version 1.0.3 Index]