首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R rmarkdown html表格中的外部图像缩略图

R rmarkdown html表格中的外部图像缩略图
EN

Stack Overflow用户
提问于 2021-09-16 08:29:00
回答 1查看 57关注 0票数 0

我创建了一个显示来自显示器的图像的html表,现在图像几乎有800个,图像是用html显示的。

在此表单中:<a href="https://kc.kobotoolbox.org/attachment/original?media_file=bonushenricus/attachments/1631348129389.jpg"><img src="/home/bonushenricus/R/kobotoolbox/foto_kobotoolbox_ovature/thumb_1631348129389.jpg"alt="NA" height=80></a>

并使用DT包打开

this is a link to an example of the results (only first rows)

这意味着打开的页面大约有1 Gb的下载量,你对如何在表格中放置缩略图有什么建议吗?

我尝试使用rmdformat包,标题为rmarkdown,输出如下:

代码语言:javascript
复制
output:      
    rmdformats::html_docco:
        thumbnails: true

但它不适用于DT,rpubs不接受它

所以我现在正在尝试imager,我已经从stackoverflow中的一个问题中获取了这个函数

代码语言:javascript
复制
makeThumb <- function(file) {
    library(imager)
    im <- load.image(paste0("https://kc.kobotoolbox.org/attachment/original?media_file=bonushenricus/attachments/",file))
    img <- resize(im,round(width(im)/10),round(height(im)/10))
    save.image(img,paste0("thumb_",file))
}

但我需要将所有图像直接加载到表中,然后为每个图像创建一个cimg类,我担心这会加载太多内存,或者我必须找到一种方法将缩略图上传到服务器并重新构建每张照片的html。

你有什么想法吗?

EN

回答 1

Stack Overflow用户

发布于 2021-09-17 16:25:50

好吧。我将一步一步地向您展示如何正确地执行此操作。不幸的是,我无法访问kc.kobotoolbox.org网站。因此,我对存储在本地文件夹中的文件执行了此操作。我建议你也这样做。

那么让我们开始吧。

  1. 运行RStudio并创建一个新项目。
  2. 在项目目录中,创建一个img目录,并在其中收集要创建新R脚本的所有文件
  3. 首先,加载所需的库

代码语言:javascript
复制
library(fs)
library(imager)

  1. 现在,我们将一遍又一遍地读取img目录中所有jpg文件的名称,将它们转换为一个列表。

代码语言:javascript
复制
files = dir_ls("img", regexp = "\\.jpg$") %>% as.list()

对我来说,files列表包含以下内容

代码语言:javascript
复制
$`img/img1 (1).jpg`
[1] "img/img1 (1).jpg"

$`img/img1 (2).jpg`
[1] "img/img1 (2).jpg"

$`img/img1 (3).jpg`
[1] "img/img1 (3).jpg"

$`img/img1 (4).jpg`
[1] "img/img1 (4).jpg"

$`img/img1 (5).jpg`
[1] "img/img1 (5).jpg"

  1. 现在是最难的事情。我们需要创建一个函数来转换我们的文件。让我们称它为ResizeImg.

代码语言:javascript
复制
ResizeImg = function(file, xscale = .1, yscale = .1){ 
  if(file_exists(file)){
    thumb_file = paste0(path_dir(file), "/", "thumb_", path_file(file))
    if(file_exists(thumb_file)) file_delete(thumb_file)
    im = file %>% load.image() 
    im %>% resize(round(width(im)*xscale),round(height(im)*yscale)) %>% 
      save.image(thumb_file)
  }
}

让我们来看看它是否有效

代码语言:javascript
复制
files[[1]] %>% ResizeImg(.25, .25)

一切都很好,让我们使用我们的新函数

代码语言:javascript
复制
files %>% lapply(ResizeImg, xscale = .15, yscale = .15)

一切都和预期的一样完美。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69204933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档