Обновлено: решено с помощью магии - большое спасибо, ребята :) Обновленная версия в Репозиторий GitHub для всех, кто интересуется историей об оленях.
Я новичок в R и только что познакомился с R блестящий. Еще пытаюсь сделать генератор оленей. Основной принцип: комбинируйте разные слои изображений, чтобы создать своего личного оленя. Например. меняйте цвета пальто с помощью пуговиц, пока контуры остаются на своих местах. В идеале это должно выглядеть примерно так (предварительный просмотр, который я набросал с помощью GIMP):
Мне удается загрузить изображения в Shiny и для начала переключаться между двумя слоями с помощью переключателей. Однако я понятия не имею, как отображать изображения одновременно в одном и том же месте, чтобы контуры были дополнительным слоем поверх пальто.
Вы можете увидеть проблему здесь:
Вот мой код. Поскольку имя файла частично генерируется переключением радиокнопки, я оставил такие пути.
library(shiny)
ui <- fluidPage(
titlePanel("R-eindeer"),
sidebarLayout(
sidebarPanel(
radioButtons("check1","coat colour", choices = c("grey","brown"))
),
mainPanel(
imageOutput("reindeer_coat"),
imageOutput("reindeer_outline")
)
)
)
server <- function(input,output){
getImage <- reactive({
list(src = paste0("./coat/reindeer_", input$check1, ".png"),
width = 500,
height = 500)
})
output$reindeer_coat <- renderImage({
getImage()
}, deleteFile = FALSE)
output$reindeer_outline <- renderImage({
return(list(src = "./outlines/reindeer_outline.png",
width = 500,
height = 500,
contentType = 'image/png'))
}, deleteFile = FALSE)
}
shinyApp(ui = ui, server = server)
Буду признателен за любую помощь. Даже если эта проблема решена, мне еще предстоит пройти долгий путь, но, возможно, я смогу научиться достаточно быстро, чтобы успеть до Рождества ;-)
PS: Вы можете найти все папки, слои изображений и дополнительную информацию в только что созданном мной Репозиторий Git. Кроме того, даже если вы не можете решить мой вопрос: не стесняйтесь использовать изображения и передать дух Рождества. Содержание оленей всегда должно быть бесплатным. Ссылка на репозиторий GitHub
PS Ваш проект выглядит забавно! Сообщите мне, если раздел слоев в этой ссылке не дает вам того, что вам нужно, и я буду рад помочь.
Спасибо тебе :) Магия сделала свое дело.





Как упоминалось в комментариях, magick может сделать это за вас! В частности, image_mosaic будет накладывать изображения.
Попробуйте это:
library(shiny)
library(magick)
ui <- fluidPage(
titlePanel("R-eindeer"),
sidebarLayout(
sidebarPanel(
radioButtons("check1","coat colour", choices = c("grey","brown"))
),
mainPanel(
imageOutput("reindeer")
)
)
)
server <- function(input,output){
get_image <- function(type, color) {
image_read(file.path(type, paste0(color, ".png")))
}
output$reindeer <- renderImage({
# load the images
coat <- get_image("coat", paste0("reindeer_", input$check1))
outline <- get_image("outlines", "reindeer_outline")
# make the reindeer: overlay in order
reindeer <- c(coat, outline)
# create a temp file
tmpfile <- reindeer %>%
image_mosaic() %>%
image_flatten() %>%
image_write(tempfile(fileext='jpg'), format = 'jpg')
# render the file
return(list(src = tmpfile,
height = 300,
width = 300,
alt = "Your reindeer",
contentType = "image/jpg"))
}, deleteFile = TRUE)
}
shinyApp(ui = ui, server = server)
О боже, это действительно - волшебно! Это сработало, и мне очень приятно видеть эту работу. Большое спасибо!
@einGlasRotwein Я рад, что это помогло! Удачи в вашем проекте - я с нетерпением жду возможности построить своего собственного оленя!
ознакомьтесь с пакетом
magick, это один из основных пакетов для работы с изображениями. cran.r-project.org/web/packages/magick/vignettes/intro.html