profound 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0d7233a3beab83b29bea0ca38dd69b66e4e4fda5
4
+ data.tar.gz: 1e65a9c3b9fe3ba264be26fa35cb23591f2d0dea
5
+ SHA512:
6
+ metadata.gz: bc355208fb8b5f4cc5caa7427d009578d34ed5cbd869b0fb18cd9fa2310451fe347dd901f1d2b38f9a09d8b1fc251e1f2c3743659633b0e320c853b861570013
7
+ data.tar.gz: 9764519b9008083ecf12b89cf76fe42e71df6f811cda159fd3bfd8dfe8dcc4750afc7f05128a3d73ad0d8c6558452facec23e83afcab9066a752a81a8cec2728
data/README.md CHANGED
@@ -1,24 +1,23 @@
1
1
  # Profound
2
2
 
3
- TODO: Write a gem description
3
+ Create wallpapers like those on [theprofoundprogrammer](http://theprofoundprogrammer.com) even if you're aweful at Photoshop. It's based on *ImageMagick*.
4
4
 
5
5
  ## Installation
6
6
 
7
- Add this line to your application's Gemfile:
7
+ $ brew install imagemagick
8
+ $ gem install profound
8
9
 
9
- gem 'profound'
10
+ ## Usage
10
11
 
11
- And then execute:
12
+ $ profound path/to/source.jpg "Complain about something" path/to/destination.jpg
12
13
 
13
- $ bundle
14
+ The source can also be a few keywords to help find an image. You also specify the size of the image to find
14
15
 
15
- Or install it yourself as:
16
+ $ profound --search-size=2880x1800 "road at night" "I hate cars" ~/profound-cars.jpg
16
17
 
17
- $ gem install profound
18
-
19
- ## Usage
18
+ The source can also be omitted altogether. In that case, `profound` will search for images.
20
19
 
21
- TODO: Write usage instructions here
20
+ $ profound "Something ironic", ~/profound-ironic.jpg
22
21
 
23
22
  ## Contributing
24
23
 
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env ruby
2
- require 'pry'
3
2
  require 'optparse'
4
3
  require File.expand_path('../../lib/profound', __FILE__)
5
4
 
6
5
 
7
6
  options = {
8
- :theme => :light
7
+ :theme => :light,
8
+ :width => 1920,
9
+ :height => 1200
9
10
  }
10
- source, caption, destination = OptionParser.new do |opts|
11
+
12
+ parser = OptionParser.new do |opts|
11
13
  opts.banner = 'Usage: profound [options] source "Caption or label" destination'
12
14
  opts.separator ""
13
15
  opts.separator "Specific options:"
@@ -20,11 +22,26 @@ source, caption, destination = OptionParser.new do |opts|
20
22
  options[:filter] = filter.to_sym
21
23
  end
22
24
 
23
- end.parse!
25
+ opts.on("--search-size=WIDTHxHEIGHT") do |size|
26
+ sizes = size.split("x")
27
+ options[:width] = sizes[0]
28
+ options[:height] = sizes[1]
29
+ end
30
+
31
+ opts.on("--font-family=FONT") do |font_family|
32
+ options[:font_family] = font_family
33
+ end
34
+ end
35
+
36
+ parser.parse!
37
+
38
+ if (2..3) === ARGV.length
39
+ source, caption, destination = (ARGV.length == 3 ? ARGV : [nil, *ARGV])
40
+ end
24
41
 
25
- unless ARGV.length == 3
26
- puts Choice.help
42
+ unless caption && destination
43
+ puts parser.to_s
27
44
  exit(1)
28
45
  end
29
46
 
30
- Profound::Image.new(source, caption, options, destination).convert
47
+ Profound::Image.new(source, caption, options, destination).convert
@@ -1,6 +1,14 @@
1
+ require 'rmagick'
2
+ require 'google-search'
3
+ require 'net/http'
4
+ require 'uri'
5
+ require 'tempfile'
6
+
1
7
  require 'profound/version'
2
8
  require 'profound/filters/toy_camera'
3
- require 'rmagick'
9
+
10
+ # convert original.jpg -size 460x -background transparent -fill black -pointsize 40 caption:'This is a multiline caption, This is a multiline caption, This is a multiline caption.' -gravity center -composite result.jpg
11
+
4
12
 
5
13
  module Profound
6
14
  class Theme
@@ -17,16 +25,64 @@ module Profound
17
25
  end
18
26
  end
19
27
 
28
+ class Input
29
+ class EmptyQueryResult < RuntimeError; end
30
+
31
+ Keywords = [
32
+ 'forest', 'jungle', 'prairie', 'fields', 'flowers' 'beach', 'city', 'skyline',
33
+ 'trail', 'lake', 'sky', 'sunrise', 'dawn', 'dusk', 'scenery', 'island', 'kitten', 'horse', 'puppy'
34
+ ]
35
+
36
+ Qualifiers = [
37
+ 'beautiful', 'gorgeous', 'magnificient', 'superb', nil
38
+ ]
39
+
40
+ def initialize(source, options = {})
41
+ @source = source || [Qualifiers.sample, Keywords.sample].join(" ")
42
+ @options = options
43
+ end
44
+
45
+ def path
46
+ File.exists?(@source) ? @source : download
47
+ end
48
+
49
+ def download
50
+ image = search
51
+
52
+ response = Net::HTTP.get_response(URI.parse(image.uri))
53
+
54
+ tmp = Tempfile.new("profound")
55
+ tmp.write(response.body)
56
+ tmp.rewind
57
+ tmp.path
58
+ end
59
+
60
+ def search
61
+ query = [@source, [@options[:width], @options[:height]].compact.join("x")].join(" ")
62
+ image = Google::Search::Image.new(:query => query, :image_size => :huge, :file_type => :jpg).select{ |img|
63
+ (@options[:width].nil? || @options[:width].to_s == img.width.to_s) &&
64
+ (@options[:height].nil? || @options[:height].to_s == img.height.to_s)
65
+ }.sample
66
+
67
+ raise EmptyQueryResult, "Could not find images matching #{query}" unless image
68
+
69
+ image
70
+ end
71
+ end
72
+
20
73
  class Image
21
74
  include Profound::Filters::ToyCamera
22
75
 
23
76
  def initialize(source, caption, options, destination)
77
+ source = Input.new(source, options).path
78
+
24
79
  @source = Magick::ImageList.new(source).first
25
80
  @target = Magick::ImageList.new
26
81
  @destination = destination
27
82
  @caption = caption
28
83
  @options = options
29
84
  @theme = Theme.new(options[:theme])
85
+ @font_family = options[:font_family] || 'Helvetica'
30
86
  end
31
87
 
32
88
  def convert
@@ -64,9 +120,11 @@ module Profound
64
120
  text = Magick::Draw.new
65
121
 
66
122
  color = @theme.color
123
+ font_family = @font_family
124
+
67
125
  text.annotate(image, 0, 0, 0, 0, @caption) {
68
126
  self.fill = color
69
- self.font_family = 'Arial'
127
+ self.font_family = font_family
70
128
  self.pointsize = 80
71
129
  self.stroke_width = stroke_width
72
130
  self.stroke = color
@@ -74,6 +132,9 @@ module Profound
74
132
  }
75
133
 
76
134
  image
135
+ rescue Magick::ImageMagickError => e
136
+ puts "An error has occured. Try installing ghostscript"
137
+ exit!
77
138
  end
78
139
  end
79
140
  end
@@ -1,3 +1,3 @@
1
1
  module Profound
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_dependency "rmagick", "~> 2.13"
22
+ spec.add_dependency "google-search"
22
23
 
23
24
  spec.add_development_dependency "bundler", "~> 1.3"
24
25
  spec.add_development_dependency "rake"
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: profound
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Guillaume Malette
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-08-14 00:00:00.000000000 Z
11
+ date: 2014-01-09 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rmagick
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,15 +20,27 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: google-search
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: bundler
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
45
  - - ~>
36
46
  - !ruby/object:Gem::Version
@@ -38,7 +48,6 @@ dependencies:
38
48
  type: :development
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
52
  - - ~>
44
53
  - !ruby/object:Gem::Version
@@ -46,23 +55,20 @@ dependencies:
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rake
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - '>='
52
60
  - !ruby/object:Gem::Version
53
61
  version: '0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - '>='
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rspec
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ~>
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ~>
76
81
  - !ruby/object:Gem::Version
@@ -97,26 +102,25 @@ files:
97
102
  homepage: ''
98
103
  licenses:
99
104
  - MIT
105
+ metadata: {}
100
106
  post_install_message:
101
107
  rdoc_options: []
102
108
  require_paths:
103
109
  - lib
104
110
  required_ruby_version: !ruby/object:Gem::Requirement
105
- none: false
106
111
  requirements:
107
- - - ! '>='
112
+ - - '>='
108
113
  - !ruby/object:Gem::Version
109
114
  version: '0'
110
115
  required_rubygems_version: !ruby/object:Gem::Requirement
111
- none: false
112
116
  requirements:
113
- - - ! '>='
117
+ - - '>='
114
118
  - !ruby/object:Gem::Version
115
119
  version: '0'
116
120
  requirements: []
117
121
  rubyforge_project:
118
- rubygems_version: 1.8.23
122
+ rubygems_version: 2.0.14
119
123
  signing_key:
120
- specification_version: 3
124
+ specification_version: 4
121
125
  summary: Creates images like those found on "The Profound Programmer"
122
126
  test_files: []