Функция draw_image () из cowplot приводит к размытым PDF-файлам - PullRequest
0 голосов
/ 25 апреля 2018

Чтение векторизованного PDF иногда приводит к получению сильно размытого изображения с помощью функции draw_image() из cowplot:

library(ggplot2)
library(cowplot)
library(magick)

# make pdf input as example
p <- ggplot(iris, aes(Sepal.Length, Sepal.Width, shape = Species)) + 
  geom_point() + scale_shape_manual(values = 21:23) + theme_classic()
ggsave("input.pdf", p, width = 6, height = 4.2)

# now draw with draw_image() and then write as png
fig <- ggdraw() + draw_image("input.pdf")
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200) # blurred image

enter image description here

Тем не менее, чтение SVG работает нормально:

fig <- ggdraw() +
  draw_image("http://jeroen.github.io/images/tiger.svg")
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200)

enter image description here

Также, используя:

magick::image_read_pdf("input.pdf")

дает не размытый вывод.

1 Ответ

0 голосов
/ 25 апреля 2018

Я не совсем уверен, почему SVG и pdf обрабатываются по-разному, или что именно происходит, когда вы читаете pdf с помощью magick::image_read() (это то, что draw_image() использует внутри), но одно из решений заключается в использовании magick::image_read_pdf() внутриdraw_image().Функция magick::image_read_pdf() преобразует PDF в растровое изображение, и мы можем указать нужное разрешение с помощью аргумента density:

fig <- ggdraw() + draw_image(magick::image_read_pdf("input.pdf", density = 600))
ggsave("output.png", fig, width = 1, height = .7, dpi = 1200)

enter image description here

...