Как программно извлечь XML-данные из draw.io PNG

Короче говоря, я хочу иметь возможность извлекать XML-данные из PNG, сохраненного из draw.io, с помощью PHP или JavaScript в браузере.

Я использую изображения draw.io со слоями для документирования физических соединений между сетевыми устройствами. Сайт документации — это внутренний сайт, на котором запущен экземпляр докувики, на который у меня нет прав администратора. Я могу загружать экспортированные файлы PNG на сайт, но мне не разрешено загружать файлы TXT, XML или SVG. По какой-то причине я могу встраивать HTML, PHP и JavaScript на страницы. Я нахожусь на том этапе, когда могу вставить код встраивания HTML, но это значительно замедляет работу браузера при редактировании страницы до такой степени, что я не могу вносить какие-либо дальнейшие изменения после вставки кода вставки.

Мое предполагаемое решение для этого состояло бы в том, чтобы использовать PHP или JavaScript для извлечения данных XML из загруженного PNG. В значительной степени противоположно это спросить. Затем я вставил бы его в код для встраивания на странице.

Вот код для встраивания, который я бы использовал:

<div
  class = "mxgraph"
  style = "max-width:100%;border:1px solid transparent;"
  data-mxgraph = "{&quot;highlight&quot;:&quot;#0000ff&quot;,&quot;nav&quot;:true,&quot;resize&quot;:true,&quot;toolbar&quot;:&quot;zoom layers lightbox&quot;,&quot;edit&quot;:&quot;_blank&quot;,&quot;xml&quot;:&quot;_INSERT_XML_DATA_HERE_&quot;}">
</div>

<script
  type = "text/javascript"
  src = "https://www.draw.io/js/viewer.min.js">
</script>

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
1 828
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

XML-данные не могут быть извлечены из PNG, так как это растеризованные сжатые пиксельные данные. Я думаю, что формат, который вы ищете, - это SVG, который представляет собой формат изображения на основе XML. Используя изображение SVG, вы сможете делать все, что вам нужно, с XML внутри файла или просто загрузить файл svg.

В draw.io вам нужно будет экспортировать в формате svg.

Файл > Экспортировать как > SVG...

Надеюсь это поможет.

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

ekrekeler 24.05.2019 16:29

Кроме того, в экспортированном PNG должны быть какие-то XML-данные, поскольку я могу повторно загрузить PNG в draw.io, чтобы внести дополнительные изменения.

ekrekeler 24.05.2019 16:29

Мы встраиваем данные диаграммы в сжатый текстовый раздел PNG (ZTXT).

Thomas the Tank Engine 25.05.2019 23:26

формат png встраивает код xml (если вы выберете его) about.draw.io/выберите формат-экспорт-диаграммы

rupat 02.12.2019 07:39
Ответ принят как подходящий

Если Draw.io может, то и вы сможете! Но я думаю, что это возможно, только если вы выбрали опцию Include a copy of my diagram при экспорте в PNG. С помощью этой опции Draw.io сохраняет дополнительные данные в формате PNG (вы можете посмотреть файл записьGraphModelToPng.

Но интереснее для вас будет извлечьGraphModelFromPng

Да, похоже, это то, что мне нужно. Я попробую и посмотрю, смогу ли я заставить его работать.

ekrekeler 24.05.2019 19:40

Просто предоставив немного больше информации. В PNG вроде как можно хранить "текстовые комментарии" - en.wikipedia.org/wiki/Portable_Network_Graphics. В частности, обратите внимание на поле zTXt. На 2 файла исходного кода, упомянутые выше, есть ссылка zTXt внутри. Стечение обстоятельств? Думаю, нет :)

Raghuram Krishnaswami 04.03.2022 13:14

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