我正在尝试使用 R 批量调整数千个图像的大小(即减小文件大小)。我已经使用下面的代码成功地实现了这一点,但这需要很长时间(特别是当调整大小 > 50,000 个图像时)。有什么办法可以让这个任务在多个核心上运行吗?我是并行计算方面的新手,因此我们将不胜感激。提前致谢!
library(imager)
pages <- list.files(path = '...insert directory path...',
full.names = TRUE)
for(x in 1:length(pages)) {
file <- load.image(pages[x])
resized <- imresize(file,
scale = 0.390625)
save.image(resized,
file = gsub("JPG", "jpg", paste(pages[x])))
}
秘密武器是GNU 并行。安装它homebrew:
brew install parallel
现在,创建一个输出目录,这样你的输入图像就不会被破坏并运行一堆mogrify
并行命令:
mkdir results
parallel -X mogrify -resize 39% -path results ::: *.jpg
请做好备份,直到您掌握窍门为止!
基准
我制作了 1,000 个充满随机噪声的 400x400 JPEG,并按顺序转换它们
time for i in *.jpg; do convert $i -resize 39% results/$i; done
real 0m19.086s
user 0m18.615s
sys 0m3.445s
然后并行:
time parallel -X mogrify -resize 39% -path results ::: *.jpg
real 0m3.351s
user 0m23.021s
sys 0m0.706s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)