pnglitch 0.0.2 → 0.0.3

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
- SHA1:
3
- metadata.gz: 44d05884a52a43971ee2d6e6f0c0dd79450f7435
4
- data.tar.gz: 07e160fdf0a363ac043b94c52e76d9446d7ac66f
2
+ SHA256:
3
+ metadata.gz: 96e25f4174612475f161dbde96789c02ccc9bde007f02b8d0de33e3f35483502
4
+ data.tar.gz: 5831707ac9afb72b717b7abbab0754d6bae72d791801d74a9dd9aa29bd587cda
5
5
  SHA512:
6
- metadata.gz: 73efdd4e1fb833a268a12b35b39359db9225f0c5a1f0c332ae2b35b3559d317210498fd387f5c1f89fe5ad71105bbd77bc77d173faf0db6e974da488720b43f1
7
- data.tar.gz: 4f413a38b0e60ac3362ebeea3b0a0a27860fe985084d4dcff6a67e8f446e49536b979b289a6241f3351c3d424f5e471f140a41240d21429f7210e8a247db6a2f
6
+ metadata.gz: 28bca69993b3461d5e44abc3351dae3396f73804fb13c32a7385cf08567e1afa23d773f669c4e8352054ccb908c8c922104cad30c243dcb395fd2dc2296431f6
7
+ data.tar.gz: 7d901fd5d69a55859b75cfc343b7d220f4c4d1752e4bc61762886d90f247746c5786c6139708ee0ea521698d75f0de3a5fcf7dcadf0bf1c18a374af9ade5efdc
data/.gitignore CHANGED
@@ -18,3 +18,4 @@ test/tmp
18
18
  test/version_tmp
19
19
  tmp
20
20
  Guardfile
21
+ .ruby-version
data/.travis.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 2.2.2
4
+ - 2.6.4
data/Gemfile CHANGED
@@ -2,12 +2,11 @@ source 'https://rubygems.org'
2
2
  gemspec
3
3
 
4
4
  group :test do
5
- gem 'guard'
6
- gem 'guard-rspec'
5
+ # gem 'guard'
6
+ # gem 'guard-rspec'
7
7
  gem 'chunky_png'
8
8
  end
9
9
 
10
10
  group :doc do
11
11
  gem 'yard'
12
12
  end
13
-
data/README.md CHANGED
@@ -9,16 +9,39 @@ With normal data-bending technique, a glitch against PNG will easily fail
9
9
  because of the checksum function. We provide a fail-proof destruction for it.
10
10
  Using this library you will see beautiful and various PNG artifacts.
11
11
 
