I am quite new to R Shiny. I am trying to create a Shiny app for my digital image processing project. A quick outline, the app contains a brightness, saturation and hue slider and a checkbox to set the image to a negative format. Is there a way to display images using magick library specifically image_read() func? I tried numerous times yet to no avail, I tried printing through renderImage and renderPlot to no avail.
            Asked
            
        
        
            Active
            
        
            Viewed 130 times
        
    -1
            
            
        - 
                    did you try `plot(yourimage)` in `renderPlot`? – Stéphane Laurent Dec 07 '22 at 11:25
- 
                    yes I have, it works but I would like to try and use magick library for images if possible. – Brenz Gwynne HABABAG Dec 07 '22 at 12:23
- 
                    What exactly did you try? In what ways did it fail? This question really isn't focused enough to give a clear, testable answer. It's easier to help you if you include a simple [reproducible example](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) with sample input and desired output that can be used to test and verify possible solutions. – MrFlick Dec 07 '22 at 16:40
- 
                    I tried displaying the image using an imageOutput then renderImage, inside the renderImage I created a variable for the image file location then used the image_read(filepath) function from magick library. – Brenz Gwynne HABABAG Dec 08 '22 at 06:13
1 Answers
1
            library(magick)
library(shiny)
ui <- fluidPage(
  plotOutput("p1")
)
server <- function(input, output, session) {
  
  #get image and its metadata
  my_img <- reactive({
    frink <- image_read("https://jeroen.github.io/images/frink.png")
    w <- image_info(frink)$width
    h <- image_info(frink)$height
    list(
      raster = as.raster(frink),
      w = w,
      h = h
    )
  })
  # a function factory to conveniently get out an images dimension
  img_dim_f <- function(parm) {
    function() {
      p <- 0
      i <- my_img()
      if (isTruthy(i)) {
        if (isTruthy(i[[parm]])) {
          p <- i[[parm]]
        }
      }
      p
    }
  }
  output$p1 <- renderPlot(
    expr = {
      i <- req(my_img())
      r <- req(i$raster)
      plot(r)
    },
    width = img_dim_f("w"),
    height = img_dim_f("h")
  )
}
shinyApp(ui, server)
 
    
    
        Nir Graham
        
- 2,567
- 2
- 6
- 10
- 
                    Helpful, thanks, being new to this. I added a file selection step, and then in the img_dim_f function, I needed to put req(my_img()), or subsequent images came out at the same size. – Scrope Dec 19 '22 at 14:21
