Вставьте изображения в XML-файл

Вы можете скопировать существующий Http-запрос в новый Http-запрос с заголовками

val req: HttpRequest = ???
val hs: Seq[HttpHeader] = Seq(RawHeader("a", "b"))
val reqWithHeaders: HttpRequest = req.copy(headers=hs)
.
16
задан Nguyen Quoc Hung 14 April 2009 в 08:22
поделиться

5 ответов

Наиболее распространенный способ сделать это - включить двоичный элемент как base-64 в элемент. Однако это обходной путь, добавляющий немного объема в файл.

Например, это байты от 00 до 09 (обратите внимание, что нам нужно 16 байтов для кодирования данных размером 10 байтов):

<xml><image>AAECAwQFBgcICQ==</image></xml>

how , эта кодировка зависит от архитектуры. Например, в .NET вы можете использовать Convert.ToBase64String или XmlWriter.WriteBase64 .

21
ответ дан 30 November 2019 в 16:58
поделиться

Поскольку XML является текстовым форматом, а изображения, как правило, нет (за исключением некоторых древних и архаичных форматов), в действительности нет разумного способ сделать это. Просмотр таких вещей, как ODT или OOXML, также показывает, что они не встраивают изображения непосредственно в XML.

Однако вы можете конвертировать его в Base64 или аналогичный и встраивать в XML.

Пробелы XML однако в таких случаях обработка может еще больше усложнить ситуацию.

4
ответ дан 30 November 2019 в 16:58
поделиться

XML - это не формат хранения изображений и двоичных данных. Я думаю, что все зависит от того, как вы хотите использовать эти изображения. Если вы находитесь в веб-приложении и хотели бы прочитать их оттуда и отобразить их, я бы сохранил URL-адреса. Если вам нужно отправить их в другую конечную точку сети, я бы их сериализовал, а не сохранял вручную в XML. Пожалуйста, объясните, каков сценарий.

4
ответ дан 30 November 2019 в 16:58
поделиться

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

Это также способ это делает Word, потому что это XML-файлы (не то, что Word является хорошим примером того, как работать с XML: P).

4
ответ дан 30 November 2019 в 16:58
поделиться

Вот некоторый код, взятый из блога Кирка Эванса , который демонстрирует, как кодировать изображение в C #;

//Load the picture from a file
Image picture = Image.FromFile(@"c:\temp\test.gif");

//Create an in-memory stream to hold the picture's bytes
System.IO.MemoryStream pictureAsStream = new System.IO.MemoryStream();
picture.Save(pictureAsStream, System.Drawing.Imaging.ImageFormat.Gif);

//Rewind the stream back to the beginning
pictureAsStream.Position = 0;
//Get the stream as an array of bytes
byte[] pictureAsBytes = pictureAsStream.ToArray();

//Create an XmlTextWriter to write the XML somewhere... here, I just chose
//to stream out to the Console output stream
System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter(Console.Out);

//Write the root element of the XML document and the base64 encoded data
writer.WriteStartElement("w", "binData",
                         "http://schemas.microsoft.com/office/word/2003/wordml");

writer.WriteBase64(pictureAsBytes, 0, pictureAsBytes.Length);

writer.WriteEndElement();
writer.Flush();
2
ответ дан 30 November 2019 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: