emojidex-converter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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>