carrierwave-processing 0.0.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5c9a94a24df430088e2085fe3bedcea17277689e
4
- data.tar.gz: 1c356228b5cb59e6abf9415ec87d1bcd05cad95d
3
+ metadata.gz: 692153452bc341564f11b2a70cdbc033c160fdd7
4
+ data.tar.gz: 9e60ff3332b29d57d6300750602bbcc5c94bba41
5
5
  SHA512:
6
- metadata.gz: 5ed8e1b6e403b9b4587df8404294144864e901ccf17768a2160395d8703e6bbf8d59db5bc55e18ce5243a7bf597cb7ad5f39a73b6bcb29544ea853b86bbb7893
7
- data.tar.gz: d52906ce12f210314eccaed7ee3302e14371ee9c6cc8a5c2dfef6d3ca52366e4925cebe46b7331a5e6a3ba274bdd1267947387383e6d01649fc04f80561b82c5
6
+ metadata.gz: 8956fa5709c9c8aab3bed8c7dfc7e269b8ce4f253ff6b22bdb25aacf6af5ab48d2813d2e5eabdb52f91b975b95cc83e748f844d9c655fb683eab38972e63f964
7
+ data.tar.gz: 1d89786ba670ff71e99facdd6178a4139c939e6e3b445fb0a277ee28f00aa4ac89f1949c4ab9da9558b4da1c74994a96c48e0b75801350a4a2ab5a986e799daa
data/.gitignore CHANGED
@@ -4,6 +4,8 @@
4
4
  .config
5
5
  .yardoc
6
6
  .rvmrc
7
+ .ruby-version
8
+ .ruby-gemset
7
9
  Gemfile.lock
8
10
  InstalledFiles
9
11
  _yardoc
@@ -16,3 +18,5 @@ spec/reports
16
18
  test/tmp
17
19
  test/version_tmp
18
20
  tmp
21
+ spec/uploads
22
+ uploads
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.0
6
+ - jruby-19mode
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # CarrierWave::Processing
2
2
 
