pura-image 0.2.3 → 0.3.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.
- checksums.yaml +4 -4
- data/README.md +27 -3
- data/lib/image_processing/pura.rb +4 -4
- data/lib/pura/image/processor.rb +2 -2
- data/lib/pura/image/version.rb +1 -1
- data/lib/pura-image.rb +1 -1
- data/pura-image.gemspec +2 -1
- metadata +18 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 200a23ef9a4ba80b7499eee4b910eaf6e34c40bf8ad3eec6cdf98b579388ccd9
|
|
4
|
+
data.tar.gz: 277147726deb52d9db3b63fa91968c71af2b4eaf672ba8fe8c582e9f8ddeea5e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e638cbec0e311ea2b6443319c264f45b1453481dac6f86a4f7ca47dd726c1f60527c58edd627801505a5c243702e058d21023c79f05dafaa1ed8e3b7b3c8e814
|
|
7
|
+
data.tar.gz: d3fb43c72fd71a8ebf8947759ecd672ef9789b63c563dc81ddd63da17f44b2685f1edfadf655e75e7e9b68d5af146c5f56975676024873f56083216eca6b4cda
|
data/README.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
Pure Ruby image processing library with **zero C extension dependencies**. Bundles all **pura-*** format gems and provides an `ImageProcessing` adapter for Rails Active Storage.
|
|
4
4
|
|
|
5
|
+
## Why this exists (in 30 seconds)
|
|
6
|
+
|
|
7
|
+
Stop installing system libraries just to resize an image in Rails.
|
|
8
|
+
|
|
9
|
+
```diff
|
|
10
|
+
# Gemfile
|
|
11
|
+
+ gem "pura-image"
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
```ruby
|
|
15
|
+
# config/application.rb
|
|
16
|
+
config.active_storage.variant_processor = :pura
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```diff
|
|
20
|
+
# Dockerfile
|
|
21
|
+
- RUN apt-get install -y libvips-dev imagemagick
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
That's it. No `brew install vips`. No `apt install imagemagick`. No C compiler. Works on macOS, Linux, Windows, Docker, CI, ruby.wasm — anywhere Ruby runs.
|
|
25
|
+
|
|
26
|
+
- ✅ **Drop-in** for `ImageProcessing::Vips` / `ImageProcessing::MiniMagick`
|
|
27
|
+
- ✅ **7 formats** — JPEG, PNG, BMP, GIF, TIFF, ICO/CUR, WebP
|
|
28
|
+
- ✅ **Some operations are faster than C** (no process-spawn overhead — see [Benchmark](#benchmark))
|
|
29
|
+
- ✅ **Runs on ruby.wasm, JRuby, TruffleRuby**
|
|
30
|
+
|
|
5
31
|
## Supported Formats
|
|
6
32
|
|
|
7
33
|
| Format | Decode | Encode | Gem |
|
|
@@ -29,7 +55,7 @@ require "pura-image"
|
|
|
29
55
|
|
|
30
56
|
# Load any format (auto-detected from magic bytes)
|
|
31
57
|
image = Pura::Image.load("photo.jpg")
|
|
32
|
-
image = Pura::Image.load("
|
|
58
|
+
image = Pura::Image.load("logo.png")
|
|
33
59
|
image.width #=> 800
|
|
34
60
|
image.height #=> 600
|
|
35
61
|
|
|
@@ -75,7 +101,6 @@ Drop-in replacement for libvips/ImageMagick:
|
|
|
75
101
|
|
|
76
102
|
```ruby
|
|
77
103
|
# Gemfile
|
|
78
|
-
gem "image_processing"
|
|
79
104
|
gem "pura-image"
|
|
80
105
|
|
|
81
106
|
# config/application.rb
|
|
@@ -132,7 +157,6 @@ ImageProcessing::Pura.valid_image?("photo.jpg") #=> true
|
|
|
132
157
|
| BMP | **39 ms** | 59 ms | 🚀 **1.5× faster** |
|
|
133
158
|
| GIF | 77 ms | 65 ms | ~1× (comparable) |
|
|
134
159
|
| PNG | 111 ms | 60 ms | 1.9× slower |
|
|
135
|
-
| WebP | 207 ms | 66 ms | 3.1× slower |
|
|
136
160
|
| JPEG | 304 ms | 55 ms | 5.5× slower |
|
|
137
161
|
|
|
138
162
|
### Encode
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require "
|
|
3
|
+
require "pura/processing"
|
|
4
4
|
|
|
5
5
|
require_relative "../pura-image"
|
|
6
6
|
|
|
7
7
|
module ImageProcessing
|
|
8
8
|
module Pura
|
|
9
|
-
extend Chainable
|
|
9
|
+
extend ::Pura::Processing::Chainable
|
|
10
10
|
|
|
11
11
|
def self.valid_image?(file)
|
|
12
12
|
path = file.respond_to?(:path) ? file.path : file.to_s
|
|
@@ -20,7 +20,7 @@ module ImageProcessing
|
|
|
20
20
|
false
|
|
21
21
|
end
|
|
22
22
|
|
|
23
|
-
class Processor <
|
|
23
|
+
class Processor < ::Pura::Processing::Processor
|
|
24
24
|
accumulator :image, ::Pura::Image::Wrapper
|
|
25
25
|
|
|
26
26
|
def self.supports_resize_on_load?
|
|
@@ -35,7 +35,7 @@ module ImageProcessing
|
|
|
35
35
|
elsif path_or_image.respond_to?(:path)
|
|
36
36
|
::Pura::Image::Processor.load(path_or_image.path)
|
|
37
37
|
else
|
|
38
|
-
raise
|
|
38
|
+
raise ::Pura::Processing::Error, "unsupported source: #{path_or_image.inspect}"
|
|
39
39
|
end
|
|
40
40
|
end
|
|
41
41
|
|
data/lib/pura/image/processor.rb
CHANGED
|
@@ -86,7 +86,7 @@ module Pura
|
|
|
86
86
|
when :tiff then Pura::Tiff.decode(path)
|
|
87
87
|
when :ico then Pura::Ico.decode(path)
|
|
88
88
|
when :webp
|
|
89
|
-
raise ArgumentError, "WebP support
|
|
89
|
+
raise ArgumentError, "WebP support requires the pura-webp gem" unless defined?(Pura::Webp)
|
|
90
90
|
|
|
91
91
|
Pura::Webp.decode(path)
|
|
92
92
|
else
|
|
@@ -114,7 +114,7 @@ module Pura
|
|
|
114
114
|
ico_img = Pura::Ico::Image.new(image.width, image.height, image.pixels)
|
|
115
115
|
Pura::Ico.encode(ico_img, path)
|
|
116
116
|
when :webp
|
|
117
|
-
raise ArgumentError, "WebP
|
|
117
|
+
raise ArgumentError, "WebP support requires the pura-webp gem" unless defined?(Pura::Webp)
|
|
118
118
|
|
|
119
119
|
webp_img = Pura::Webp::Image.new(image.width, image.height, image.pixels)
|
|
120
120
|
Pura::Webp.encode(webp_img, path, **options)
|
data/lib/pura/image/version.rb
CHANGED
data/lib/pura-image.rb
CHANGED
data/pura-image.gemspec
CHANGED
|
@@ -26,7 +26,8 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
spec.add_dependency "pura-gif", "~> 0.1"
|
|
27
27
|
spec.add_dependency "pura-tiff", "~> 0.1"
|
|
28
28
|
spec.add_dependency "pura-ico", "~> 0.1"
|
|
29
|
-
spec.add_dependency "
|
|
29
|
+
spec.add_dependency "pura-webp", "~> 0.2"
|
|
30
|
+
spec.add_dependency "pura-processing", "~> 0.1"
|
|
30
31
|
spec.add_development_dependency "minitest", "~> 5.0"
|
|
31
32
|
spec.add_development_dependency "rake", "~> 13.0"
|
|
32
33
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pura-image
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- komagata
|
|
@@ -94,19 +94,33 @@ dependencies:
|
|
|
94
94
|
- !ruby/object:Gem::Version
|
|
95
95
|
version: '0.1'
|
|
96
96
|
- !ruby/object:Gem::Dependency
|
|
97
|
-
name:
|
|
97
|
+
name: pura-webp
|
|
98
98
|
requirement: !ruby/object:Gem::Requirement
|
|
99
99
|
requirements:
|
|
100
100
|
- - "~>"
|
|
101
101
|
- !ruby/object:Gem::Version
|
|
102
|
-
version: '
|
|
102
|
+
version: '0.2'
|
|
103
103
|
type: :runtime
|
|
104
104
|
prerelease: false
|
|
105
105
|
version_requirements: !ruby/object:Gem::Requirement
|
|
106
106
|
requirements:
|
|
107
107
|
- - "~>"
|
|
108
108
|
- !ruby/object:Gem::Version
|
|
109
|
-
version: '
|
|
109
|
+
version: '0.2'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: pura-processing
|
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
|
113
|
+
requirements:
|
|
114
|
+
- - "~>"
|
|
115
|
+
- !ruby/object:Gem::Version
|
|
116
|
+
version: '0.1'
|
|
117
|
+
type: :runtime
|
|
118
|
+
prerelease: false
|
|
119
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
120
|
+
requirements:
|
|
121
|
+
- - "~>"
|
|
122
|
+
- !ruby/object:Gem::Version
|
|
123
|
+
version: '0.1'
|
|
110
124
|
- !ruby/object:Gem::Dependency
|
|
111
125
|
name: minitest
|
|
112
126
|
requirement: !ruby/object:Gem::Requirement
|