piet 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ pkg/*
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- piet (0.1.0)
4
+ piet (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -7,9 +7,7 @@ Description
7
7
  Piet is a gem that optimizes an image stored in a file, and it has
8
8
  integration with CarrierWave uploaders.
9
9
 
10
- This gem is named after the minimal Dutch painter Piet Mondrian.
11
-
12
- [![Build Status](https://secure.travis-ci.org/albertbellonch/piet.png)](http://travis-ci.org/albertbellonch/piet)
10
+ This gem is named after the minimalist Dutch painter [Piet Mondrian](http://en.wikipedia.org/wiki/Piet_Mondrian).
13
11
 
14
12
  Installation
15
13
  ------------
@@ -46,24 +44,59 @@ CarrierWave integration
46
44
  -----------------------
47
45
 
48
46
  As stated before, Piet can be integrated into CarrierWave uploaders.
49
- This way, you can optimize the original image or a version
47
+ This way, you can optimize the original image or a version.
48
+
49
+ In order to do that, firstly add **piet** to your Gemfile:
50
+
51
+ gem 'piet'
52
+
53
+ Then go to your CarrierWave uploader and include Piet's extension:
54
+
55
+ class ImageUploader < CarrierWave::Uploader::Base
56
+ ...
57
+ include Piet::CarrierWaveExtension
58
+ ...
59
+ end
60
+
61
+ And finally use Piet! For all the images:
62
+
63
+ class ImageUploader < CarrierWave::Uploader::Base
64
+ ...
65
+ process :optimize
66
+ ...
67
+ end
68
+
69
+ Or only for a version:
70
+
71
+ class ImageUploader < CarrierWave::Uploader::Base
72
+ ...
73
+ version :normal do
74
+ ...
75
+ process :optimize
76
+ end
77
+ ...
78
+ end
50
79
 
51
80
  Examples
52
81
  --------
53
82
 
54
83
  * Simply Optimizing
55
84
 
85
+ ```
56
86
  Piet.optimize('/my/wonderful/pics/piggy.png')
57
87
 
58
88
  Piet.optimize('/my/wonderful/pics/pony.jpg')
89
+ ```
59
90
 
60
- would optimize those PNG and JPEG files but ouput nothing.
91
+ would optimize those PNG, GIF and JPEG files but ouput nothing.
61
92
 
62
- * Optimizing PNG and getting feedback
93
+ * Optimizing PNG/GIF and getting feedback
63
94
 
95
+ ```
64
96
  Piet.optimize('/my/wonderful/pics/piggy.png', :verbose => true)
97
+ ```
65
98
 
66
- would optimize that PNG file and ouput something similar to this one:
99
+ would optimize that PNG/GIF file and ouput something similar to this one:
67
100
 
68
101
  ** Processing: piggy.png
69
102
  340x340 pixels, 4x8 bits/pixel, RGB+alpha
@@ -82,7 +115,9 @@ would optimize that PNG file and ouput something similar to this one:
82
115
 
83
116
  * Optimizing JPEG and getting feedback
84
117
 
118
+ ```
85
119
  Piet.optimize('/my/wonderful/pics/pony.jpg', :verbose => true)
120
+ ```
86
121
 
87
122
  would optimize that JPEG file and ouput similar to this one:
88
123
 
@@ -91,6 +126,11 @@ would optimize that JPEG file and ouput similar to this one:
91
126
  TODO
92
127
  ----
93
128
 
94
- * Support for GIFs
95
129
  * Binary tool for optimizing a file
96
130
  * Add some testing!
131
+
132
+ Changelog
133
+ ---------
134
+
135
+ * v.0.1.0 Optimization of PNGs and JPEGs, including an integration with Carrierwave
136
+ * v.0.1.1 Added support for GIFs. Added an extra option to use pngquant (thanks @rogercampos). Solved problems with Carrierwave >= 0.6 (thanks @mllocs and @huacnlee).
@@ -2,7 +2,14 @@ module Piet
2
2
  module CarrierWaveExtension
3
3
  def optimize
4
4
  manipulate! do |img|
5
- Piet.optimize(img.path)
5
+ Piet.optimize(current_path)
6
+ img
7
+ end
8
+ end
9
+
10
+ def pngquant
11
+ manipulate! do |img|
12
+ Piet.pngquant(current_path)
6
13
  img
7
14
  end
8
15
  end
data/lib/piet/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Piet
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/piet.rb CHANGED
@@ -2,19 +2,25 @@ require 'piet/carrierwave_extension'
2
2
 
3
3
  module Piet
4
4
  class << self
5
- VALID_EXTS = %w{ png jpg jpeg }
5
+ VALID_EXTS = %w{ png gif jpg jpeg }
6
6
 
7
- def optimize(path, opts={})
7
+ def optimize(path, opts= {} )
8
8
  output = optimize_for(path, opts)
9
9
  puts output if opts[:verbose]
10
10
  true
11
11
  end
12
12
 
13
+ def pngquant(path, opts = {})
14
+ output = pngquant_for(path, opts)
15
+ puts output if opts[:verbose]
16
+ true
17
+ end
18
+
13
19
  private
14
20
 
15
21
  def optimize_for(path, opts)
16
22
  case extension(path)
17
- when "png" then optimize_png(path, opts)
23
+ when "png", "gif" then optimize_png(path, opts)
18
24
  when "jpg", "jpeg" then optimize_jpg(path, opts)
19
25
  end
20
26
  end
@@ -32,5 +38,19 @@ module Piet
32
38
  vo = opts[:verbose] ? "-v" : "-q"
33
39
  `jpegoptim -f --strip-all #{vo} #{path}`
34
40
  end
41
+
42
+ def pngquant_for(path, opts)
43
+ opts.merge!({:force => true})
44
+ vo = if opts.any?
45
+ opts.keys.map{|x| "-#{x}"}.join(" ")
46
+ else
47
+ ""
48
+ end
49
+ out = `pngquant #{vo} 256 #{path}`
50
+ blobs = path.split(".")
51
+ new_path = "#{blobs[0..-2].join(".")}-fs8.#{blobs[-1]}"
52
+ `mv #{new_path} #{path}`
53
+ out
54
+ end
35
55
  end
36
56
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-21 00:00:00.000000000 Z
12
+ date: 2012-10-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70360654319140 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70360654319140
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: ZenTest
27
- requirement: &70360654318340 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,7 +37,12 @@ dependencies:
32
37
  version: '0'
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *70360654318340
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  description: ! '-'
37
47
  email:
38
48
  - albert@itnig.net
@@ -40,6 +50,7 @@ executables: []
40
50
  extensions: []
41
51
  extra_rdoc_files: []
42
52
  files:
53
+ - .gitignore
43
54
  - Gemfile
44
55
  - Gemfile.lock
45
56
  - README.md
@@ -70,7 +81,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
81
  version: '0'
71
82
  requirements: []
72
83
  rubyforge_project: piet
73
- rubygems_version: 1.8.10
84
+ rubygems_version: 1.8.24
74
85
  signing_key:
75
86
  specification_version: 3
76
87
  summary: An image optimizer