3
+ [![Travis CI](https://secure.travis-ci.org/fxposter/carrierwave-processing.png)](http://travis-ci.org/fxposter/carrierwave-processing)
4
+
3
5
  Additional processing support for MiniMagick and RMagick. These are processors that I've been using in multiple projects so I decided to extract those as a gem.
4
6
 
5
7
  ## Installation
@@ -30,6 +32,7 @@ To use those, you should include specified module (RMagick or MiniMagick) into y
30
32
  process :quality => 90 # Set JPEG/MIFF/PNG compression level (0-100)
31
33
  process :convert => 'png'
32
34
  process :colorspace => :rgb # Set colorspace to rgb or cmyk
35
+ process :blur => [0, 8] #reduce image noise and reduce detail levels [radius,sigma]
33
36
 
34
37
  def filename
35
38
  super.chomp(File.extname(super)) + '.png'
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  #!/usr/bin/env rake
2
- require "bundler/gem_tasks"
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec) do |spec|
6
+ end
7
+
8
+ task :default => :spec
@@ -16,4 +16,8 @@ Gem::Specification.new do |gem|
16
16
  gem.version = CarrierWave::Processing::VERSION
17
17
 
18
18
  gem.add_dependency 'carrierwave'
19
+ gem.add_development_dependency 'rake'
20
+ gem.add_development_dependency 'rspec', '~> 3.0.0.beta1'
21
+ gem.add_development_dependency 'mini_magick'
22
+ gem.add_development_dependency 'rmagick' if RUBY_PLATFORM != 'java'
19
23
  end
@@ -2,6 +2,9 @@ module CarrierWave
2
2
  module Processing
3
3
  module MiniMagick
4
4
  # Strips out all embedded information from the image
5
+ #
6
+ # process :strip
7
+ #
5
8
  def strip
6
9
  manipulate! do |img|
7
10
  img.strip
@@ -11,6 +14,9 @@ module CarrierWave
11
14
  end
12
15
 
13
16
  # Reduces the quality of the image to the percentage given
17
+ #
18
+ # process :quality => 90
19
+ #
14
20
  def quality(percentage)
15
21
  manipulate! do |img|
16
22
  img.quality(percentage.to_s)
@@ -20,23 +26,37 @@ module CarrierWave
20
26
  end
21
27
 
22
28
  # Sets the colorspace of the image to the specified value.
23
- #
24
- # process :rgb # force rgb
25
- # process :cmyk # force cmyk
26
- #
29
+ #
30
+ # process :colorspace => :rgb # force rgb
31
+ # process :colorspace => :cmyk # force cmyk
32
+ #
27
33
  def colorspace(cs)
28
34
  manipulate! do |img|
29
- case cs.to_sym
30
- when :rgb
31
- img.colorspace = "RGBColorspace"
32
- when :cmyk
33
- img.colorspace = "CMYKColorspace"
35
+ img.combine_options do |c|
36
+ case cs.to_sym
37
+ when :rgb
38
+ c.colorspace "sRGB"
39
+ when :cmyk
40
+ c.colorspace "CMYK"
41
+ end
34
42
  end
35
43
  img = yield(img) if block_given?
36
44
  img
37
45
  end
38
46
  end
39
47
 
48
+ # reduce image noise and reduce detail levels
49
+ #
50
+ # process :blur => [0, 8]
51
+ #
52
+ def blur(radius, sigma)
53
+ manipulate! do |img|
54
+ img.blur "#{radius}x#{sigma}"
55
+ img = yield(img) if block_given?
56
+ img
57
+ end
58
+ end
59
+
40
60
  end
41
61
  end
42
62
  end
@@ -2,6 +2,9 @@ module CarrierWave
2
2
  module Processing
3
3
  module RMagick
4
4
  # Strips out all embedded information from the image
5
+ #
6
+ # process :strip
7
+ #
5
8
  def strip
6
9
  manipulate! do |img|
7
10
  img.strip!
@@ -11,6 +14,9 @@ module CarrierWave
11
14
  end
12
15
 
13
16
  # Reduces the quality of the image to the percentage given
17
+ #
18
+ # process :quality => 90
19
+ #
14
20
  def quality(percentage)
15
21
  manipulate! do |img|
16
22
  img.write(current_path){ self.quality = percentage }
@@ -20,10 +26,10 @@ module CarrierWave
20
26
  end
21
27
 
22
28
  # Sets the colorspace of the image to the specified value.
23
- #
24
- # process :rgb # force rgb
25
- # process :cmyk # force cmyk
26
- #
29
+ #
30
+ # process :colorspace => :rgb # force rgb
31
+ # process :colorspace => :cmyk # force cmyk
32
+ #
27
33
  def colorspace(cs)
28
34
  manipulate! do |img|
29
35
  case cs.to_sym
@@ -37,6 +43,19 @@ module CarrierWave
37
43
  end
38
44
  end
39
45
 
46
+
47
+ # reduce image noise and reduce detail levels
48
+ #
49
+ # process :blur => [0, 8]
50
+ #
51
+ def blur(radius, sigma)
52
+ manipulate! do |img|
53
+ img = img.blur_image(radius, sigma)
54
+ img = yield(img) if block_given?
55
+ img
56
+ end
57
+ end
58
+
40
59
  end
41
60
  end
42
61
  end
@@ -1,5 +1,5 @@
1
1
  module CarrierWave
2
2
  module Processing
3
- VERSION = '0.0.2'
3
+ VERSION = '1.0.0'
4
4
  end
5
5
  end
Binary file
Binary file
@@ -0,0 +1,106 @@
1
+ require 'carrierwave'
2
+ require 'carrierwave-processing'
3
+
4
+ require 'spec_helper'
5
+
6
+ working_module_names = (RUBY_PLATFORM == 'java' ? %w[MiniMagick] : %w[RMagick MiniMagick])
7
+
8
+ working_module_names.each do |module_name|
9
+ describe CarrierWave::Processing.const_get(module_name) do
10
+ before do
11
+ FileUtils.rm_rf(fixture_path('uploads'))
12
+ end
13
+
14
+ it 'strips image metadata' do
15
+ uploader = uploader_for(module_name) {
16
+ process :strip
17
+ }
18
+
19
+ expect(exif(fixture_path('little_foxes.jpg'), 'Artist')).not_to be_empty
20
+
21
+ open_fixture 'little_foxes.jpg' do |file|
22
+ uploader.store!(file)
23
+ end
24
+
25
+ expect(exif(uploader.store_path, 'Artist')).to be_empty
26
+ end
27
+
28
+ it 'reduces image quality' do
29
+ uploader = uploader_for(module_name) {
30
+ process :quality => 50
31
+ }
32
+
33
+ open_fixture 'little_foxes.jpg' do |file|
34
+ uploader.store!(file)
35
+ end
36
+
37
+ expect(File.size(uploader.store_path)).to be < File.size(fixture_path('little_foxes.jpg'))
38
+ end
39
+
40
+ it 'changes image colorspace to CMYK' do
41
+ uploader = uploader_for(module_name) {
42
+ process :colorspace => :cmyk
43
+ }
44
+
45
+ expect(colorspace(fixture_path('little_foxes.jpg'))).to include('RGB')
46
+
47
+ open_fixture 'little_foxes.jpg' do |file|
48
+ uploader.store!(file)
49
+ end
50
+
51
+ expect(colorspace(uploader.store_path)).to eq('CMYK')
52
+ end
53
+
54
+ it 'changes image colorspace to sRGB' do
55
+ uploader = uploader_for(module_name) {
56
+ process :colorspace => :rgb
57
+ }
58
+
59
+ expect(colorspace(fixture_path('little_foxes_cmyk.jpg'))).to eq('CMYK')
60
+
61
+ open_fixture 'little_foxes_cmyk.jpg' do |file|
62
+ uploader.store!(file)
63
+ end
64
+
65
+ expect(colorspace(uploader.store_path)).to include('RGB')
66
+ end
67
+
68
+ it 'blurs image' do
69
+ uploader = uploader_for(module_name) {
70
+ process :blur => [5, 5]
71
+ }
72
+
73
+ open_fixture 'little_foxes.jpg' do |file|
74
+ uploader.store!(file)
75
+ end
76
+
77
+ expect(File.size(uploader.store_path)).to be < File.size(fixture_path('little_foxes.jpg'))
78
+ end
79
+ end
80
+ end
81
+
82
+ describe CarrierWave::Processing do
83
+ before do
84
+ FileUtils.rm_rf(fixture_path('uploads'))
85
+ end
86
+
87
+ it 'produces the same transformations for all modules' do
88
+ uploaders = working_module_names.map { |module_name|
89
+ uploader_for(module_name) {
90
+ process :strip
91
+ process :quality => 90
92
+ process :blur => [0, 2]
93
+ process :colorspace => :cmyk
94
+ }
95
+ }
96
+
97
+ uploaders.each do |uploader|
98
+ open_fixture 'little_foxes.jpg' do |file|
99
+ uploader.store!(file)
100
+ end
101
+ end
102
+
103
+ files = uploaders.map { |uploader| File.open(uploader.store_path, 'rb', &:read) }
104
+ expect(files).to be_all { |file| file == files[0] }
105
+ end
106
+ end
@@ -0,0 +1,41 @@
1
+ require 'fileutils'
2
+
3
+ module Helpers
4
+ def fixture_path(filename)
5
+ File.expand_path(File.join('..', 'fixtures', filename), __FILE__)
6
+ end
7
+
8
+ def open_fixture(filename, &block)
9
+ File.open(fixture_path(filename), &block)
10
+ end
11
+
12
+ def exif(path, field)
13
+ `identify -format %[exif:#{field}] #{path}`.chomp
14
+ end
15
+
16
+ def colorspace(path)
17
+ `identify -verbose #{path} | grep 'Colorspace'`.chomp.split(':').last.strip
18
+ end
19
+
20
+ def uploader_for(module_name, &block)
21
+ Class.new(CarrierWave::Uploader::Base) {
22
+ include Helpers
23
+ include CarrierWave.const_get(module_name)
24
+ include CarrierWave::Processing.const_get(module_name)
25
+
26
+ instance_eval(&block)
27
+
28
+ define_method :store_dir do
29
+ File.expand_path(File.join('..', 'uploads'), __FILE__)
30
+ end
31
+
32
+ define_method :filename do
33
+ "#{module_name}#{File.extname(super())}" if original_filename.present?
34
+ end
35
+ }.new
36
+ end
37
+ end
38
+
39
+ RSpec.configure do |config|
40
+ config.include Helpers
41
+ end
metadata CHANGED
@@ -1,27 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-processing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Forkert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-14 00:00:00.000000000 Z
11
+ date: 2014-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0.beta1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0.beta1
55
+ - !ruby/object:Gem::Dependency
56
+ name: mini_magick
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rmagick
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
25
81
  - !ruby/object:Gem::Version
26
82
  version: '0'
27
83
  description: Additional processing support for MiniMagick and RMagick
@@ -31,7 +87,9 @@ executables: []
31
87
  extensions: []
32
88
  extra_rdoc_files: []
33
89
  files:
34
- - .gitignore
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".travis.yml"
35
93
  - Gemfile
36
94
  - LICENSE
37
95
  - README.md
@@ -41,6 +99,10 @@ files:
41
99
  - lib/carrierwave-processing/mini_magick.rb
42
100
  - lib/carrierwave-processing/rmagick.rb
43
101
  - lib/carrierwave-processing/version.rb
102
+ - spec/fixtures/little_foxes.jpg
103
+ - spec/fixtures/little_foxes_cmyk.jpg
104
+ - spec/integration/carrierwave_processing_spec.rb
105
+ - spec/spec_helper.rb
44
106
  homepage: https://github.com/fxposter/carrierwave-processing
45
107
  licenses: []
46
108
  metadata: {}
@@ -50,18 +112,23 @@ require_paths:
50
112
  - lib
51
113
  required_ruby_version: !ruby/object:Gem::Requirement
52
114
  requirements:
53
- - - '>='
115
+ - - ">="
54
116
  - !ruby/object:Gem::Version
55
117
  version: '0'
56
118
  required_rubygems_version: !ruby/object:Gem::Requirement
57
119
  requirements:
58
- - - '>='
120
+ - - ">="
59
121
  - !ruby/object:Gem::Version
60
122
  version: '0'
61
123
  requirements: []
62
124
  rubyforge_project:
63
- rubygems_version: 2.0.3
125
+ rubygems_version: 2.2.1
64
126
  signing_key:
65
127
  specification_version: 4
66
128
  summary: Additional processing support for MiniMagick and RMagick
67
- test_files: []
129
+ test_files:
130
+ - spec/fixtures/little_foxes.jpg
131
+ - spec/fixtures/little_foxes_cmyk.jpg
132
+ - spec/integration/carrierwave_processing_spec.rb
133
+ - spec/spec_helper.rb
134
+ has_rdoc: