当前的代码已经在处理” “作为启动图像中新段落的信号。我只是想强调此功能,以便具有不同代码的解决方案仍然可以考虑到这一点。当然,该解决方案一次仅适用于一个样本。生成函数或循环的一个可以自动创建所有图像将是很不错的。
lastly,当前代码利用基本r,但是使用
ggplot2
stringr
cat()
str_wrap()
这里是一种蛮力的解决方案。 循环通过每个写作样本,并使用
ggtext::geom_textbox()
尝试一堆尺寸。对于每个人,它都会创建一个1000x1200 PNG(在顶部注意,+100,底部与最终目标+100)。然后检查前100行像素以查看其中是否有文本 - 如果是这样,则字体太大,删除并移至下一个字体。一旦字体拟合,它将播种至1000x1000,然后移至下一个写作样本。
library(ggplot2)
library(ggtext)
library(magick)
for(i in 1:nrow(df)) {
for(s in seq(12, 4, by = -0.25)) {
tec <- paste0("image_", i, "_size-", s, ".png")
p <- ggplot(df[i,], aes(label = Sample)) +
ggtext::geom_textbox(x = 0.5, y = 0.5, width = 1, size = s, box.size = 0) +
theme_void()
ggsave(tec, p, width = 1000, height = 1200, units = "px", bg = "white")
r <- image_read(tec) %>%
image_crop("1000x100") %>%
as.raster()
overlap_pct <- mean(r == "#ffffffff")
if(overlap_pct < 1) {
unlink(tec)
} else(
{
image_read(tec) %>%
image_crop("1000x1000", gravity = "center") %>%
image_write(path = tec, format = "png")
break
}
)
}
}