簡體   English   中英

使用網格創建和保存一個小的 png 文件

[英]Using grid to create and save a small png file

我正在使用 R 創建許多小圖形,這些圖形將保存為 PNG 文件,通常為 50x50 像素,最終在更大的圖像中用作圖標或標記。 由於內容經常更改,因此最好以編程方式而不是手動方式創建這些內容。

因為內容也很簡單——幾個字符的文本和一些數字—— grid函數似乎是解決這個問題的直接方法。 我根本不了解grid ,因為我通常使用更高級別的庫,例如ggplot2 下面的 MRE 列出了我已經取得的成就。

這會生成輸出,但我在將viewport的大小和比例以及各種grobs到最終 PNG 文件時遇到問題。 我得到的是下面的,乍一看還不錯,但是是 480x480 像素的圖像,其中大部分未使用,中央圖形僅占寬度和高度的三分之一。

考慮到視口大小( =.3 ),這似乎是合乎邏輯的,但是如果我放大視口,那么大概我必須放大文本等等。 (我知道如何更改png()參數以調整密度、像素數等,但此時圖像本身就是問題。)

問題歸結為如何從這樣的圖形中最好地生成質量不錯的 50x50 像素 PNG 或 SVG 文件,該圖形是在 R 中創建的,使用grid或其他方法。

PNG文件輸出

library(grid)
grid.newpage()
png(bg = "transparent")
pushViewport(viewport(width=.3, height=.3, clip="off"))
grid.rect(gp=gpar(lty=0, fill="#008000"))
grid.text("15.5", x = unit(0.5, "npc"), y = unit(0.75, "npc"),
          just = "center", hjust = NULL, vjust = NULL, rot = 0,
          check.overlap = FALSE, default.units = "npc",
          name = NULL, gp = gpar(fontsize=48), draw = TRUE, vp = NULL)

grid.text("13h 20m", x = unit(0.5, "npc"), y = unit(0.25, "npc"),
          just = "center", hjust = NULL, vjust = NULL, rot = 0,
          check.overlap = FALSE, default.units = "npc",
          name = NULL, gp = gpar(fontsize=32), draw = TRUE, vp = NULL)

lg <- linesGrob(x = unit(c(0, 1), "npc"),
                y = unit(c(0.5, 0.5), "npc"),
                gp = gpar(lwd=2))
grid.draw(lg)
dev.off()

magic圖書館可能對此有所幫助。 我使用您的起始代碼創建了一個空的 png 文件。

library(grid)
grid.newpage()
png(bg = "transparent")
pushViewport(viewport(width=.3, height=.3, clip="off"))
dev.off()

然后我讀取該 png 文件以放入如下所示的magic代碼。 實際上,可能存在一種方法可以將 png 文件直接放入 R 會話中的magic中,而無需進行臨時寫入 - 讀取工作。 但是,如果您有很多文件要創建並保存為 png,那么一次讀取一個空的 png 文件就不是那么重要了。 因為它可以用作所有新輸出。

library(magick)

img <- image_read("./desktop/Rplot001.png")

output <- img %>% image_background("#008000") %>% image_resize("50x50") %>% 
          image_annotate("15.5", size = 17, gravity = "north", location = "+1+4",color = "black", boxcolor = NULL) %>% 
          image_annotate("13h 20m", size = 11, gravity = "south", location = "+0+7",color = "black", boxcolor = NULL)

image_write(output, path = "./desktop/output.png", format = "png")

它提供了一個 50x50 的 png 文件,

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM