emojidex-converter 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +11 -0
  5. data/Gemfile +19 -0
  6. data/Guardfile +12 -0
  7. data/LICENSE.md +3 -0
  8. data/README.md +5 -0
  9. data/Rakefile +8 -0
  10. data/emojidex-converter.gemspec +22 -0
  11. data/lib/emojidex/converter.rb +40 -0
  12. data/lib/emojidex/preprocessor.rb +25 -0
  13. data/lib/emojidex_converter.rb +4 -0
  14. data/spec/converter_spec.rb +54 -0
  15. data/spec/spec_helper.rb +11 -0
  16. data/spec/support/collection/aubergine.svg +160 -0
  17. data/spec/support/collection/car.svg +78 -0
  18. data/spec/support/collection/emoji.json +30 -0
  19. data/spec/support/collection/heartbeat/0.svg +121 -0
  20. data/spec/support/collection/heartbeat/1.svg +126 -0
  21. data/spec/support/collection/heartbeat/2.svg +128 -0
  22. data/spec/support/collection/heartbeat/3.svg +128 -0
  23. data/spec/support/collection/heartbeat/4.svg +121 -0
  24. data/spec/support/collection/heartbeat/5.svg +128 -0
  25. data/spec/support/collection/heartbeat/6.svg +126 -0
  26. data/spec/support/collection/heartbeat/7.svg +126 -0
  27. data/spec/support/collection/heartbeat/animation.json +17 -0
  28. data/spec/support/collection/heartbeat/heartbeat.svg +29 -0
  29. data/spec/support/collection/kiss.svg +2375 -0
  30. data/spec/support/collection/kiss/0.svg +177 -0
  31. data/spec/support/collection/kiss/1.svg +177 -0
  32. data/spec/support/collection/kiss/10.svg +293 -0
  33. data/spec/support/collection/kiss/11.svg +235 -0
  34. data/spec/support/collection/kiss/12.svg +235 -0
  35. data/spec/support/collection/kiss/13.svg +235 -0
  36. data/spec/support/collection/kiss/14.svg +177 -0
  37. data/spec/support/collection/kiss/15.svg +177 -0
  38. data/spec/support/collection/kiss/2.svg +177 -0
  39. data/spec/support/collection/kiss/3.svg +235 -0
  40. data/spec/support/collection/kiss/4.svg +235 -0
  41. data/spec/support/collection/kiss/5.svg +235 -0
  42. data/spec/support/collection/kiss/6.svg +293 -0
  43. data/spec/support/collection/kiss/7.svg +235 -0
  44. data/spec/support/collection/kiss/8.svg +235 -0
  45. data/spec/support/collection/kiss/9.svg +235 -0
  46. data/spec/support/collection/kiss/animation.json +25 -0
  47. data/spec/support/collection/kiss/animation.json~ +25 -0
  48. metadata +208 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: eca96b398c96a4bea4792951d367c36f9f1c8852
