在R中用magick压缩PDF效率远低于命令行,如何优化?
优化R中PDF压缩速度的方法
你的问题核心在于:用magick包的R函数处理时,多了R与ImageMagick之间的数据转换和内存存储开销,而直接控制台命令是ImageMagick独立完成操作,没有中间层损耗。
最优方案:在R中直接调用系统magick命令
用R的system2或system函数直接执行控制台的magick命令,速度和你直接在控制台运行完全一致,还能在R脚本里完成操作:
- 推荐用
system2(更安全,适合处理带空格的文件名):
system2("magick", args = c("-density", "150", "-compress", "zip", "big.pdf", "small.pdf"))
- 简单场景也可以用
system:
system("magick -density 150 -compress zip big.pdf small.pdf")
原方法慢的原因
magick::image_read_pdf会把PDF的每一页都解码成R中的图像对象,这个过程需要在R和ImageMagick之间传递大量数据,还要把所有页面的图像都存在内存里;之后image_write又要把这些R对象重新编码回PDF,额外增加了很多不必要的转换开销。而直接执行控制台命令时,ImageMagick进程直接读取、处理、写入PDF,全程没有R层的干预,所以速度快得多。
内容的提问来源于stack exchange,提问作者ckluss
相关产品推荐
相关产品推荐

