1

我有一个包含 100 个 .png 图像的目录,我想将其转换为 pdf。

这些图像正是我想要 pdf 的大小。

magick我可以像这样使用“手动”创建多页pdf :

library(magick)

img1 <- image_read("image1.png")
img2 <- image_read("image2.png")

image_write(c(img1, img2), format = "pdf", "check.pdf")

但是我无法让 image_write 命令接受文件名向量来自动执行此过程。例如,我想从我的目录“test”中的 .png 图像制作一个 100 页的 pdf:

all_images <- list.files("test")

我认为这purrr可能会有所帮助,但没有运气:

library(purrr)

image_write(map(all_images, image_read), format = "pdf", "check.pdf")

有任何想法吗?

4

2 回答 2

2

magick::image_*()函数是矢量化的。所以你可以这样做:

dir = '/path/to/dir'
fl = list.files(dir, full.names = TRUE, pattern = '.png')
# magick
img = image_read(fl) # read from vector of paths
img2 = image_append(img, stack = TRUE) # places pics above one another

image_write(img2, file.path(dir, 'check.pdf'))

这会将图像放在彼此之上,但不是在单个页面上。

于 2019-09-13T08:04:05.617 回答
1

您需要使用 连接不同的"magick-image对象c

这和做的一样c(img1,img2,img3,...)

all_images_1 <- purrr::reduce(
    purrr::map(all_images,image_read),
    c
)

image_write(all_images_1 , format = "pdf", "check.pdf")
于 2019-09-13T04:03:24.497 回答