提问人:MYaseen208 提问时间:10/23/2023 最后编辑:MYaseen208 更新时间:10/26/2023 访问量:143
将文件夹中的所有 png 文件转换为 webp
Converting all png files from a folder to webp
问:
我可以使用以下命令将单个文件从 png 格式转换为 webp:
library(png)
library(webp)
write_webp(
image = readPNG("fig1.png")
, target = "fig1.webp"
, quality = 80
)
想知道如何使用 R 代码将所有 png 文件从文件夹转换为 webp,如下所示:
library(furrr)
list.files(
path = getwd()
, pattern = "*.png"
, full.names = TRUE
) |>
future_map(
.x =
, .f = write_webp
, image = readPNG("fig1.png")
, target = "fig1.webp"
, quality = 80
)
编辑
以下代码适用于一个 .png 文件,但不适用于多个文件。请有任何提示。
library(png)
library(webp)
library(furrr)
library(stringr)
FileNames <-
list.files(
path = getwd()
, pattern = "*.png"
, full.names = FALSE
) %>%
str_remove(
string = .
, pattern = ".png"
) %>%
paste0(., ".webp")
FileNames
list.files(
path = getwd()
, pattern = "*.png"
, full.names = TRUE
) %>%
future_map(
.x =
, .f = readPNG
) %>%
future_map(
.x =
, .f = write_webp
, target = FileNames
, quality = 80
)
答:
1赞
Quinten
10/25/2023
#1
您可以使用 a 将函数应用于文件名的向量。为了确保每次都带有扩展名,您可以使用该函数来获取没有扩展名的名称,如下所示:sapply
target
.webp
file_path_sans_ext
.png
library(png)
library(webp)
setwd("/Users/quinten/Downloads/test_folder_webp")
files <- dir(pattern = "png$")
sapply(files, \(x) {
write_webp(
image = readPNG(x)
, target = paste0(tools::file_path_sans_ext(x),".webp")
, quality = 80
)
})
创建于 2023-10-25 使用 reprex v2.0.2
当您检查文件夹时,您会看到目标文件已转换。
1赞
jay.sf
10/26/2023
#2
在类似 unix 的 R 中,您可以在 Bash 中使用,但通过 .这应该比首先在 R 中加载要快得多。命令将在工作目录中执行,您可以使用 指定。cwebp
system
setwd()
sprintf('cwebp -q 85 %s.png -o %s.webp -quiet', pfx, pfx) |> lapply(system)
其中表示质量,可以设置在 1 到 100 之间。-q 85
pfx
是要转换的文件的前缀,您可以手动定义这些前缀或类似定义:grep
pfx <- grep('png$', dir(), value=TRUE) |> gsub(pat='.png', rep='')
在其他操作系统上也应该可以进行类似的操作。
评论
r
write_webp
system()
magick mogrify -format WEBP *.png