piet 0.1.0
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.
- data/Gemfile +4 -0
- data/Gemfile.lock +26 -0
- data/README.md +96 -0
- data/Rakefile +2 -0
- data/lib/piet/carrierwave_extension.rb +10 -0
- data/lib/piet/version.rb +3 -0
- data/lib/piet.rb +36 -0
- data/piet.gemspec +22 -0
- data/spec/integration/piet_spec.rb +1 -0
- data/spec/spec_helper.rb +1 -0
- metadata +79 -0
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
piet (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: http://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ZenTest (4.5.0)
|
10
|
+
diff-lcs (1.1.3)
|
11
|
+
rspec (2.7.0)
|
12
|
+
rspec-core (~> 2.7.0)
|
13
|
+
rspec-expectations (~> 2.7.0)
|
14
|
+
rspec-mocks (~> 2.7.0)
|
15
|
+
rspec-core (2.7.1)
|
16
|
+
rspec-expectations (2.7.0)
|
17
|
+
diff-lcs (~> 1.1.2)
|
18
|
+
rspec-mocks (2.7.0)
|
19
|
+
|
20
|
+
PLATFORMS
|
21
|
+
ruby
|
22
|
+
|
23
|
+
DEPENDENCIES
|
24
|
+
ZenTest
|
25
|
+
piet!
|
26
|
+
rspec
|
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
Piet
|
2
|
+
======
|
3
|
+
|
4
|
+
Description
|
5
|
+
-----------
|
6
|
+
|
7
|
+
Piet is a gem that optimizes an image stored in a file, and it has
|
8
|
+
integration with CarrierWave uploaders.
|
9
|
+
|
10
|
+
This gem is named after the minimal Dutch painter Piet Mondrian.
|
11
|
+
|
12
|
+
[](http://travis-ci.org/albertbellonch/piet)
|
13
|
+
|
14
|
+
Installation
|
15
|
+
------------
|
16
|
+
|
17
|
+
This gem requires two image optimization utilities: **optipng** and
|
18
|
+
**jpegoptim**, available in various platforms such as Unix or Windows.
|
19
|
+
You can install them by following the instructions on each authors'
|
20
|
+
page:
|
21
|
+
|
22
|
+
* Installation for [optipng](http://optipng.sourceforge.net/)
|
23
|
+
* Installation for [jpegoptim](http://freecode.com/projects/jpegoptim)
|
24
|
+
|
25
|
+
After installing both utils, simply install the gem:
|
26
|
+
|
27
|
+
gem install piet
|
28
|
+
|
29
|
+
Usage
|
30
|
+
-----
|
31
|
+
|
32
|
+
You simply require the gem
|
33
|
+
|
34
|
+
require 'piet'
|
35
|
+
|
36
|
+
and then call the **optimize** method:
|
37
|
+
|
38
|
+
Piet.optimize(path, opts)
|
39
|
+
|
40
|
+
The options are:
|
41
|
+
|
42
|
+
* **verbose**: Whether you want to get the output of the command or not. It is interpreted as a Boolean value. Default: false.
|
43
|
+
|
44
|
+
|
45
|
+
CarrierWave integration
|
46
|
+
-----------------------
|
47
|
+
|
48
|
+
As stated before, Piet can be integrated into CarrierWave uploaders.
|
49
|
+
This way, you can optimize the original image or a version
|
50
|
+
|
51
|
+
Examples
|
52
|
+
--------
|
53
|
+
|
54
|
+
* Simply Optimizing
|
55
|
+
|
56
|
+
Piet.optimize('/my/wonderful/pics/piggy.png')
|
57
|
+
|
58
|
+
Piet.optimize('/my/wonderful/pics/pony.jpg')
|
59
|
+
|
60
|
+
would optimize those PNG and JPEG files but ouput nothing.
|
61
|
+
|
62
|
+
* Optimizing PNG and getting feedback
|
63
|
+
|
64
|
+
Piet.optimize('/my/wonderful/pics/piggy.png', :verbose => true)
|
65
|
+
|
66
|
+
would optimize that PNG file and ouput something similar to this one:
|
67
|
+
|
68
|
+
** Processing: piggy.png
|
69
|
+
340x340 pixels, 4x8 bits/pixel, RGB+alpha
|
70
|
+
Input IDAT size = 157369 bytes
|
71
|
+
Input file size = 157426 bytes
|
72
|
+
|
73
|
+
Trying:
|
74
|
+
zc = 9 zm = 9 zs = 0 f = 1 IDAT size = 156966
|
75
|
+
zc = 9 zm = 8 zs = 0 f = 1 IDAT size = 156932
|
76
|
+
|
77
|
+
Selecting parameters:
|
78
|
+
zc = 9 zm = 8 zs = 0 f = 1 IDAT size = 156932
|
79
|
+
|
80
|
+
Output IDAT size = 156932 bytes (437 bytes decrease)
|
81
|
+
Output file size = 156989 bytes (437 bytes = 0.28% decrease)
|
82
|
+
|
83
|
+
* Optimizing JPEG and getting feedback
|
84
|
+
|
85
|
+
Piet.optimize('/my/wonderful/pics/pony.jpg', :verbose => true)
|
86
|
+
|
87
|
+
would optimize that JPEG file and ouput similar to this one:
|
88
|
+
|
89
|
+
/my/wonderful/pics/pony.jpg 235x314 24bit JFIF [OK] 15305 --> 13012 bytes (14.98%), optimized.
|
90
|
+
|
91
|
+
TODO
|
92
|
+
----
|
93
|
+
|
94
|
+
* Support for GIFs
|
95
|
+
* Binary tool for optimizing a file
|
96
|
+
* Add some testing!
|
data/Rakefile
ADDED
data/lib/piet/version.rb
ADDED
data/lib/piet.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'piet/carrierwave_extension'
|
2
|
+
|
3
|
+
module Piet
|
4
|
+
class << self
|
5
|
+
VALID_EXTS = %w{ png jpg jpeg }
|
6
|
+
|
7
|
+
def optimize(path, opts={})
|
8
|
+
output = optimize_for(path, opts)
|
9
|
+
puts output if opts[:verbose]
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def optimize_for(path, opts)
|
16
|
+
case extension(path)
|
17
|
+
when "png" then optimize_png(path, opts)
|
18
|
+
when "jpg", "jpeg" then optimize_jpg(path, opts)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def extension(path)
|
23
|
+
path.split(".").last.downcase
|
24
|
+
end
|
25
|
+
|
26
|
+
def optimize_png(path, opts)
|
27
|
+
vo = opts[:verbose] ? "-v" : "-quiet"
|
28
|
+
`optipng -o7 #{vo} #{path}`
|
29
|
+
end
|
30
|
+
|
31
|
+
def optimize_jpg(path, opts)
|
32
|
+
vo = opts[:verbose] ? "-v" : "-q"
|
33
|
+
`jpegoptim -f --strip-all #{vo} #{path}`
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/piet.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "piet/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "piet"
|
7
|
+
s.version = Piet::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Albert Bellonch"]
|
10
|
+
s.email = ["albert@itnig.net"]
|
11
|
+
s.homepage = "http://itnig.net"
|
12
|
+
s.summary = %q{An image optimizer}
|
13
|
+
s.description = %q{-}
|
14
|
+
|
15
|
+
s.rubyforge_project = "piet"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.add_development_dependency "rspec"
|
21
|
+
s.add_development_dependency "ZenTest"
|
22
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'spec_helper'
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'piet'
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: piet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Albert Bellonch
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70360654319140 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70360654319140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: ZenTest
|
27
|
+
requirement: &70360654318340 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70360654318340
|
36
|
+
description: ! '-'
|
37
|
+
email:
|
38
|
+
- albert@itnig.net
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- Gemfile
|
44
|
+
- Gemfile.lock
|
45
|
+
- README.md
|
46
|
+
- Rakefile
|
47
|
+
- lib/piet.rb
|
48
|
+
- lib/piet/carrierwave_extension.rb
|
49
|
+
- lib/piet/version.rb
|
50
|
+
- piet.gemspec
|
51
|
+
- spec/integration/piet_spec.rb
|
52
|
+
- spec/spec_helper.rb
|
53
|
+
homepage: http://itnig.net
|
54
|
+
licenses: []
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ! '>='
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project: piet
|
73
|
+
rubygems_version: 1.8.10
|
74
|
+
signing_key:
|
75
|
+
specification_version: 3
|
76
|
+
summary: An image optimizer
|
77
|
+
test_files:
|
78
|
+
- spec/integration/piet_spec.rb
|
79
|
+
- spec/spec_helper.rb
|