zpng 0.4.4 → 0.4.6
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 +1 -0
- data/Gemfile.lock +75 -30
- data/VERSION +1 -1
- data/lib/zpng/bmp/reader.rb +12 -7
- data/lib/zpng/cli.rb +2 -2
- data/lib/zpng/color.rb +92 -18
- data/lib/zpng/image.rb +182 -14
- data/lib/zpng/jpeg/chunks.rb +164 -0
- data/lib/zpng/jpeg/reader.rb +55 -0
- data/lib/zpng/scan_line.rb +38 -5
- data/lib/zpng.rb +2 -1
- data/spec/bad_samples_spec.rb +12 -0
- data/spec/cli_spec.rb +0 -2
- data/spec/image_spec.rb +99 -24
- data/spec/pixel_access_spec.rb +34 -0
- data/spec/rotate_spec.rb +62 -0
- data/zpng.gemspec +9 -5
- metadata +20 -4
- data/lib/zpng/readable_struct.rb +0 -56
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: zpng
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.6
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrey "Zed" Zaikin
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rainbow
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 3.1.1
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: iostruct
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.7.0
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.7.0
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: rspec
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -98,9 +112,10 @@ files:
|
|
|
98
112
|
- lib/zpng/deep_copyable.rb
|
|
99
113
|
- lib/zpng/hexdump.rb
|
|
100
114
|
- lib/zpng/image.rb
|
|
115
|
+
- lib/zpng/jpeg/chunks.rb
|
|
116
|
+
- lib/zpng/jpeg/reader.rb
|
|
101
117
|
- lib/zpng/metadata.rb
|
|
102
118
|
- lib/zpng/pixels.rb
|
|
103
|
-
- lib/zpng/readable_struct.rb
|
|
104
119
|
- lib/zpng/scan_line.rb
|
|
105
120
|
- lib/zpng/scan_line/mixins.rb
|
|
106
121
|
- lib/zpng/string_ext.rb
|
|
@@ -124,6 +139,7 @@ files:
|
|
|
124
139
|
- spec/modify_spec.rb
|
|
125
140
|
- spec/pixel_access_spec.rb
|
|
126
141
|
- spec/pixels_enumerator_spec.rb
|
|
142
|
+
- spec/rotate_spec.rb
|
|
127
143
|
- spec/running_pixel_spec.rb
|
|
128
144
|
- spec/set_random_pixel_spec.rb
|
|
129
145
|
- spec/spec_helper.rb
|
|
@@ -148,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
148
164
|
- !ruby/object:Gem::Version
|
|
149
165
|
version: '0'
|
|
150
166
|
requirements: []
|
|
151
|
-
rubygems_version: 3.
|
|
167
|
+
rubygems_version: 3.2.33
|
|
152
168
|
signing_key:
|
|
153
169
|
specification_version: 4
|
|
154
170
|
summary: pure ruby PNG file manipulation & validation
|
data/lib/zpng/readable_struct.rb
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
module ZPNG
|
|
2
|
-
module ReadableStruct
|
|
3
|
-
|
|
4
|
-
def self.new fmt, *args
|
|
5
|
-
size = fmt.scan(/([a-z])(\d*)/i).map do |f,len|
|
|
6
|
-
[len.to_i, 1].max *
|
|
7
|
-
case f
|
|
8
|
-
when /[aAC]/ then 1
|
|
9
|
-
when 'v' then 2
|
|
10
|
-
when 'V','l' then 4
|
|
11
|
-
when 'Q' then 8
|
|
12
|
-
else raise "unknown fmt #{f.inspect}"
|
|
13
|
-
end
|
|
14
|
-
end.inject(&:+)
|
|
15
|
-
|
|
16
|
-
Struct.new( *args ).tap do |x|
|
|
17
|
-
x.const_set 'FORMAT', fmt
|
|
18
|
-
x.const_set 'SIZE', size
|
|
19
|
-
x.class_eval do
|
|
20
|
-
include InstanceMethods
|
|
21
|
-
end
|
|
22
|
-
x.extend ClassMethods
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
module ClassMethods
|
|
27
|
-
# src can be IO or String, or anything that responds to :read or :unpack
|
|
28
|
-
def read src, size = nil
|
|
29
|
-
size ||= const_get 'SIZE'
|
|
30
|
-
data =
|
|
31
|
-
if src.respond_to?(:read)
|
|
32
|
-
src.read(size).to_s
|
|
33
|
-
elsif src.respond_to?(:unpack)
|
|
34
|
-
src
|
|
35
|
-
else
|
|
36
|
-
raise "[?] don't know how to read from #{src.inspect}"
|
|
37
|
-
end
|
|
38
|
-
if data.size < size
|
|
39
|
-
$stderr.puts "[!] #{self.to_s} want #{size} bytes, got #{data.size}"
|
|
40
|
-
end
|
|
41
|
-
new(*data.unpack(const_get('FORMAT')))
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
module InstanceMethods
|
|
46
|
-
def pack
|
|
47
|
-
to_a.pack self.class.const_get('FORMAT')
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def empty?
|
|
51
|
-
to_a.all?{ |t| t == 0 || t.nil? || t.to_s.tr("\x00","").empty? }
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end # ReadableStruct
|
|
56
|
-
end # ZPNG
|