paperclip-compression 0.1.1 → 0.2.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/lib/paperclip-compression.rb +65 -11
- metadata +12 -7
@@ -1,19 +1,60 @@
|
|
1
|
-
require
|
1
|
+
require 'paperclip'
|
2
2
|
|
3
3
|
module Paperclip
|
4
4
|
# Compresses the JPEG and PNG files
|
5
5
|
class Compression < Processor
|
6
6
|
|
7
|
-
|
7
|
+
JPEGTRAN_DEFAULT_OPTS = '-copy none -optimize -perfect'
|
8
|
+
OPTIPNG_DEFAULT_OPTS = '-o 5'
|
9
|
+
|
10
|
+
attr_accessor :format, :jpegtran_opts, :optipng_opts
|
8
11
|
|
9
12
|
def initialize(file, options = {}, attachment = nil)
|
10
13
|
super
|
11
14
|
@format = options[:format]
|
12
15
|
@current_format = File.extname(@file.path)
|
13
16
|
@basename = File.basename(@file.path, @current_format)
|
17
|
+
|
18
|
+
if @options[:processor_options] && (compression_opts = @options[:processor_options][:compression])
|
19
|
+
|
20
|
+
@jpegtran_opts = if compression_opts.has_key?(:jpeg)
|
21
|
+
if (jpeg_opts = compression_opts[:jpeg])
|
22
|
+
jpeg_opts.kind_of?(String) ? jpeg_opts : JPEGTRAN_DEFAULT_OPTS
|
23
|
+
else
|
24
|
+
false
|
25
|
+
end
|
26
|
+
else
|
27
|
+
JPEGTRAN_DEFAULT_OPTS
|
28
|
+
end
|
29
|
+
|
30
|
+
@optipng_opts = if compression_opts.has_key?(:png)
|
31
|
+
if (png_opts = compression_opts[:png])
|
32
|
+
png_opts.kind_of?(String) ? png_opts : OPTIPNG_DEFAULT_OPTS
|
33
|
+
else
|
34
|
+
false
|
35
|
+
end
|
36
|
+
else
|
37
|
+
OPTIPNG_DEFAULT_OPTS
|
38
|
+
end
|
39
|
+
|
40
|
+
else
|
41
|
+
@jpegtran_opts = JPEGTRAN_DEFAULT_OPTS
|
42
|
+
@optipng_opts = OPTIPNG_DEFAULT_OPTS
|
43
|
+
end
|
14
44
|
end
|
15
45
|
|
16
46
|
def make
|
47
|
+
case @attachment.content_type
|
48
|
+
when 'image/jpeg' then process_jpegtran
|
49
|
+
when 'image/png' then process_optipgn
|
50
|
+
else
|
51
|
+
@file
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def process_jpegtran
|
17
58
|
src = @file
|
18
59
|
dst = Tempfile.new([@basename, @format ? ".#{@format}" : ''])
|
19
60
|
dst.binmode
|
@@ -22,18 +63,31 @@ module Paperclip
|
|
22
63
|
dst_path = File.expand_path(dst.path)
|
23
64
|
|
24
65
|
begin
|
25
|
-
if @
|
26
|
-
Paperclip.run(
|
27
|
-
|
28
|
-
Paperclip.run("optipng", "-o 5 #{src_path}")
|
29
|
-
return src
|
66
|
+
if @jpegtran_opts
|
67
|
+
Paperclip.run('jpegtran', "#{@jpegtran_opts} #{src_path} > #{dst_path}")
|
68
|
+
dst
|
30
69
|
else
|
31
|
-
|
70
|
+
src
|
32
71
|
end
|
33
|
-
rescue
|
34
|
-
#
|
72
|
+
rescue Cocaine::ExitStatusError => e
|
73
|
+
raise Paperclip::Error, "JPEGTRAN : There was an error processing the thumbnail for #{@basename}" if @whiny
|
74
|
+
rescue Cocaine::CommandNotFoundError => e
|
75
|
+
raise Paperclip::Errors::CommandNotFoundError.new("Could not run 'jpegtran'.Please install jpegtran.")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def process_optipgn
|
80
|
+
src = @file
|
81
|
+
src_path = File.expand_path(src.path)
|
82
|
+
|
83
|
+
begin
|
84
|
+
Paperclip.run('optipng', "#{@optipng_opts} #{src_path}") if @optipng_opts
|
85
|
+
src
|
86
|
+
rescue Cocaine::ExitStatusError => e
|
87
|
+
raise Paperclip::Error, "OPTIPNG : There was an error processing the thumbnail for #{@basename}" if @whiny
|
88
|
+
rescue Cocaine::CommandNotFoundError => e
|
89
|
+
raise Paperclip::Errors::CommandNotFoundError.new("Could not run 'optipng'.Please install optipng.")
|
35
90
|
end
|
36
|
-
dst
|
37
91
|
end
|
38
92
|
|
39
93
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paperclip-compression
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,24 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-11-24 00:00:00.
|
12
|
+
date: 2011-11-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: paperclip
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: '
|
21
|
+
version: '3.3'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.3'
|
25
30
|
description: JPEG and PNG compression for Paperclip gem
|
26
31
|
email: emrekutlu@gmail.com
|
27
32
|
executables: []
|
@@ -29,7 +34,7 @@ extensions: []
|
|
29
34
|
extra_rdoc_files: []
|
30
35
|
files:
|
31
36
|
- lib/paperclip-compression.rb
|
32
|
-
homepage: http://github.com/
|
37
|
+
homepage: http://github.com/emrekutlu/paperclip-compression
|
33
38
|
licenses: []
|
34
39
|
post_install_message:
|
35
40
|
rdoc_options: []
|
@@ -51,7 +56,7 @@ requirements:
|
|
51
56
|
- jpegtran for JPEG compression
|
52
57
|
- optipng for PNG compression
|
53
58
|
rubyforge_project:
|
54
|
-
rubygems_version: 1.8.
|
59
|
+
rubygems_version: 1.8.23
|
55
60
|
signing_key:
|
56
61
|
specification_version: 3
|
57
62
|
summary: Image compression for Paperclip
|