4
+ data.tar.gz: dae9f088cb49370d089f11a2e69d601d0ea5997f
5
+ SHA512:
6
+ metadata.gz: 8e7b1f51c202e1cb931e68a13b92705175c29c9ec6280bc32e8a7ec7912e90c5af38808af192e600e328762c8f03fe45b788d7df07172b0a83a71786a6facf80
7
+ data.tar.gz: 9e760bdf75c0a2074cdcaa0ab51acfe3f1935c810e8db719e2b00ac422699ad68d3ae52a1c4274f56444c1f1f98611be614df7cefb7b93dd3ad8d8e5ebb48665
data/.gitignore ADDED
@@ -0,0 +1,23 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+ *.swp
20
+ *.swo
21
+ spec/out/
22
+ tmp/
23
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --colour
2
+ --format documentation
data/.rubocop.yml ADDED
@@ -0,0 +1,11 @@
1
+ AsciiIdentifiers:
2
+ Enabled: false
3
+
4
+ AsciiComments:
5
+ Enabled: false
6
+
7
+ AccessorMethodName:
8
+ Enabled: false
9
+
10
+ LineLength:
11
+ Max: 99
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development do
6
+ gem 'rb-inotify', require: false
7
+ gem 'rb-fsevent', require: false
8
+ gem 'guard'
9
+ gem 'guard-rspec'
10
+ gem 'rubocop'
11
+ gem 'guard-rubocop'
12
+ #gem 'emojidex', github: 'emojidex/emojidex'
13
+ end
14
+
15
+ group :test do
16
+ gem 'coveralls', require: false
17
+ gem 'rspec'
18
+ gem 'webmock'
19
+ end
data/Guardfile ADDED
@@ -0,0 +1,12 @@
1
+ guard :rubocop do
2
+ watch(%r{.+\.rb$})
3
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
4
+ end
5
+
6
+ guard :rspec do
7
+ watch(%r{^spec/.+_spec\.rb$})
8
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
9
+ watch('spec/spec_helper.rb') { "spec" }
10
+
11
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
12
+ end
data/LICENSE.md ADDED
@@ -0,0 +1,3 @@
1
+ License
2
+ -------
3
+ Equivilent to emojidex-toolkit. If you have a special license for emojidex-toolkit that license is also applied to emojidex-converter.
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ [![Build Status](https://travis-ci.org/Genshin/emojidex-converter.svg)](https://travis-ci.org/Genshin/emojidex-converter)
2
+ Emojidex Converter
3
+ ------------------
4
+
5
+ WIP
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'rake'
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ task default: :spec
@@ -0,0 +1,22 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'emojidex-converter'
3
+ s.version = '0.0.1'
4
+ s.license = 'Equivilent to emojidex-toolkit'
5
+ s.summary = 'Image conversion modules for emojidex'
6
+ s.description = 'Adds the convert method to Emojidex::Collection and Emojidex::Emoji, which\
7
+ allows you to convert an emoji collection or a single emoji to the specified\
8
+ image format.'
9
+ s.authors = ['Rei Kagetsuki', 'Rika Yoshida']
10
+ s.email = ['zero@genshin.org', 'nazuki@genshin.org']
11
+ s.files = `git ls-files`.split("\n")
12
+ s.homepage = 'http://dev.emojidex.com'
13
+
14
+ s.add_dependency 'rsvg2'
15
+ s.add_dependency 'rmagick'
16
+ s.add_dependency 'ruby-filemagic'
17
+ s.add_dependency 'rapngasm'
18
+ s.add_dependency 'nokogiri'
19
+ s.add_dependency 'cairo'
20
+ s.add_dependency 'emojidex'
21
+ s.add_dependency 'phantom_svg'
22
+ end
@@ -0,0 +1,40 @@
1
+ require 'phantom_svg'
2
+ require_relative 'preprocessor'
3
+
4
+ module Emojidex
5
+ # Converter utility for emojidex
6
+ class Converter
7
+ def self.default_sizes
8
+ { ldpi: 9, mdpi: 18, hdpi: 27, xhdpi: 36, px8: 8,
9
+ px16: 16, px32: 32, px64: 64, px128: 128, px256: 256 }
10
+ end
11
+
12
+ attr_accessor :sizes, :formats, :location
13
+ def initialize(override = {})
14
+ @sizes = override[:sizes] || Converter.default_sizes
15
+ @path = File.expand_path(override[:destination] || ENV['EMOJI_CACHE'] || './')
16
+ end
17
+
18
+ def rasterize(emoji, source_dir)
19
+ emoji.each do |moji|
20
+ phantom_svg = Phantom::SVG::Base.new("#{source_dir}/#{moji.code}.svg")
21
+ @sizes.each do |key, val|
22
+ # Create out directory.
23
+ out_dir = "#{@path}/#{key}"
24
+ FileUtils.mkdir_p(out_dir)
25
+
26
+ # Set size.
27
+ phantom_svg.width = phantom_svg.height = val.to_i
28
+
29
+ # Output png.
30
+ phantom_svg.save_apng("#{out_dir}/#{moji.code}.png")
31
+ end
32
+ end
33
+ end
34
+
35
+ def preprocess(source_dir)
36
+ preprocessor = Emojidex::Preprocessor.new
37
+ preprocessor.compile_svg_animations(source_dir)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ require 'phantom_svg'
2
+
3
+ module Emojidex
4
+ # compile svg files in a svg animation file
5
+ class Preprocessor
6
+ def compile_svg_animations(path)
7
+ Dir.entries(path).each do |file|
8
+ current_path = "#{path}/#{file}"
9
+ next unless File.ftype(current_path) == 'directory'
10
+ compile(current_path) unless file.start_with?('.')
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def compile(source_dir)
17
+ json_path = "#{source_dir}/animation.json"
18
+
19
+ return unless File.exist?(json_path)
20
+
21
+ phantom_svg = Phantom::SVG::Base.new(json_path)
22
+ phantom_svg.save_svg("#{File.dirname(source_dir)}/#{File.basename(source_dir)}.svg")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,4 @@
1
+ require 'emojidex'
2
+
3
+ require 'emojidex/converter'
4
+ require 'emojidex/preprocessor'
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ describe Emojidex::Converter do
4
+ let(:converter) do
5
+ @destination = File.expand_path('../support/tmp/out', __FILE__)
6
+ FileUtils.remove_entry_secure(@destination, true)
7
+ Emojidex::Converter.new(destination: @destination)
8
+ end
9
+
10
+ describe '.new' do
11
+ it 'successfully creates a new Converter object' do
12
+ expect(converter).to be_an_instance_of(Emojidex::Converter)
13
+ end
14
+ end
15
+
16
+ describe '.sizes' do
17
+ it 'is a hash of size codes and sizes in px' do
18
+ expect(converter.sizes).to be_an_instance_of(Hash)
19
+ expect(converter.sizes.size).to eq(Emojidex::Converter.default_sizes.size)
20
+ end
21
+
22
+ it 'overrides sizes when passed in initialization' do
23
+ conv = Emojidex::Converter.new(sizes: { px200: 200, px1024: 1024, way_too_big: 20_000_000 })
24
+ expect(conv.sizes).to eq(px200: 200, px1024: 1024, way_too_big: 20_000_000)
25
+ end
26
+ end
27
+
28
+ describe '.preprocess' do
29
+ it 'preprocesses folders with SVG frame and animation.json files into frame-animated SVGs' do
30
+ setup_working_collection
31
+ converter.preprocess("#{@support_dir}/tmp/collection")
32
+ expect(File.exist?("#{@support_dir}/tmp/collection/heartbeat.svg")).to be true
33
+ end
34
+ end
35
+
36
+ describe '.rasterize' do
37
+ it 'converts base SVG from the source directory to PNG in the destination directory' do
38
+ setup_working_collection
39
+ converter.preprocess("#{@support_dir}/tmp/collection")
40
+ converter.rasterize([Emojidex::Emoji.new(code: 'kiss')], "#{@support_dir}/tmp/collection")
41
+
42
+ expect(File.exist?("#{@destination}/ldpi/kiss.png")).to be_truthy
43
+ expect(File.exist?("#{@destination}/mdpi/kiss.png")).to be_truthy
44
+ expect(File.exist?("#{@destination}/hdpi/kiss.png")).to be_truthy
45
+ expect(File.exist?("#{@destination}/xhdpi/kiss.png")).to be_truthy
46
+ expect(File.exist?("#{@destination}/px8/kiss.png")).to be_truthy
47
+ expect(File.exist?("#{@destination}/px16/kiss.png")).to be_truthy
48
+ expect(File.exist?("#{@destination}/px32/kiss.png")).to be_truthy
49
+ expect(File.exist?("#{@destination}/px64/kiss.png")).to be_truthy
50
+ expect(File.exist?("#{@destination}/px128/kiss.png")).to be_truthy
51
+ expect(File.exist?("#{@destination}/px256/kiss.png")).to be_truthy
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,11 @@
1
+ require 'emojidex_converter'
2
+
3
+ def setup_working_collection
4
+ @support_dir = File.expand_path('../support', __FILE__)
5
+
6
+ FileUtils.rmdir("#{@support_dir}/tmp")
7
+ FileUtils.mkdir_p("#{@support_dir}/tmp")
8
+ FileUtils.cp_r("#{@support_dir}/collection", "#{@support_dir}/tmp")
9
+
10
+ "#{@support_dir}/tmp/collection"
11
+ end
@@ -0,0 +1,160 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="64px"
5
+ height="64px" viewBox="0 0 64 64" enable-background="new 0 0 64 64" xml:space="preserve">
6
+ <g id="レイヤー_1">
7
+ </g>
8
+ <g id="ここから下は新しいやつ">
9
+ <g id="レイヤー_572">
10
+ <g>
11
+ <g>
12
+ <defs>
13
+ <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="1.793" y="52.102" width="42.559" height="5.354">
14
+ <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
15
+ <feBlend in="SourceGraphic" in2="back" mode="normal"/>
16
+ </filter>
17
+ </defs>
18
+ <mask maskUnits="userSpaceOnUse" x="1.793" y="52.102" width="42.559" height="5.354" id="SVGID_1_">
19
+ <g filter="url(#Adobe_OpacityMaskFilter)">
20
+
21
+ <image overflow="visible" width="48" height="10" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
22
+ EAMCAwYAAAGIAAABqgAAAez/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
23
+ Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
24
+ JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAAoAMAMBIgACEQEDEQH/
25
+ xAB1AAEBAQEAAAAAAAAAAAAAAAAGAAcEAQEAAAAAAAAAAAAAAAAAAAAAEAABBAMBAAAAAAAAAAAA
26
+ AAAEAAMFBhABAiARAAEBBgcAAAAAAAAAAAAAAAEAETHRAgMEIJGxEiKjNBIBAAAAAAAAAAAAAAAA
27
+ AAAAEP/aAAwDAQACEQMRAAAAEph8aHZ5DAzyx//aAAgBAgABBQDP/9oACAEDAAEFAM//2gAIAQEA
28
+ AQUADZDd6joWrFLVTqS3UqkpGFqoqMZDa69f/9oACAECAgY/AH//2gAIAQMCBj8Af//aAAgBAQEG
29
+ PwBlzWNLTMrabhswfzMV6OwxXo7DFbZbhkxdzMUy3rGrpmMf/9k=" transform="matrix(1 0 0 1 -1 50)">
30
+ </image>
31
+ </g>
32
+ </mask>
33
+ <g mask="url(#SVGID_1_)">
34
+ <ellipse fill="#3E3A39" cx="23.072" cy="54.777" rx="21.279" ry="2.678"/>
35
+ </g>
36
+ </g>
37
+ <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="57.3721" y1="18.436" x2="10.2473" y2="48.8109">
38
+ <stop offset="0.0606" style="stop-color:#9F009A"/>
39
+ <stop offset="0.0771" style="stop-color:#84008B"/>
40
+ <stop offset="0.1151" style="stop-color:#4B006B"/>
41
+ <stop offset="0.1333" style="stop-color:#35005F"/>
42
+ <stop offset="0.3048" style="stop-color:#29004B"/>
43
+ <stop offset="0.5627" style="stop-color:#1B0033"/>
44
+ <stop offset="0.8011" style="stop-color:#130024"/>
45
+ <stop offset="1" style="stop-color:#10001F"/>
46
+ </linearGradient>
47
+ <path fill="url(#SVGID_2_)" stroke="#230042" stroke-width="0.8905" stroke-miterlimit="10" d="M42.142,17.255
48
+ c0,0-6.189,4.203-11.04,6.799c-3.36,1.798-14.453,4.718-18.936,6.767c-8.499,3.888-11.431,12.61-6.801,19.122
49
+ c4.612,6.486,14.987,8.736,27.112,1.471C45.239,43.768,51.533,35.43,56.16,25.188l1.176-8.795l-4.393-4.518L42.142,17.255z"/>
50
+ <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="14.5557" y1="60.7061" x2="16.9309" y2="47.3296">
51
+ <stop offset="0" style="stop-color:#FFFFFF"/>
52
+ <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
53
+ </linearGradient>
54
+ <path fill="url(#SVGID_3_)" d="M5.815,46.678c-2.897,2.271,7.951,9.332,14.683,8.084c6.732-1.25,10.706-6.518,4.435-7.373
55
+ C18.662,46.535,8.721,44.4,5.815,46.678z"/>
56
+ <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="60.7119" y1="20.7832" x2="34.9491" y2="43.0099">
57
+ <stop offset="0" style="stop-color:#BFC0FF"/>
58
+ <stop offset="1" style="stop-color:#BFC0FF;stop-opacity:0"/>
59
+ </linearGradient>
60
+ <path opacity="0.71" fill="url(#SVGID_4_)" d="M16.751,54.559c5.602,1.844,21.151-8.309,28.234-15.172
61
+ c7.206-6.984,9.563-11.919,10.676-16.263c1.001-3.904-7.71,11.478-16.63,18.204C32.423,46.311,13.408,53.461,16.751,54.559z"/>
62
+ <g opacity="0.43">
63
+ <defs>
64
+ <filter id="Adobe_OpacityMaskFilter_1_" filterUnits="userSpaceOnUse" x="28.595" y="11.789" width="25.861" height="21.419">
65
+ <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
66
+ <feBlend in="SourceGraphic" in2="back" mode="normal"/>
67
+ </filter>
68
+ </defs>
69
+ <mask maskUnits="userSpaceOnUse" x="28.595" y="11.789" width="25.861" height="21.419" id="SVGID_5_">
70
+ <g filter="url(#Adobe_OpacityMaskFilter_1_)">
71
+
72
+ <image overflow="visible" width="31" height="27" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
73
+ EAMCAwYAAAGTAAABxAAAAj3/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
74
+ Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
75
+ JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIABsAHwMBIgACEQEDEQH/
76
+ xAB8AAADAAMAAAAAAAAAAAAAAAAABAcBBQYBAQAAAAAAAAAAAAAAAAAAAAAQAAIBBQADAAAAAAAA
77
+ AAAAAAQFBgAQIAIDAUIHEQACAQIEBgMAAAAAAAAAAAABAgMxBAARIRMQQWFxgQUgEiISAQAAAAAA
78
+ AAAAAAAAAAAAACD/2gAMAwEAAhEDEQAAAJ+HZmsZo8vFesn2BxMD/9oACAECAAEFAMP/2gAIAQMA
79
+ AQUAw//aAAgBAQABBQC0eiBzrw4ifFezqHQ7czYw5emEYybc99HeAe5jL6EONxYtj2fWvW//2gAI
80
+ AQICBj8AH//aAAgBAwIGPwAf/9oACAEBAQY/AOG8c4bbk5GrdsWForkrdzxwtrT7sFz4Lf8AsFKw
81
+ DWOM8+pwWcrEiD8roKYtvYOCILWdJEXojhs8vGN69I2osiAaE4Ft6uMOVGQeijG5eSlzULRR2HDn
82
+ Xx8P/9k=" transform="matrix(1 0 0 1 26 9)">
83
+ </image>
84
+ </g>
85
+ </mask>
86
+ <g mask="url(#SVGID_5_)">
87
+
88
+ <linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="42.7148" y1="27.9424" x2="33.0063" y2="35.8643" gradientTransform="matrix(1.3624 0.7119 -1.639 3.3773 42.244 -110.9866)">
89
+ <stop offset="0" style="stop-color:#FFFFFF"/>
90
+ <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
91
+ </linearGradient>
92
+ <path fill="url(#SVGID_6_)" d="M46.744,14.155c9.627-7.496,10.746,4.681,0.479,10.713
93
+ C15.273,43.639,30.783,26.586,46.744,14.155z"/>
94
+ </g>
95
+ </g>
96
+ <g>
97
+ <g>
98
+ <linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="50.1357" y1="7.8887" x2="55.3858" y2="23.0137">
99
+ <stop offset="0" style="stop-color:#ABFF00"/>
100
+ <stop offset="0.2207" style="stop-color:#91EF00"/>
101
+ <stop offset="0.7466" style="stop-color:#58CD00"/>
102
+ <stop offset="1" style="stop-color:#42BF00"/>
103
+ </linearGradient>
104
+ <path fill="url(#SVGID_7_)" d="M49.885,10.373c2.796-1.288,6.432,0.774,7.539-0.947c1.11-1.72,2.794-2.881,2.794-2.881
105
+ s2.528,1.299,1.884,2.009c0,0-2.957,1.981-2.939,3.116c0.019,1.135,3.424,6.891,0.492,10.712
106
+ c-2.932,3.823-6.423,8.222-6.423,8.222s0.474-4.658,0.868-5.997c0.395-1.337,0.814-5.187,0.993-6.478
107
+ c0,0-8.485,3.427-9.633,5.497c0,0,2.903-7.119,4.697-8.303c-2.503,0.541-6.163,0.99-8.632,2.208
108
+ C41.525,17.532,46.843,11.773,49.885,10.373z"/>
109
+ <path fill="none" stroke="#223502" stroke-width="0.8905" stroke-miterlimit="10" d="M49.885,10.373
110
+ c2.796-1.288,6.432,0.774,7.539-0.947c1.11-1.72,2.794-2.881,2.794-2.881s2.528,1.299,1.884,2.009c0,0-2.957,1.981-2.939,3.116
111
+ c0.019,1.135,3.424,6.891,0.492,10.712c-2.932,3.823-6.423,8.222-6.423,8.222s0.474-4.658,0.868-5.997
112
+ c0.395-1.337,0.814-5.187,0.993-6.478c0,0-8.485,3.427-9.633,5.497c0,0,2.903-7.119,4.697-8.303
113
+ c-2.503,0.541-6.163,0.99-8.632,2.208C41.525,17.532,46.843,11.773,49.885,10.373z"/>
114
+ </g>
115
+ <defs>
116
+ <filter id="Adobe_OpacityMaskFilter_2_" filterUnits="userSpaceOnUse" x="39.571" y="6.028" width="23.081" height="26.045">
117
+
118
+ <feColorMatrix type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" color-interpolation-filters="sRGB" result="source"/>
119
+ </filter>
120
+ </defs>
121
+ <mask maskUnits="userSpaceOnUse" x="39.571" y="6.028" width="23.081" height="26.045" id="SVGID_8_">
122
+ <g filter="url(#Adobe_OpacityMaskFilter_2_)">
123
+
124
+ <image overflow="visible" width="28" height="31" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
125
+ EAMCAwYAAAGWAAABxAAAAi7/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
126
+ Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
127
+ JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAB8AHAMBIgACEQEDEQH/
128
+ xAB+AAACAwEAAAAAAAAAAAAAAAACBwAEBgUBAQAAAAAAAAAAAAAAAAAAAAAQAAAFBQEBAAAAAAAA
129
+ AAAAAAIDBAUGABAgARIRFBEAAQMDAgUFAAAAAAAAAAAAARECAwBBEhAxIFFhBAUhcdEiJBIBAAAA
130
+ AAAAAAAAAAAAAAAAIP/aAAwDAQACEQMRAAAAX92oyjHcZ0JUhhDXZEhP/9oACAECAAEFAMP/2gAI
131
+ AQMAAQUAw//aAAgBAQABBQCkDO4uOwxdeSX4DsHHUHeEnxyAohYy2EcaICiRjQMNzNmbFX//2gAI
132
+ AQICBj8AH//aAAgBAwIGPwAf/9oACAEBAQY/AK/JC57VTLYVLP5CMwQxL6m6X9qRTgu90oF6ltwK
133
+ eyRje3Yw4xuJH2CfNdwCQ+NzCjgenPURlxwGzRtUPjIjnI5gatgE4FkXLry0/9k=" transform="matrix(1 0 0 1 37 4)">
134
+ </image>
135
+ </g>
136
+ </mask>
137
+ <g opacity="0.16" mask="url(#SVGID_8_)">
138
+ <path fill="#355606" d="M49.885,10.373c2.796-1.288,6.432,0.774,7.539-0.947c1.11-1.72,2.794-2.881,2.794-2.881
139
+ s2.528,1.299,1.884,2.009c0,0-2.957,1.981-2.939,3.116c0.019,1.135,3.424,6.891,0.492,10.712
140
+ c-2.932,3.823-6.423,8.222-6.423,8.222s0.474-4.658,0.868-5.997c0.395-1.337,0.814-5.187,0.993-6.478
141
+ c0,0-8.485,3.427-9.633,5.497c0,0,2.903-7.119,4.697-8.303c-2.503,0.541-6.163,0.99-8.632,2.208
142
+ C41.525,17.532,46.843,11.773,49.885,10.373z"/>
143
+ <path fill="none" stroke="#355606" stroke-width="0.8905" stroke-miterlimit="10" d="M49.885,10.373
144
+ c2.796-1.288,6.432,0.774,7.539-0.947c1.11-1.72,2.794-2.881,2.794-2.881s2.528,1.299,1.884,2.009c0,0-2.957,1.981-2.939,3.116
145
+ c0.019,1.135,3.424,6.891,0.492,10.712c-2.932,3.823-6.423,8.222-6.423,8.222s0.474-4.658,0.868-5.997
146
+ c0.395-1.337,0.814-5.187,0.993-6.478c0,0-8.485,3.427-9.633,5.497c0,0,2.903-7.119,4.697-8.303
147
+ c-2.503,0.541-6.163,0.99-8.632,2.208C41.525,17.532,46.843,11.773,49.885,10.373z"/>
148
+ </g>
149
+ </g>
150
+ <linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="16.4053" y1="35.6416" x2="33.3303" y2="29.8717">
151
+ <stop offset="0" style="stop-color:#FFFFFF"/>
152
+ <stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
153
+ </linearGradient>
154
+ <path fill="url(#SVGID_9_)" d="M12.87,32.214c-0.064,0.042-0.12,0.082-0.167,0.121c-2.693,1.298-5.364,3.175-6.352,5.095
155
+ c-4.375,8.5,4.375,7.875,6,2.5c1.163-3.846,4.868-7.421,6.411-8.446c3.897-2.589,11.816-2.968,12.498-5.121
156
+ C32.04,23.907,14.362,31.25,12.87,32.214z"/>
157
+ </g>
158
+ </g>
159
+ </g>
160
+ </svg>
@@ -0,0 +1,78 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="&#x30EC;&#x30A4;&#x30E4;&#x30FC;_1"
5
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="64px" height="64px"
6
+ viewBox="0 0 64 64" style="enable-background:new 0 0 64 64;" xml:space="preserve">
7
+ <g>
8
+ <g>
9
+ <defs>
10
+ <filter id="Adobe_OpacityMaskFilter" filterUnits="userSpaceOnUse" x="2.313" y="40.02" width="59.375" height="2.375">
11
+ <feFlood style="flood-color:white;flood-opacity:1" result="back"/>
12
+ <feBlend in="SourceGraphic" in2="back" mode="normal"/>
13
+ </filter>
14
+ </defs>
15
+ <mask maskUnits="userSpaceOnUse" x="2.313" y="40.02" width="59.375" height="2.375" id="SVGID_1_">
16
+ <g style="filter:url(#Adobe_OpacityMaskFilter);">
17
+
18
+ <image style="overflow:visible;" width="64" height="7" xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEASABIAAD/7AARRHVja3kAAQAEAAAAHgAA/+4AIUFkb2JlAGTAAAAAAQMA
19
+ EAMCAwYAAAGEAAABqgAAAin/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAUGx8XFxcXFx8eFxoaGhoX
20
+ Hh4jJSclIx4vLzMzLy9AQEBAQEBAQEBAQEBAQEABEQ8PERMRFRISFRQRFBEUGhQWFhQaJhoaHBoa
21
+ JjAjHh4eHiMwKy4nJycuKzU1MDA1NUBAP0BAQEBAQEBAQEBAQP/CABEIAAcAQAMBIgACEQEDEQH/
22
+ xAB0AAEBAQEAAAAAAAAAAAAAAAAAAgUGAQEAAAAAAAAAAAAAAAAAAAAAEAABBQEBAAAAAAAAAAAA
23
+ AAAFAAMEFQcgAREAAgAEBgMAAAAAAAAAAAAAAQIAEgMEEZIU1AU1IUGREgEAAAAAAAAAAAAAAAAA
24
+ AAAg/9oADAMBAAIRAxEAAADltYLABGSH/9oACAECAAEFAOP/2gAIAQMAAQUA4//aAAgBAQABBQAe
25
+ SAR4rRPOvW7LNlZZsrLNlZZsnSedeNkCQCRF/9oACAECAgY/AB//2gAIAQMCBj8AH//aAAgBAQEG
26
+ PwBaV9w2tuATNX1VWjMCfAkQYDAQprcPcpVIE6pUZ1B9gMbhSfgjqbvO26jqbvO26jqbvO26jqbv
27
+ O26hjR4e5eqAZFeoyKT6BYXDEfDDUrHhtFcEiWvqqtaUA+RI4wOIj//Z" transform="matrix(1 0 0 1 0 38)">
28
+ </image>
29
+ </g>
30
+ </mask>
31
+ <g style="mask:url(#SVGID_1_);">
32
+ <ellipse style="fill:#888888;" cx="32" cy="41.207" rx="29.688" ry="1.188"/>
33
+ </g>
34
+ </g>
35
+ <path style="fill:#D82400;stroke:#260E0A;stroke-miterlimit:10;" d="M2.563,34.869c0,0,0.5-1.935,2.25-2.579s9.75-3.224,16-3.482
36
+ c0,0,6.875-3.868,9.75-4.771c2.875-0.903,8.75-0.517,11.75-0.259c3,0.259,9.75,3.354,12.125,3.611s5,0.902,5,0.902l0.125,2.837
37
+ l1.25,1.935c0,0,0.375,3.74-1,4.9c-1.375,1.161-2.5,0.774-2.5,0.774l-2,0.387c0,0,1.125-4.127-1.625-6.062
38
+ s-6.625-0.645-7.875,1.548s-0.375,4.9-0.375,4.9l-26.5,0.129c0,0,0.625-4.643-2.5-6.577s-6.25-0.258-7.375,1.548
39
+ S8.438,39.77,8.438,39.77l-5.125-0.773l-0.25-1.227L2.563,34.869z"/>
40
+ <circle style="fill:#0C0A09;" cx="13.375" cy="37.332" r="4.438"/>
41
+ <circle style="fill:#0C0A09;" cx="50.375" cy="37.207" r="4.438"/>
42
+ <path style="fill:#FFFFFF;stroke:#260E0A;stroke-miterlimit:10;" d="M23.688,29.895c0,0,5.875-4.375,7.75-4.625
43
+ s6.875-0.375,9.625,0.25s5.375,1.875,5.375,1.875s-3.375,2.125-6.375,1.875S23.688,29.895,23.688,29.895z"/>
44
+ <path style="fill:#FFFDFD;" d="M4.313,33.895c0,0,3.5-0.5,4.125-1.625S5.063,33.145,4.313,33.895z"/>
45
+ <path style="fill:#D82400;stroke:#260E0A;stroke-miterlimit:10;" d="M23.938,31.02l-0.875-0.375l1.25-1l1.875-1.5
46
+ c0,0,1.875,0,2.5,0.5s-0.5,2.625-0.5,2.625l-2.375-0.5L23.938,31.02z"/>
47
+ <line style="fill:#FFFFFF;stroke:#260E0A;stroke-miterlimit:10;" x1="41.046" y1="23.683" x2="43.829" y2="21.605"/>
48
+ <polygon style="fill:#63170A;" points="21.313,38.395 45.188,36.52 44.938,39.02 21.688,39.145 "/>
49
+ <path style="fill:#FFC3BB;" d="M58.938,31.645c0,0-2.375,0.625-2.5-1.75l2.875-0.25L58.938,31.645z"/>
50
+ <polygon style="fill:#260E0A;" points="40.373,25.27 46.438,27.627 40.063,29.395 "/>
51
+ <polygon style="fill:#63170A;" points="2.563,34.895 3.563,34.895 3.688,36.645 2.688,37.52 "/>
52
+ <polygon style="fill:#63170A;" points="3.313,38.77 5.688,35.645 6.938,35.145 5.688,38.395 "/>
53
+ <path style="fill:none;stroke:#DD3E28;stroke-miterlimit:10;" d="M14.938,31.145c0,0,3.25,0.75,4.125,3l22.75-1.75l4-0.125
54
+ c0,0,3.75-2.875,7.625-1"/>
55
+ <circle style="fill:none;stroke:#595757;stroke-width:0.5;stroke-miterlimit:10;" cx="13.563" cy="37.395" r="3.375"/>
56
+ <g>
57
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:3;" points="16.438,35.895 13.813,37.27
58
+ 13.188,34.27 "/>
59
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:10;" points="16.688,37.02 13.313,37.145
60
+ 14.188,34.395 "/>
61
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:3;" points="14.938,40.02 13.813,37.27
62
+ 15.813,39.52 "/>
63
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;" points="11.313,39.395 13.813,37.27 12.188,39.895 "/>
64
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;" points="10.688,35.52 13.813,37.27 10.438,36.645 "/>
65
+ </g>
66
+ <circle style="fill:none;stroke:#595757;stroke-width:0.5;stroke-miterlimit:10;" cx="50.313" cy="37.27" r="3.375"/>
67
+ <g>
68
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:3;" points="53.188,35.77 50.563,37.145
69
+ 49.938,34.145 "/>
70
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:10;" points="53.438,36.895 50.063,37.02
71
+ 50.938,34.27 "/>
72
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;stroke-miterlimit:3;" points="51.688,39.895 50.563,37.145
73
+ 52.563,39.395 "/>
74
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;" points="48.063,39.27 50.563,37.145 48.938,39.77 "/>
75
+ <polyline style="fill:none;stroke:#F7F7F7;stroke-width:0.5;" points="47.438,35.395 50.563,37.145 47.188,36.52 "/>
76
+ </g>
77
+ </g>
78
+ </svg>