将文件夹中的所有 png 文件转换为 webp

Converting all png files from a folder to webp

提问人:MYaseen208 提问时间:10/23/2023 最后编辑:MYaseen208 更新时间:10/26/2023 访问量:143

问:

我可以使用以下命令将单个文件从 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
      )
R PNG 网页

评论

0赞 Limey 10/23/2023
这回答了你的问题吗?读取文件夹中的所有文件,并将函数应用于每个数据框
0赞 Limey 10/23/2023
您的问题是读取所有文件还是更改格式?
0赞 Mark 10/23/2023
在使用Tidyverse之前,请考虑阅读Tidyverse的标签信息 - 当您单击它时出现的情况是“仅当您的问题与安装,与您的系统集成或包含整个Tidyverse库有关时,才使用此标签。如果您的问题与 tidyverse 的一个或两个组件有关,例如 dplyr 或 ggplot2,请不要使用。使用 *those 标签,并标记 as 以获得更好的响应。r
0赞 MYaseen208 10/23/2023
@Limey:感谢您的评论。我确实只有功能问题。我能够应用所有其他功能。write_webp
1赞 Mark Setchell 10/25/2023
如果你想简单地完成它,你可以用某种类型的命令“掏出”ImageMagick并运行system()magick mogrify -format WEBP *.png

答:

1赞 Quinten 10/25/2023 #1

您可以使用 a 将函数应用于文件名的向量。为了确保每次都带有扩展名,您可以使用该函数来获取没有扩展名的名称,如下所示:sapplytarget.webpfile_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 中加载要快得多。命令将在工作目录中执行,您可以使用 指定。cwebpsystemsetwd()

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='')

在其他操作系统上也应该可以进行类似的操作。