{shinyscreenshot}: Finalmente, uma maneira fácil de tirar screenshots em aplicativos Shiny!

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[This article was first published on Dean Attali’s R Blog, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

{shinyscreenshot} finalmente foi lançado, dois anos inteiros (desculpe!) depois que comecei a trabalhar nele. Ele permite que você capture imagens de páginas inteiras ou partes de páginas em aplicativos Shiny e faça o download da imagem como PNG automaticamente. Pode ser usado para capturar o atual estado de um aplicativo Shiny, incluindo widgets interativos (como plotly, timevis, mapas, etc).

Você pode verificar a demonstração para experimentá-la ou você pode assistir a um breve tutorial!

Como usar

Usar {shinyscreenshot} é o mais fácil possível. Quando você quiser fazer uma captura de tela, basta chamar screenshot() e uma captura de tela de página inteira será feita e baixada como uma imagem PNG. Experimente você mesmo!

É tão simples que um exemplo não é necessário, mas aqui está um de qualquer maneira:

library(shiny)
library(shinyscreenshot)

ui 

Screenshot button

The screenshot() function can be called any time inside the server portion of a Shiny app. A very common case is to take a screenshot after clicking a button. That case is so common that there’s a function for it: screenshotButton(). It accepts all the same parameters as screenshot(), but instead of calling it in the server, you call it in the UI.

screenshotButton() creates a button that, when clicked, will take a screenshot.

Features

  • Região: Por padrão, a página inteira é capturada. Se quiser capturar uma parte específica da tela, você pode usar o selector parâmetro para especificar um seletor CSS. Por exemplo, se você tiver um lote com ID myplot então você pode usar screenshot(selector="#myplot").

  • Escala: O arquivo de imagem terá a mesma altura e largura que o que está visível no navegador. Usando screenshot(scale=2) resultará em uma imagem com o dobro da altura e largura (e também um tamanho de arquivo maior).

  • Cronômetro: Normalmente você quer que a captura de tela seja tirada imediatamente, mas às vezes você pode querer dizer ao Shiny para fazer uma captura de tela em, por exemplo, 3 segundos a partir de agora. Isso pode ser feito usando screenshot(timer=3).

  • Nome do arquivo: Você pode escolher o nome do arquivo baixado usando o filename parâmetro.

  • Suporte de módulo: Como alternativa ao selector argumento, você também pode usar o id argumento. Por exemplo, em vez de usar screenshot(selector="#myplot"), você poderia usar screenshot(id="myplot"). A vantagem de usar um ID diretamente é que o id O parâmetro reconhece o módulo, portanto, mesmo se você estiver fazendo uma captura de tela dentro de um módulo Shiny, não precisa se preocupar com o namespace.

    cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Instalação

Para instalar a versão CRAN estável:

install.packages("shinyscreenshot")

Para instalar a versão de desenvolvimento mais recente do GitHub:

install.packages("remotes")
remotes::install_github("daattali/shinyscreenshot")

Motivação

Durante anos, vi pessoas perguntando online como podem tirar screenshots do estado atual de um aplicativo Shiny. Esta questão surge especialmente com saídas interativas (plotly, timevis, mapas, DT, etc). Alguns deles não permitem nenhuma maneira de salvar o estado atual como uma imagem, e alguns têm uma opção “Salvar como imagem”, mas eles salvam apenas o estado inicial / básico da saída, ao invés do estado atual após recebendo interação do usuário.

Depois de ver muitas pessoas perguntando sobre isso, um dia meu amigo R, Eric Nantz, perguntou sobre isso também, o que me motivou a encontrar uma solução.

Suporte e limitações do navegador

As imagens são fornecidas pela biblioteca JavaScript ‘html2canvas’. Eles nem sempre produzem capturas de tela perfeitas, consulte ‘html2canvas’ para obter mais informações sobre as limitações.

As bibliotecas JavaScript usadas neste pacote podem não ser suportadas por todos os navegadores. {shinyscreenshot} deve funcionar no Chrome, Firefox, Edge, Chrome no Android, Safari no iPhone (e provavelmente mais que eu não testei). Não funciona no Internet Explorer.

Pacotes semelhantes

Como mencionado acima, as bibliotecas usadas por {shinyscreenshot} têm limitações e podem nem sempre funcionar. Existem dois outros pacotes que foram lançados recentemente que também fornecem funcionalidade de captura de tela que você pode tentar e comparar: {snapper} de Jonathan Sidi e {capture} de dreamRs.

O pacote {webshot} do RStudio também é semelhante, mas tem um propósito muito diferente. {webshot} é usado para fazer capturas de tela de qualquer site (incluindo aplicativos Shiny), mas você não pode interagir com a página para fazer uma captura de tela em um momento específico.

DOIS ANOS?!

Sim eu conheço. Se você olhar o histórico de commits no GitHub, verá que este pacote começou em 2018. Eu escrevi quase toda a funcionalidade do pacote em apenas alguns dias, e então tudo que me restou foi a documentação terrível. Eu não queria lançar o pacote sem uma boa documentação, então esperei até ter um fim de semana livre para fazer isso. Mas ao invés de voltar para fazer a documentação, esqueci completamente deste pacote.

Muitos meses depois, o COVID-19 nos atingiu. Um dos meus objetivos de bloqueio era examinar todos os meus pacotes GitHub R e corrigir todos os problemas que puder. Enquanto fazia aquela varredura, percebi que tenho um pacote legal que esqueci de lançar … Se você realmente precisava de screenshots no ano passado, então peço desculpas por esse erro. Mas, antes tarde do que nunca!

Por último, se você gosta do meu conteúdo, deve verificar meu novo canal no YouTube, onde postarei conteúdo educacional da Shiny!



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
Leia Também  Código é poesia, mas GIFs são divinos: redigindo instruções técnicas eficazes