R中的方法在svg文件上裁剪空白
Posted
技术标签:
【中文标题】R中的方法在svg文件上裁剪空白【英文标题】:Method in R to crop whitespace on svg file 【发布时间】:2021-12-15 05:52:54 【问题描述】:尝试裁剪 SVG 周围的空白(在本例中为“透明空间”)。并没有真正看到一个简单的方法来做到这一点。尝试了 knitr::plot_crop() 和 magick::image_trim() 但无济于事。这两种方法的输出都会移除 alpha 层并使其具有白色背景。
以下示例 SVG:https://freesvg.org/crossed-onions 并点击“下载”
原文:
针织法:
knitr::plot_crop("~/Downloads/onions-pd.svg")
产生:
Imagemagick 版本:
library(magick)
img = image_read("~/Downloads/onions-pd.svg")
img = image_trim(img)
image_write(img,"~/Downloads/onions-pd.svg",format="svg")
产生:
【问题讨论】:
【参考方案1】:听起来您想裁剪 svg 的 viewBox
。可能有很多方法可以做到这一点,但一种是计算出新的 viewBox 坐标并将它们写入 svg 文件。
我们可以像这样得到不透明部分的限制:
library(magick)
img <- image_read_svg("onions-pd.svg")
data <- image_data(img)
opaque <- which(data[4,,] != 0, arr.ind = TRUE)
limits <- paste(paste(apply(opaque, 2, min), collapse = ", "),
paste(apply(opaque, 2, max), collapse = ", "), sep = ", ")
limits
#> [1] "11, 64, 417, 440"
并将它们写入 svg 文件的副本,如下所示:
library(xml2)
onions_xml <- read_xml("onions-pd.svg")
xml_set_attr(onions_xml, attr = "viewBox", limits)
write_xml(onions_xml, "onions-cropped.svg")
【讨论】:
谢谢!我确实收到以下错误:Error in `[.magick-image`(img, 4, , ) : unused arguments (alist(, ))
@engineerchange 如果您尝试对图像进行子集化,而不是image_data
的输出,您应该只会收到该错误。我已重命名变量以使其更清晰。你能用新版本再试一次吗?
抱歉耽搁了。这按预期工作!感谢您使变量更加清晰。以上是关于R中的方法在svg文件上裁剪空白的主要内容,如果未能解决你的问题,请参考以下文章