12
+ For more details about glitching PNG image, see
13
+ [my documentation _The Art of PNG Glitch_](http://ucnv.github.io/pnglitch/).
14
+
12
15
  ## Usage
13
16
 
14
17
  ```ruby
15
- PNGlitch.open('/path/to/your/image.png') do |p|
16
- p.glitch do |data|
17
- data.gsub /\d/, 'x'
18
- end
19
- p.save '/path/to/broken/image.png'
18
+ require 'pnglitch'
19
+
20
+ PNGlitch.open('/path/to/your/image.png') do |p|
21
+ p.glitch do |data|
22
+ data.gsub /\d/, 'x'
20
23
  end
24
+ p.save '/path/to/broken/image.png'
25
+ end
21
26
  ```
27
+
28
+ _The Art of PNG Glitch_ includes [the usage of this library](http://ucnv.github.io/pnglitch/#appendix-a).
29
+
30
+ ### CLI
31
+
32
+ Once you've installed the gem, it can be used in the terminal.
33
+
34
+ ```sh
35
+ Usage:
36
+ pnglitch <infile> [--filter=<n>] <outfile>
37
+
38
+ Options:
39
+ -f, --filter=<n> Fix all filter types as passed value before glitching.
40
+ A number (0..4) or a type name (none|sub|up|average|paeth).
41
+ --version Show version.
42
+ -h, --help Show this screen.
43
+ ```
44
+
22
45
  ## Installation
23
46
 
24
47
  Add this line to your application's Gemfile:
data/lib/pnglitch.rb CHANGED
@@ -192,7 +192,7 @@ require 'pnglitch/base'
192
192
  # But sometimes this scratch could break the compression and make the file unopenable.
193
193
  #
194
194
  module PNGlitch
195
- VERSION = '0.0.2'
195
+ VERSION = '0.0.3'
196
196
 
197
197
  class << self
198
198
 
data/lib/pnglitch/base.rb CHANGED
@@ -20,11 +20,19 @@ module PNGlitch
20
20
  @filtered_data = Tempfile.new 'filtered', encoding: 'ascii-8bit'
21
21
  @idat_chunk_size = nil
22
22
 
23
+ @head_data.binmode
24
+ @tail_data.binmode
25
+ @compressed_data.binmode
26
+ @filtered_data.binmode
27
+
23
28
  open(path, 'rb') do |io|
24
29
  idat_sizes = []
25
30
  @head_data << io.read(8) # signature
26
31
  while bytes = io.read(8)
27
32
  length, type = bytes.unpack 'Na*'
33
+ if length > io.size - io.pos
34
+ raise FormatError.new path.to_s
35
+ end
28
36
  if type == 'IHDR'
29
37
  ihdr = {
30
38
  width: io.read(4).unpack('N').first,
@@ -123,7 +131,7 @@ module PNGlitch
123
131
  # glitching but some viewer applications might deny to process those results.
124
132
  # To be polite to the filter types, use +each_scanline+ instead.
125
133
  #
126
- # Since this method sets the decompressed data into String, it may use a massive amount of
134
+ # Since this method sets the decompressed data into String, it may use a massive amount of
127
135
  # memory. To decrease the memory usage, treat the data as IO through +glitch_as_io+ instead.
128
136
  #
129
137
  def glitch &block # :yield: data
@@ -158,8 +166,8 @@ module PNGlitch
158
166
  # To set a glitched result, return the modified value in the block.
159
167
  #
160
168
  # Once the compressed data is glitched, PNGlitch will warn about modifications to
161
- # filtered (decompressed) data because this method does not decompress the glitched
162
- # compressed data again. It means that calling +glitch+ after +glitch_after_compress+
169
+ # filtered (decompressed) data because this method does not decompress the glitched
170
+ # compressed data again. It means that calling +glitch+ after +glitch_after_compress+
163
171
  # will make the result overwritten and forgotten.
164
172
  #
165
173
  # This operation will often destroy PNG image completely.
@@ -276,7 +284,7 @@ module PNGlitch
276
284
  end
277
285
 
278
286
  #
279
- # Process each scanlines.
287
+ # Process each scanline.
280
288
  #
281
289
  # It takes a block with a parameter. The parameter must be an instance of
282
290
  # PNGlitch::Scanline and it provides ways to edit the filter type and the data
@@ -449,7 +457,7 @@ module PNGlitch
449
457
  #
450
458
  def save file
451
459
  wrap_with_rewind(@head_data, @tail_data, @compressed_data) do
452
- open(file, 'w') do |io|
460
+ open(file, 'wb') do |io|
453
461
  io << @head_data.read
454
462
  chunk_size = @idat_chunk_size || @compressed_data.size
455
463
  type = 'IDAT'
@@ -552,7 +560,7 @@ module PNGlitch
552
560
  message = <<-EOL.gsub(/^\s*/, '')
553
561
  WARNING: `#{trace.first.label}' is called after a modification to the compressed data.
554
562
  With this operation, your changes on the compressed data will be reverted.
555
- Note that a modification to the compressed data does not reflect to the
563
+ Note that a modification to the compressed data does not reflect to the
556
564
  filtered (decompressed) data.
557
565
  It's happened around #{trace.last.to_s}
558
566
  EOL
@@ -400,28 +400,6 @@ describe PNGlitch do
400
400
  ChunkyPNG::Image.from_file outfile
401
401
  }.not_to raise_error
402
402
 
403
- if system('which convert > /dev/null')
404
- out1 = outdir.join('a.png')
405
- out2 = outdir.join('b.png')
406
- fx = 4
407
- png = PNGlitch.open infile
408
- png.each_scanline do |line|
409
- line.change_filter fx
410
- end
411
- png.output out1
412
- png.close
413
- system('convert -quality %d %s %s' % [fx, infile, out2])
414
- png1 = PNGlitch.open out1
415
- png2 = PNGlitch.open out2
416
- d1 = png1.filtered_data.read
417
- d2 = png2.filtered_data.read
418
- f1 = png1.filter_types
419
- f2 = png2.filter_types
420
- png1.close
421
- png2.close
422
- expect(f1).to eq(f2)
423
- expect(d1).to eq(d2)
424
- end
425
403
  end
426
404
 
427
405
  it 'can change filter type with the name' do
@@ -666,22 +644,6 @@ describe PNGlitch do
666
644
  end
667
645
  end
668
646
 
669
- it 'should finalize the instance' do
670
- PNGlitch.open infile do
671
- lines = scanline_at 1..100
672
- end
673
- GC.start
674
- count = ObjectSpace.each_object(PNGlitch::Scanline).count
675
- expect(count).to be < 100
676
-
677
- png = PNGlitch.open infile
678
- lines = png.scanline_at 1..100
679
- png.close
680
- lines = nil
681
- GC.start
682
- count = ObjectSpace.each_object(PNGlitch::Scanline).count
683
- expect(count).to be < 100
684
- end
685
647
  end
686
648
 
687
649
  describe '.change_all_filters' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pnglitch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - ucnv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-20 00:00:00.000000000 Z
11
+ date: 2019-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -105,8 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubyforge_project:
109
- rubygems_version: 2.4.5
108
+ rubygems_version: 3.0.3
110
109
  signing_key:
111
110
  specification_version: 4
112
111
  summary: PNGlitch is a Ruby library to destroy your PNG images. With normal data-bending
@@ -126,4 +125,3 @@ test_files:
126
125
  - spec/pnglitch_filter_spec.rb
127
126
  - spec/pnglitch_spec.rb
128
127
  - spec/spec_helper.rb
129
- has_rdoc: