如何设置大小的局部图像使用针织降价?

我有一个本地图像,我想包括在一个 .Rmd文件,然后我将 knit和转换为与 Pandoc的 HTML 幻灯片。根据 这篇文章,这将插入本地图像:
![Image Title](path/to/your/image)

有没有办法修改这个代码也设置图像大小?

146819 次浏览

例如,您还可以使用 png包读取图像,并使用 grid包中的 grid.raster像绘制常规图一样绘制图像。

```{r fig.width=1, fig.height=10,echo=FALSE}
library(png)
library(grid)
img <- readPNG("path/to/your/image")
grid.raster(img)
```

使用这种方法,您可以完全控制您的图像的大小。

如果要转换为 HTML,可以使用 HTML 语法设置图像的大小,如下所示:

  <img src="path/to/image" height="400px" width="300px" />

或者任何你想给出的高度和宽度。

这里有一些选项,可以保持文件的自包含性,而不用重新审视图像:

div标签包装图像

<div style="width:300px; height:200px">
![Image](path/to/image)
</div>

使用样式表

测试

---
title: test
output: html_document
css: test.css
---


## Page with an image {#myImagePage}


![Image](path/to/image)

Test.css

#myImagePage img {
width: 400px;
height: 200px;
}

如果您有多个图像,那么您可能需要为第二个选项使用 nth-child 伪选择器。

这个问题虽然老了,但仍然受到很多关注。由于现有的答案已经过时,这里有一个更新的解决方案:

调整本地图像的大小

knitr1.12开始,就有了函数 include_graphics。从 ?include_graphics开始(重点是我的) :

使用这个函数的主要优势在于它是可移植的,因为它适用于 knitr支持的所有文档格式,所以您不需要考虑是否必须使用,例如 LaTeX 或 Markdown 语法来嵌入外部图像。与图形输出相关的块选项适用于普通 R 图,也适用于这些图像,如 ABC1和 out.height

例如:

```{r, out.width = "400px"}
knitr::include_graphics("path/to/image.png")
```

优点:


包括生成的图像

要组合到一个图形的路径即 形成一个大块(但不包括在内) ,块选项 opts_current$get("fig.path")(图形目录的路径)和 opts_current$get("label")(当前块的标签)可能是有用的。下面的示例使用 fig.path包含在第一个块中生成(但未显示)的两个图像中的第二个:

```{r generate_figures, fig.show = "hide"}
library(knitr)
plot(1:10, col = "green")
plot(1:10, col = "red")
```


```{r}
include_graphics(sprintf("%sgenerate_figures-2.png", opts_current$get("fig.path")))
```

图形路径的一般模式是 [fig.path]/[chunklabel]-[i].[ext],其中 chunklabel是生成图形的块的标签,i是图形索引(在这个块中) ,ext是文件扩展名(在 RMarkdown 文档中默认为 png)。

Include _ Graphics 解决方案在调整图形大小方面效果很好,但是我无法弄清楚如何使用它来生成并排调整大小的图形。我发现 这篇文章对这样做很有用。

更新答案: 在 knitr 1.17中,你可以简单地使用

![Image Title](path/to/your/image){width=250px}

根据@jsb 的评论编辑

注意,这只能在没有空格的情况下工作,例如{ width = 250px }而不是{ width = 250px }

今天遇到了同样的问题,在编织到 PDF 时发现了 knitr 1.16的另一个选项(这要求您安装了 pandoc) :

![Image Title](path/to/your/image){width=70%}

这种方法可能需要您做一点尝试和错误,以找到适合您的大小。它特别方便,因为它使两个图像并排放置的过程更漂亮。例如:

![Image 1](path/to/image1){width=70%}![Image 2](path/to/image2){width=30%}

你可以发挥创造力,把这些东西并排堆放起来,按照你认为合适的大小调整它们的大小。请参阅 https://rpubs.com/RatherBit/90926了解更多的想法和示例。

另一个对我起作用的选项是像这样使用 knitr::include_graphics()的 dpi 选项:

```{r}
knitr::include_graphics("path/to/image.png", dpi = 100)
```

... 当然(除非你做数学计算)与在块中定义维度相比是试错法,但也许它会对某些人有所帮助。