fast_thumbhash 0.6.0 → 0.7.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/Gemfile.lock +1 -1
- data/lib/fast_thumbhash/version.rb +1 -1
- data/lib/fast_thumbhash.rb +49 -20
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ca1251a50f86a6d61d03d4aca11a98b30336a72c12f5d5e8a15992c8d694638
|
4
|
+
data.tar.gz: e77931c369a56aec1f619b4da9ef822623d5e0f4e839aab43e88ebc80ad5b748
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66332f36f6e8d43256725abeb3c6a0e1f59a0cf8601516a3d5d8f6c0820259e7a7c2fa00afa5ece7b7eb834d78fd156407726d135d61e31d16b06a1e33547d52
|
7
|
+
data.tar.gz: cb3673f55f78c9a64b00d5ebe442ff44fa966df878f2bcc1f511a0d7a4ca672412510d55c891afeddf53e65c864f678ea87ffcdbd679f1bcc385d63acc8e78e0
|
data/Gemfile.lock
CHANGED
data/lib/fast_thumbhash.rb
CHANGED
@@ -33,29 +33,66 @@ module FastThumbhash
|
|
33
33
|
homogeneous_transform: nil,
|
34
34
|
saturation: 0
|
35
35
|
)
|
36
|
+
%i[solid blur clamp].include?(fill_mode) or
|
37
|
+
raise ArgumentError, "Invalid `fill_mode` option"
|
38
|
+
|
39
|
+
if fill_color
|
40
|
+
fill_color.length == 4 or
|
41
|
+
raise ArgumentError, "You need to pass [r, g, b, a] to the `fill_color` option"
|
42
|
+
end
|
43
|
+
|
44
|
+
raise ArgumentError, "Option `fill_color` is required for :solid fill_mode" if fill_mode == :solid && fill_color.nil?
|
45
|
+
|
46
|
+
if homogeneous_transform
|
47
|
+
(homogeneous_transform.size == 3 && homogeneous_transform.all? { |row| row.size == 3 }) or
|
48
|
+
raise ArgumentError, "`homogeneous_transform` option must be a 3x3 matrix"
|
49
|
+
end
|
50
|
+
|
51
|
+
if size
|
52
|
+
size.length == 2 or
|
53
|
+
raise ArgumentError, "You need to pass [width, height] to the `size` option"
|
54
|
+
|
55
|
+
size.all? { |dimension| dimension < 100 } or
|
56
|
+
raise ArgumentError, "Cannot generate images bigger then 100 pixels"
|
57
|
+
end
|
58
|
+
|
59
|
+
if max_size
|
60
|
+
max_size <= 100 or
|
61
|
+
raise ArgumentError, "Cannot generate images bigger then 100 pixels"
|
62
|
+
end
|
63
|
+
|
36
64
|
!max_size.nil? ^ !size.nil? or
|
37
65
|
raise ArgumentError, "Pass either the `max_size` option, or an explicit `size`"
|
38
66
|
|
39
|
-
|
40
|
-
|
67
|
+
binary_thumbhash_to_rgba!(
|
68
|
+
binary_thumbhash,
|
69
|
+
max_size: max_size,
|
70
|
+
size: size,
|
71
|
+
fill_mode: fill_mode,
|
72
|
+
fill_color: fill_color,
|
73
|
+
homogeneous_transform: homogeneous_transform,
|
74
|
+
saturation: saturation
|
75
|
+
)
|
76
|
+
end
|
41
77
|
|
78
|
+
def self.binary_thumbhash_to_rgba!(
|
79
|
+
binary_thumbhash,
|
80
|
+
max_size: nil,
|
81
|
+
size: nil,
|
82
|
+
fill_mode: :solid,
|
83
|
+
fill_color: [255, 255, 255, 0],
|
84
|
+
homogeneous_transform: nil,
|
85
|
+
saturation: 0
|
86
|
+
)
|
42
87
|
fill_color_pointer =
|
43
88
|
if fill_color
|
44
|
-
fill_color.length == 4 or
|
45
|
-
raise ArgumentError, "You need to pass [r, g, b, a] to the `fill_color` option"
|
46
|
-
|
47
89
|
FFI::MemoryPointer.new(:uint8, 4).tap do |p|
|
48
90
|
p.write_array_of_uint8(fill_color)
|
49
91
|
end
|
50
92
|
end
|
51
93
|
|
52
|
-
raise ArgumentError, "Option `fill_color` is required for :solid fill_mode" if fill_mode == :solid && fill_color.nil?
|
53
|
-
|
54
94
|
transform_pointer =
|
55
95
|
if homogeneous_transform
|
56
|
-
(homogeneous_transform.size == 3 && homogeneous_transform.all? { |row| row.size == 3 }) or
|
57
|
-
raise ArgumentError, "`homogeneous_transform` option must be a 3x3 matrix"
|
58
|
-
|
59
96
|
FFI::MemoryPointer.new(:double, 6).tap do |p|
|
60
97
|
p.write_array_of_double(
|
61
98
|
[
|
@@ -75,17 +112,8 @@ module FastThumbhash
|
|
75
112
|
|
76
113
|
width, height =
|
77
114
|
if size
|
78
|
-
size.length == 2 or
|
79
|
-
raise ArgumentError, "You need to pass [width, height] to the `size` option"
|
80
|
-
|
81
|
-
size.all? { |dimension| dimension < 100 } or
|
82
|
-
raise ArgumentError, "Cannot generate images bigger then 100 pixels"
|
83
|
-
|
84
115
|
size
|
85
116
|
else
|
86
|
-
max_size <= 100 or
|
87
|
-
raise ArgumentError, "Cannot generate images bigger then 100 pixels"
|
88
|
-
|
89
117
|
thumb_size_pointer = FFI::MemoryPointer.new(:uint8, 2)
|
90
118
|
Library.thumb_size(thumbhash_pointer, max_size, thumb_size_pointer)
|
91
119
|
thumb_size_pointer.read_array_of_uint8(2)
|
@@ -93,6 +121,7 @@ module FastThumbhash
|
|
93
121
|
|
94
122
|
rgba_size = width * height * 4
|
95
123
|
rgba_pointer = FFI::MemoryPointer.new(:uint8, rgba_size)
|
124
|
+
|
96
125
|
Library.thumbhash_to_rgba(
|
97
126
|
thumbhash_pointer,
|
98
127
|
width,
|
@@ -100,7 +129,7 @@ module FastThumbhash
|
|
100
129
|
fill_mode.to_sym,
|
101
130
|
fill_color_pointer,
|
102
131
|
transform_pointer,
|
103
|
-
saturation,
|
132
|
+
saturation.clamp(-100, 100),
|
104
133
|
rgba_pointer
|
105
134
|
)
|
106
135
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fast_thumbhash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefano Verna
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-04-
|
11
|
+
date: 2023-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|