Декодирование data uri svg

 
0
 
Ruby
ava
wallstreet | 26.11.2015, 05:01
Добрый день. Есть data uri подобного содержания: 
Цитата


data:image/svg+xml;charset=utf8,%3Csvgxmlns='http://www.w3.org/2000/svg'width='18'height='36'viewBox='001836'%3E%3Cpathd='M15.70714.293l-2.82-2.82C13.58510.493149.296148c0-3.314-2.686-6-6-6S24.68628s2.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM812c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='%23000'/%3E%3Cpathd='M15.70732.293l-2.82-2.82C13.58528.4931427.2961426c0-3.314-2.686-6-6-6s-62.686-662.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM830c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='red'/%3E%3C/svg%3E


Это картинка. Мне нужно ее декодировать программно и сохранить в формате .svg.
Может кто-нибудь знает каким образом это лучше сделать?
Ответы (3)
ava
wallstreet | 26.11.2015, 19:48 #
Заметил что есть картинки с data uri: data:image/svg+xml;charset=utf8... , а есть data:image/svg+xml;base64...
Правильно я понимаю что разница в типе кодирования?
В любом случае, мне нужно получить формат такой
Цитата


<svg xmlns="http://www.w3.org/2000/svg" width="30" height="47"><desc/><desc/><path d="M30.08 46.594l-15.04-6.76L0 46.594V0h30.08v46.594z" fill="#ffe033"/><desc/><path d="M28.218 43.656l-13.177-6.03-13.13 6.03V0h26.31v43.656z" fill="#fff"/><desc/><path d="M20.63 30.742H9.45v-7.265h1.13v6.135h8.92v-6.135h1.13v7.265z" fill="#1d1d1b"/><desc/><path d="M22.767 23.325l-7.726-6.83-7.72 6.83-.75-.847 7.7-6.805.778-.687 8.477 7.492-.75.847h-.002z" fill="#cc1719"/></svg>


что бы в дальнейшем можно было сохранить эту картинку.
ava
wallstreet | 26.11.2015, 21:46 #
 Попытаюсь еще развить тему!
Для декодирования я использую gem 'data_uri'
Делаю это так:

require 'data_uri'

data_uri_base64 = "data:image/svg+xml;charset=utf8,%3Csvgxmlns='http://www.w3.org/2000/svg'width='18'height='36'viewBox='001836'%3E%3Cpathd='M15.70714.293l-2.82-2.82C13.58510.493149.296148c0-3.314-2.686-6-6-6S24.68628s2.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM812c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='%23000'/%3E%3Cpathd='M15.70732.293l-2.82-2.82C13.58528.4931427.2961426c0-3.314-2.686-6-6-6s-62.686-662.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM830c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='red'/%3E%3C/svg%3E"

svg_img_data = URI::Data.new(data_uri_base64)

после чего вылетает ошибка:
Цитата


ArgumentError: unknown encoding name - utf8
  from /home/andgursky/.rvm/gems/ruby-2.2.3/gems/data_uri-0.1.0/lib/data_uri/uri.rb:42:in `force_encoding'
  from /home/andgursky/.rvm/gems/ruby-2.2.3/gems/data_uri-0.1.0/lib/data_uri/uri.rb:42:in `initialize'
  from (irb):7:in `new'
  from (irb):7
  from /home/andgursky/.rvm/rubies/ruby-2.2.3/bin/irb:11:in `<main>'



В случае же с кодировкой base64 проблем не возникает.
user posted image
ava
wallstreet | 26.11.2015, 23:28 #
всем спасибо, но мне уже ответили на SO

require 'uri'

uri = "data:image/svg+xml;charset=utf8,%3Csvgxmlns='http://www.w3.org/2000/svg'width='18'height='36'viewBox='001836'%3E%3Cpathd='M15.70714.293l-2.82-2.82C13.58510.493149.296148c0-3.314-2.686-6-6-6S24.68628s2.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM812c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='%23000'/%3E%3Cpathd='M15.70732.293l-2.82-2.82C13.58528.4931427.2961426c0-3.314-2.686-6-6-6s-62.686-662.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM830c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='red'/%3E%3C/svg%3E"

data = URI.decode(uri.split(',', 2)[1])
puts data
# =>  <svgxmlns='http://www.w3.org/2000/svg'width='18'height='36'viewBox='001836'><pathd='M15.70714.293l-2.82-2.82C13.58510.493149.296148c0-3.314-2.686-6-6-6S24.68628s2.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM812c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='#000'/><pathd='M15.70732.293l-2.82-2.82C13.58528.4931427.2961426c0-3.314-2.686-6-6-6s-62.686-662.686666c1.29602.492-.4153.473-1.113l2.822.82c.195.195.45.293.707.293.2570.512-.098.707-.293.39-.39.39-1.0230-1.414zM830c-2.2060-4-1.794-4-4s1.794-44-441.79444-1.7944-44z'fill='red'/></svg>
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить