R: Импорт векторной графики на график. Не удается заставить grImport создавать значимый XML.

Я пытаюсь импортировать векторную графику с помощью пакета grImport, но столкнулся с проблемой, которую не могу решить (несмотря на то, что трачу весь день на Интернет, в том числе и здесь!)...

Я установил Ghostscript и преобразовал свое изображение.png в файл.ps (и проверил, не является ли это причиной сбоя, путем преобразования изображений.jpg и.pdf - но с тем же результатом).

Вот пример моего.png файла: простой кросс png

И пример файла.ps после того, как я его преобразовал: простой кросс ps

Я не получаю сообщений об ошибках при запуске:

PostScriptTrace("cross.ps")
img <- readPicture("cross.ps.xml")

Однако если я попытаюсь использовать изображение на графике, изображение не будет отображаться.

Проследив это, я обнаружил, что файл.XML, созданный PlotScriptTrace, не содержит путей:

str(img)
>Formal class 'Picture' [package "grImport"] with 2 slots
..@ paths  : Named list()
..@ summary:Formal class 'PictureSummary' [package "grImport"] with 3 slots
.. .. ..@ numPaths: num 0
.. .. ..@ xscale  : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "xmin" "xmax"
.. .. ..@ yscale  : Named num [1:2] 99999 -99999
.. .. .. ..- attr(*, "names")= chr [1:2] "ymin" "ymax"

Поэтому, я думаю, что есть проблема, когда я вызываю PostScriptTrace() или readPicture(), но я не знаю, как выяснить, что и как делать дальше.

Вот мой sessionInfo(), если это помогает:

R version 3.3.0 (2016-05-03)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
[1] grImport_0.9-0 XML_3.98-1.4  

Обратите внимание, что моя проблема идентична: R: Импорт векторной графики на график - Не удается заставить grImport работать, но ответ на этот предыдущий вопрос мне не помог - он указывает, что файл XML не был скомпилирован правильно, и я уже разобрался.

Может кто-нибудь указать, где я иду не так, пожалуйста?

1 ответ

Решение

Перемещен к ответу, слишком велик для комментариев.

Я пытаюсь импортировать файл.ps, который я считаю векторной графикой?

ОК. Это неправильное представление, программы PostScript могут содержать как векторные, так и растровые данные. Очевидно, что если вы начнете с растровых данных (PNG, JPEG, TIFF и т. Д.), То эквивалентная программа PostScript просто будет содержать те же растровые данные (сжатие по модулю).

Заглянув в опубликованную вами программу PostScript, мы можем увидеть обычный всесторонний заголовок PostScript с устройства ghostscript ps2write, за которым следует настоящая программа:

%%EndPageSetup
5 0 obj
<</Length 156041>>stream
q 0.12 0 0 0.12 0 0 cm
q 3950 0 0 5341.67 508.333 833.333 cm
BI
/CS/RGB
/W 1422
/H 1923
/BPC 8
/F[/A85
/LZW]
ID
J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H>q_R=AlC^c
...
...
=Z;P44-S>^PSliQ=\"^E99e+*Po3Mc=]UKU!W~>
EI Q
Q

endstream
endobj
pagesave restore
%%PageTrailer
%%Trailer
end
%%EOF

Функция ID (определенная в прологе) рисует следующие встроенные данные в виде растрового изображения. Затем следуют растровые данные, и программа выдает страницу, очищает ее и завершает работу.

Так что там вообще нет векторных данных, что неудивительно, поскольку исходные данные не были векторными.

Я ничего не знаю о R, но из вопросов, которые я вижу, я предполагаю, что он не может обрабатывать растровые данные, поэтому вы получаете пустой вывод.

Другие вопросы по тегам