I have an xml file which contains an embedded image(this is not from a
rails application), i cant get a clear answer on this so basically i
need to know is there a way i can read the image from the xml file and
then store it to the file system somewhere? Im using paperclip as my
means of managing files.
On another note, can you embed an image in an xml file from rails?
I thought the easiest solution would be to provide a link to the
physical image and get it that way,
How the image is encoded into XML? Can you give an example?
Is it a CDATA section with Base64 or something else? If it's a known
encoding, you just read it as an attribute / tag value and then decode
using an appropriate decoder, then open the file in binary mode and
save the decoded version there. If it's paperclip that accepts the
XML, there's such thing as processors that you can use to write a
processor that extracts the image and replaces the original XML file
with the extracted thing.
In order to put the image back into XML, again you use the encoder
(Base64, for example) and put the resulting value inside the tag.
Again, if you give a sample XML, I may be able to give more precise
suggestions.
Ok thanks, i did read about using Base64 to decode it but my main issue
is as you say understanding
what format it was decoded in the first place. Please find a sample
attached
thanks
JB
Aleksey Gureiev wrote:
How the image is encoded into XML? Can you give an example?
Is it a CDATA section with Base64 or something else? If it's a known
encoding, you just read it as an attribute / tag value and then decode
using an appropriate decoder, then open the file in binary mode and
save the decoded version there. If it's paperclip that accepts the
XML, there's such thing as processors that you can use to write a
processor that extracts the image and replaces the original XML file
with the extracted thing.
In order to put the image back into XML, again you use the encoder
(Base64, for example) and put the resulting value inside the tag.
Again, if you give a sample XML, I may be able to give more precise
suggestions.
Also, I just checked the contents of the encoded data and it doesn't appear to be an image, so... just be warned. Check it in the hex editor when decoded. You'll see what I mean.
To put it back into XML, just read the contents of the saved Paperclip file, encode it (Base64.encode64) and put it back into the XML tag (see creating documents with REXML).
Thanks Peter. Think this is coming from an access database export of
some kind so that would probably explain the unknown format.
Am i right in saying its better practice to provide a link to the
image file in the xml if possible rather than embedding the actual
image. It seems
a bit of a recipe for disaster parsing binary data in an xml file and
decoding to an image.
Well if you put the image in the xml as base64 they you don't have to
worry about losing files. Just copy the xml file and you have
everything you need. What would be helpful of course would be for the
xml to contain the meta information about the image such as:
However the xml file is going to get big very quickly and could become
unwieldily and difficult to edit.
As a side note I have checked some files on my disk and gif images
start R0lGODlh... in base 64, jpgs start /9j/4AAQSk... and pngs start
iVBORw0KG...
So if the base64 was an actual image format and you did not have the
mime-type available then inspecting the first few characters of the
should give you a good chance of getting the format correct.