chunky_png 1.3.11 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/.standard.yml +16 -0
  4. data/.yardopts +1 -1
  5. data/CHANGELOG.rdoc +8 -4
  6. data/CONTRIBUTING.rdoc +17 -8
  7. data/Gemfile +12 -4
  8. data/LICENSE +1 -1
  9. data/README.md +15 -9
  10. data/Rakefile +5 -3
  11. data/benchmarks/decoding_benchmark.rb +17 -17
  12. data/benchmarks/encoding_benchmark.rb +22 -19
  13. data/benchmarks/filesize_benchmark.rb +6 -6
  14. data/bin/rake +29 -0
  15. data/bin/standardrb +29 -0
  16. data/chunky_png.gemspec +19 -15
  17. data/docs/.gitignore +3 -0
  18. data/docs/CNAME +1 -0
  19. data/docs/_config.yml +9 -0
  20. data/docs/_posts/2010-01-14-memory-efficiency-when-using-ruby.md +136 -0
  21. data/docs/_posts/2010-01-17-ode-to-array-pack-and-string-unpack.md +82 -0
  22. data/docs/_posts/2014-11-07-the-value-of-a-pure-ruby-library.md +61 -0
  23. data/docs/index.md +88 -0
  24. data/lib/chunky_png.rb +17 -30
  25. data/lib/chunky_png/canvas.rb +31 -28
  26. data/lib/chunky_png/canvas/adam7_interlacing.rb +16 -10
  27. data/lib/chunky_png/canvas/data_url_exporting.rb +3 -3
  28. data/lib/chunky_png/canvas/data_url_importing.rb +3 -3
  29. data/lib/chunky_png/canvas/drawing.rb +30 -43
  30. data/lib/chunky_png/canvas/masking.rb +14 -14
  31. data/lib/chunky_png/canvas/operations.rb +28 -24
  32. data/lib/chunky_png/canvas/png_decoding.rb +39 -33
  33. data/lib/chunky_png/canvas/png_encoding.rb +111 -103
  34. data/lib/chunky_png/canvas/resampling.rb +27 -32
  35. data/lib/chunky_png/canvas/stream_exporting.rb +8 -8
  36. data/lib/chunky_png/canvas/stream_importing.rb +8 -8
  37. data/lib/chunky_png/chunk.rb +101 -66
  38. data/lib/chunky_png/color.rb +218 -212
  39. data/lib/chunky_png/datastream.rb +22 -28
  40. data/lib/chunky_png/dimension.rb +18 -11
  41. data/lib/chunky_png/image.rb +11 -11
  42. data/lib/chunky_png/palette.rb +13 -14
  43. data/lib/chunky_png/point.rb +27 -26
  44. data/lib/chunky_png/rmagick.rb +10 -10
  45. data/lib/chunky_png/vector.rb +28 -29
  46. data/lib/chunky_png/version.rb +3 -1
  47. data/spec/chunky_png/canvas/adam7_interlacing_spec.rb +20 -21
  48. data/spec/chunky_png/canvas/data_url_exporting_spec.rb +8 -5
  49. data/spec/chunky_png/canvas/data_url_importing_spec.rb +5 -6
  50. data/spec/chunky_png/canvas/drawing_spec.rb +46 -38
  51. data/spec/chunky_png/canvas/masking_spec.rb +15 -16
  52. data/spec/chunky_png/canvas/operations_spec.rb +68 -67
  53. data/spec/chunky_png/canvas/png_decoding_spec.rb +37 -38
  54. data/spec/chunky_png/canvas/png_encoding_spec.rb +59 -50
  55. data/spec/chunky_png/canvas/resampling_spec.rb +19 -21
  56. data/spec/chunky_png/canvas/stream_exporting_spec.rb +47 -27
  57. data/spec/chunky_png/canvas/stream_importing_spec.rb +10 -11
  58. data/spec/chunky_png/canvas_spec.rb +63 -52
  59. data/spec/chunky_png/color_spec.rb +115 -114
  60. data/spec/chunky_png/datastream_spec.rb +49 -51
  61. data/spec/chunky_png/dimension_spec.rb +10 -10
  62. data/spec/chunky_png/image_spec.rb +11 -14
  63. data/spec/chunky_png/point_spec.rb +21 -23
  64. data/spec/chunky_png/rmagick_spec.rb +7 -8
  65. data/spec/chunky_png/vector_spec.rb +21 -17
  66. data/spec/chunky_png_spec.rb +2 -2
  67. data/spec/png_suite_spec.rb +35 -40
  68. data/spec/spec_helper.rb +6 -10
  69. data/tasks/benchmarks.rake +7 -8
  70. metadata +47 -11
  71. data/.travis.yml +0 -18
  72. data/lib/chunky_png/compatibility.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 5b1a5a676ccb350678ea927646fdebcf089e851d
4
- data.tar.gz: cf36f18b367bfd58ce1b7210cdd4f67226509e4f
2
+ SHA256:
3
+ metadata.gz: 83fc1d331bcc0afc882b5ff2df1c0601e42f6551cfaff2b7c7ae9d0b4386b122
4
+ data.tar.gz: 1f80013e9aeb9daa25ed0a968b5d82877483113ebd22442226e0e8ee269a3105
5
5
  SHA512:
6
- metadata.gz: f20401d384c2b2f3c641c32d51eb437ccee200cd557e2837576ae246b1ebee36ac2b488c47e35e9527953bc9288f6fec7e3b76c3a41af51b6e8832b947b2cc9d
7
- data.tar.gz: b0ef89444d5b87dcaeb18354009a598a45c60bc3650363d363c507b82f919a9da4a498f4e82c28d5290c7f36b569278f77e79f43db24059f1b7ed8f8c94d8a7a
6
+ metadata.gz: 1fcb07937d255014cba405bc018c9889b5fd7cd652e25f0768b21ef58a48f604033551f3fa822329387a3dcecb46263906c1043ecb5a7e0007fba22f90dbeb5f
7
+ data.tar.gz: dd57be8a9ce7db0333dad21f03f9ea056feaed4a785f3e0d21b7a1efb3123bacf6fb58f73cbde9d46f2aa2032b39dd5e06e25a4e48aeb9d5dad993ad99f886e9
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: ["master"]
13
+ pull_request:
14
+ branches: ["master"]
15
+
16
+ jobs:
17
+ test:
18
+ runs-on: ubuntu-latest
19
+ strategy:
20
+ matrix:
21
+ ruby: [ '2.5', '2.6', '2.7', 'ruby-head' ]
22
+
23
+ steps:
24
+ - uses: actions/checkout@v2
25
+ - name: Set up Ruby
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ ruby-version: ${{ matrix.ruby }}
29
+ - name: Install dependencies
30
+ run: bundle install
31
+ - name: Run tests
32
+ run: bin/rake
33
+ # Skip the linter for now.
34
+ # - name: Lint Ruby code
35
+ # run: bin/standardrb
@@ -0,0 +1,16 @@
1
+ # ChunkyPNG uses and enforces standard.rb as code style (see https://github.com/testdouble/standard).
2
+ # For backwards compatilibity and idiosyncratic preferences of the main author,
3
+ # there are some minor differences listed in here.
4
+
5
+ ruby_version: 2.2
6
+
7
+ ignore:
8
+ - lib/chunky_png/**/*.rb:
9
+ # We allow `for` loops in the codebase, especially in hot paths,
10
+ # because they perform better than `each` blocks.
11
+ - "Style/For"
12
+
13
+ - spec/chunky_png/**/*.rb:
14
+ # In RSpec, having to follow this rule will cause expectations to
15
+ # be less readable, specifically blocks for the `change` matcher.
16
+ - "Lint/AmbiguousBlockAssociation"
data/.yardopts CHANGED
@@ -1,5 +1,5 @@
1
1
  --title "ChunkyPNG - The pure Ruby PNG library"
2
2
  lib/**/*.rb -
3
- BENCHMARKS.rdoc
3
+ BENCHMARKING.rdoc
4
4
  --no-private
5
5
  --hide-void-return
@@ -7,7 +7,11 @@ The file documents the changes to this library over the different versions.
7
7
 
8
8
  === Unreleased changes
9
9
 
10
- *Noething yet*
10
+ - Implemented <tt>ChunkyPNG::Dimension#hash</tt> to fix some specs after a behavior change in RSpec.
11
+
12
+ === 1.3.11 - 2018-11-21
13
+
14
+ - Updated project metadata as published on Rubygems.org
11
15
 
12
16
  === 1.3.10 - 2018-01-23
13
17
 
@@ -42,7 +46,7 @@ The file documents the changes to this library over the different versions.
42
46
  === 1.3.4 - 2015-02-16
43
47
 
44
48
  - Assert compatibility with Ruby 2.2
45
- - Improved documentation using RDoc, so it is included on http://www.rubydoc.info/gems/chunky_png
49
+ - Improved documentation using RDoc, so it is included on https://www.rubydoc.info/gems/chunky_png
46
50
  - Update chunkypng.com website; migrate some stuff from the wiki.
47
51
 
48
52
  === 1.3.3 - 2014-10-24
@@ -150,7 +154,7 @@ There are some API changes for this release. If you are using <tt>Canvas#compose
150
154
  - Added a list of HTML named colors. Get them by calling <tt>ChunkyPNG::Color(:teal)</tt> or <tt>ChunkyPNG::Color('red @ 0.8')</tt>
151
155
  - Added encoding support for 1-, 2-, and 4-bit grayscale images.
152
156
  - Cleaned up auto-detection of color mode settings. It will now choose 1 bit grayscale mode if an image only contains black and white. (The other low bitrate grayscale modes are never chosen automatically.)
153
- - RDoc improvements. See http://rdoc.info/gems/chunky_png/frames.
157
+ - RDoc improvements. See https://rdoc.info/gems/chunky_png.
154
158
  - ChunkyPNG is now also tested on Ruby 1.8.6.
155
159
 
156
160
  === 0.12.0 - 2010-12-12
@@ -210,7 +214,7 @@ There are some API changes for this release. If you are using <tt>Canvas#compose
210
214
 
211
215
  === 0.7.3 - 2010-04-28
212
216
 
213
- - Based on the suggestion of [Dirkjan Bussink](http://github.com/dbussink), introduced custom exception classes:
217
+ - Based on the suggestion of [Dirkjan Bussink](https://github.com/dbussink), introduced custom exception classes:
214
218
  - <tt>ChunkyPNG::SignatureMismatch</tt> is raised when the PNG signature could not be found. Usually this means the the file is not a PNG image.
215
219
  - <tt>ChunkyPNG::CRCMismatch</tt> is raised when the a CRC check for a chunk in the PNG file fails.
216
220
  - <tt>ChunkyPNG::NotSupported</tt> is raised when the PNG image uses a feature that ChunkyPNG does not support.
@@ -1,21 +1,30 @@
1
1
  = Contributing to ChunkyPNG
2
2
 
3
- I will gladly accept any contributions from anybody to improve this library. However, I like to keep
4
- the scope and complexity of this project relatively small. This way, with the limited amount of time I
5
- dedicate to this project, this library remains a solid piece of software that many people rely on in
6
- their workflow.
3
+ I will gladly accept any contributions from anybody to improve this library. However, this is a
4
+ personal open source project, without an active community around it. As a result I am the only
5
+ maintainer, and I’d like to keep the scope and complexity of this project small.
6
+ This way, with the limited amount of time I dedicate to this project, this library remains a
7
+ solid piece of software that many people rely on in their workflow.
7
8
 
8
9
 
9
10
  == Project scope
10
11
 
11
12
  The scope of this library is defined as:
12
13
 
13
- 1. Reading and writing any PNG image that conforms to the spec, with proper handling of images that do not.
14
+ 1. Reading and writing any PNG image that conforms to the spec, with proper error handling of
15
+ images that do not conform to the spec.
14
16
  2. Basic canvas drawing and compositing operations to create new or edit existing images.
17
+ However, I will generally be hesitant to add new drawing and compositing methods, because
18
+ the list could be endless to support every niche use case.
15
19
  3. Remain compatible with Ruby versions that are widely used.
16
20
 
17
- I will close issues and pull requests that go beyond this scope. If you want to work on something,
18
- but are not sure if it will be in scope, feel free to reach out to me!
21
+ I generally consider this gem to be feature complete based on this scope. I will close issues
22
+ and pull requests that go beyond this scope. If you want to work on something, but are not sure
23
+ if it will be accepted, feel free to reach out to me by opening an issue before committing your time.
24
+
25
+ For functionality that goes beyond the scope, I would suggest making it available as a separate
26
+ “plugin” gem (e.g. chunky_png-<my-feature>). If anything in the gem needs to be refactored
27
+ to support this kind of extensibility, I am happy to accept PRs for that.
19
28
 
20
29
 
21
30
  == Reporting bugs
@@ -38,7 +47,7 @@ Title and description:
38
47
  Code:
39
48
 
40
49
  - Don't break backwards compatibility.
41
- - Follow code conventions. They are not defined, so look at the code around you.
50
+ - Follow code conventions. They are enforced through Rubocop.
42
51
  - Add Yardoc comments as documentation.
43
52
 
44
53
  Specs:
data/Gemfile CHANGED
@@ -1,10 +1,18 @@
1
- source 'https://rubygems.org'
1
+ # frozen-string-literal: true
2
+
3
+ source "https://rubygems.org"
2
4
  gemspec
3
5
 
4
6
  platforms :jruby do
5
- gem 'jruby-openssl'
7
+ gem "jruby-openssl"
6
8
  end
7
9
 
8
- platform :rbx do
9
- gem 'rubysl'
10
+ group :jekyll do
11
+ gem "jekyll", "~> 3.3"
12
+ gem "kramdown-parser-gfm"
10
13
  end
14
+
15
+ group :jekyll_plugins do
16
+ gem "jekyll-commonmark"
17
+ gem "jekyll-theme-cayman"
18
+ end
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2015 Willem van Bergen
1
+ Copyright (c) 2010-2019 Willem van Bergen
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,13 +1,13 @@
1
- # ChunkyPNG [![Build Status](https://travis-ci.org/wvanbergen/chunky_png.svg?branch=master)](https://travis-ci.org/wvanbergen/chunky_png)
1
+ # ChunkyPNG
2
2
 
3
3
  This library can read and write PNG files. It is written in pure Ruby for
4
4
  maximum portability. Let me rephrase: it does NOT require RMagick or any other
5
5
  memory leaking image library.
6
6
 
7
- - [Source code](http://github.com/wvanbergen/chunky_png/tree)
8
- - [RDoc](http://rdoc.info/gems/chunky_png/frames)
9
- - [Wiki](http://github.com/wvanbergen/chunky_png/wiki)
10
- - [Issue tracker](http://github.com/wvanbergen/chunky_png/issues)
7
+ - [Source code](https://github.com/wvanbergen/chunky_png/tree/master)
8
+ - [RDoc](https://rdoc.info/gems/chunky_png)
9
+ - [Wiki](https://github.com/wvanbergen/chunky_png/wiki)
10
+ - [Issue tracker](https://github.com/wvanbergen/chunky_png/issues)
11
11
 
12
12
  ## Features
13
13
 
@@ -23,9 +23,10 @@ memory leaking image library.
23
23
  depending on the hardware)
24
24
  - Reasonably fast for Ruby standards, by only using integer math and a highly
25
25
  optimized saving routine.
26
+ - Works on every currently supported Ruby version (2.5+)
26
27
  - Interoperability with RMagick if you really have to.
27
28
 
28
- Also, have a look at [OilyPNG](http://github.com/wvanbergen/oily_png) which
29
+ Also, have a look at [OilyPNG](https://github.com/wvanbergen/oily_png) which
29
30
  is a mixin module that implements some of the ChunkyPNG algorithms in C, which
30
31
  provides a massive speed boost to encoding and decoding.
31
32
 
@@ -59,11 +60,11 @@ png_stream.each_chunk { |chunk| p chunk.type }
59
60
 
60
61
  Also check out the screencast on the ChunkyPNG homepage by John Davison,
61
62
  which illustrates basic usage of the library on the [ChunkyPNG
62
- website](http://chunkypng.com/).
63
+ website](https://chunkypng.com/).
63
64
 
64
65
  For more information, see the [project
65
66
  wiki](https://github.com/wvanbergen/chunky_png/wiki) or the [RDOC
66
- documentation](http://www.rubydoc.info/gems/chunky_png/frames).
67
+ documentation](https://www.rubydoc.info/gems/chunky_png).
67
68
 
68
69
  ## Security warning
69
70
 
@@ -80,7 +81,12 @@ background processing library.
80
81
 
81
82
  The library is written by Willem van Bergen for Floorplanner.com, and released
82
83
  under the MIT license (see LICENSE). Please contact me for questions or
83
- remarks. Patches are greatly appreciated!
84
+ remarks.
85
+
86
+ I generally consider this library to be feature complete. I will gladly accept
87
+ patches to fix bugs and improve performance, but I will generally be hesitant
88
+ to accept new features or API endpoints. Before contributing, please read
89
+ [CONTRIBUTING.rdoc](CONTRIBUTING.rdoc) that explains this in more detail.
84
90
 
85
91
  Please check out CHANGELOG.rdoc to see what changed in all versions.
86
92
 
data/Rakefile CHANGED
@@ -1,11 +1,13 @@
1
+ # frozen-string-literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
3
5
 
4
- Dir['tasks/*.rake'].each { |file| load(file) }
6
+ Dir["tasks/*.rake"].each { |file| load(file) }
5
7
 
6
8
  RSpec::Core::RakeTask.new(:spec) do |task|
7
9
  task.pattern = "./spec/**/*_spec.rb"
8
- task.rspec_opts = ['--color']
10
+ task.rspec_opts = ["--color"]
9
11
  end
10
12
 
11
- task :default => [:spec]
13
+ task default: [:spec]
@@ -1,26 +1,26 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
7
  def image_file(name)
8
- File.join(File.dirname(__FILE__), '..', 'spec', 'resources', name)
8
+ File.join(File.dirname(__FILE__), "..", "spec", "resources", name)
9
9
  end
10
10
 
11
11
  def image_data(name)
12
12
  data = nil
13
- File.open(image_file(name), 'rb') { |f| data = f.read }
13
+ File.open(image_file(name), "rb") { |f| data = f.read }
14
14
  data
15
15
  end
16
16
 
17
- no_filtering_stream = image_data('pixelstream_fast_rgba.png')
18
- up_filtering_stream = image_data('pixelstream_reference.png')
19
- paeth_filtering_stream = image_data('pixelstream_best_compression.png')
20
- rgba_pixelstream = image_data('pixelstream.rgba')
21
- rgb_pixelstream = image_data('pixelstream.rgb')
17
+ no_filtering_stream = image_data("pixelstream_fast_rgba.png")
18
+ up_filtering_stream = image_data("pixelstream_reference.png")
19
+ paeth_filtering_stream = image_data("pixelstream_best_compression.png")
20
+ rgba_pixelstream = image_data("pixelstream.rgba")
21
+ rgb_pixelstream = image_data("pixelstream.rgb")
22
22
 
23
- n = (ENV['N'] || '5').to_i
23
+ n = (ENV["N"] || "5").to_i
24
24
 
25
25
  puts "---------------------------------------------"
26
26
  puts "ChunkyPNG (#{ChunkyPNG::VERSION}) decoding benchmark (n=#{n})"
@@ -28,9 +28,9 @@ puts "---------------------------------------------"
28
28
  puts
29
29
 
30
30
  Benchmark.bmbm do |x|
31
- x.report('PNG - no filtering') { n.times { ChunkyPNG::Image.from_blob(no_filtering_stream) } }
32
- x.report('PNG - UP filtering') { n.times { ChunkyPNG::Image.from_blob(up_filtering_stream) } }
33
- x.report('PNG - PAETH filtering') { n.times { ChunkyPNG::Image.from_blob(paeth_filtering_stream) } }
34
- x.report('From RGBA pixelstream') { n.times { ChunkyPNG::Image.from_rgba_stream(240, 180, rgba_pixelstream) } }
35
- x.report('From RGB pixelstream') { n.times { ChunkyPNG::Image.from_rgb_stream(240, 180, rgb_pixelstream) } }
31
+ x.report("PNG - no filtering") { n.times { ChunkyPNG::Image.from_blob(no_filtering_stream) } }
32
+ x.report("PNG - UP filtering") { n.times { ChunkyPNG::Image.from_blob(up_filtering_stream) } }
33
+ x.report("PNG - PAETH filtering") { n.times { ChunkyPNG::Image.from_blob(paeth_filtering_stream) } }
34
+ x.report("From RGBA pixelstream") { n.times { ChunkyPNG::Image.from_rgba_stream(240, 180, rgba_pixelstream) } }
35
+ x.report("From RGB pixelstream") { n.times { ChunkyPNG::Image.from_rgb_stream(240, 180, rgb_pixelstream) } }
36
36
  end
@@ -1,17 +1,20 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
7
  image = ChunkyPNG::Image.new(240, 180, ChunkyPNG::Color::TRANSPARENT)
8
8
 
9
9
  # set some random pixels
10
+
11
+ # rubocop:disable Layout/ExtraSpacing, Layout/SpaceInsideParens
10
12
  image[10, 20] = ChunkyPNG::Color.rgba(255, 0, 0, 255)
11
13
  image[50, 87] = ChunkyPNG::Color.rgba( 0, 255, 0, 255)
12
14
  image[33, 99] = ChunkyPNG::Color.rgba( 0, 0, 255, 255)
15
+ # rubocop:enable Layout/ExtraSpacing, Layout/SpaceInsideParens
13
16
 
14
- n = (ENV['N'] || '5').to_i
17
+ n = (ENV["N"] || "5").to_i
15
18
 
16
19
  puts "---------------------------------------------"
17
20
  puts "ChunkyPNG (#{ChunkyPNG::VERSION}) encoding benchmark (n=#{n})"
@@ -19,22 +22,22 @@ puts "---------------------------------------------"
19
22
  puts
20
23
 
21
24
  Benchmark.bmbm do |x|
22
- x.report('Autodetect (indexed)') { n.times { image.to_blob } }
25
+ x.report("Autodetect (indexed)") { n.times { image.to_blob } }
23
26
 
24
27
  # Presets
25
- x.report(':no_compression') { n.times { image.to_blob(:no_compression) } }
26
- x.report(':fast_rgba') { n.times { image.to_blob(:fast_rgba) } }
27
- x.report(':fast_rgb') { n.times { image.to_blob(:fast_rgb) } }
28
- x.report(':good_compression') { n.times { image.to_blob(:good_compression) } }
29
- x.report(':best_compression') { n.times { image.to_blob(:best_compression) } }
30
-
28
+ x.report(":no_compression") { n.times { image.to_blob(:no_compression) } }
29
+ x.report(":fast_rgba") { n.times { image.to_blob(:fast_rgba) } }
30
+ x.report(":fast_rgb") { n.times { image.to_blob(:fast_rgb) } }
31
+ x.report(":good_compression") { n.times { image.to_blob(:good_compression) } }
32
+ x.report(":best_compression") { n.times { image.to_blob(:best_compression) } }
33
+
31
34
  # Some options
32
- x.report(':rgb') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_TRUECOLOR) } }
33
- x.report(':rgba') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_TRUECOLOR_ALPHA) } }
34
- x.report(':indexed') { n.times { image.to_blob(:color_mode => ChunkyPNG::COLOR_INDEXED) } }
35
- x.report(':interlaced') { n.times { image.to_blob(:interlaced => true) } }
36
-
35
+ x.report(":rgb") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_TRUECOLOR) } }
36
+ x.report(":rgba") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_TRUECOLOR_ALPHA) } }
37
+ x.report(":indexed") { n.times { image.to_blob(color_mode: ChunkyPNG::COLOR_INDEXED) } }
38
+ x.report(":interlaced") { n.times { image.to_blob(interlaced: true) } }
39
+
37
40
  # Exports
38
- x.report('to RGBA pixelstream') { n.times { image.to_rgba_stream } }
39
- x.report('to RGB pixelstream') { n.times { image.to_rgb_stream } }
41
+ x.report("to RGBA pixelstream") { n.times { image.to_rgba_stream } }
42
+ x.report("to RGB pixelstream") { n.times { image.to_rgb_stream } }
40
43
  end
@@ -1,10 +1,10 @@
1
- require 'rubygems'
2
- require 'bundler/setup'
1
+ require "rubygems"
2
+ require "bundler/setup"
3
3
 
4
- require 'benchmark'
5
- require 'chunky_png'
4
+ require "benchmark"
5
+ require "chunky_png"
6
6
 
7
- files = ['pixelstream_reference.png', 'operations.png', 'clock.png']
7
+ files = ["pixelstream_reference.png", "operations.png", "clock.png"]
8
8
 
9
9
  def encode_png(image, constraints = {})
10
10
  filesize = nil
@@ -13,7 +13,7 @@ def encode_png(image, constraints = {})
13
13
  end
14
14
 
15
15
  files.each do |file|
16
- filename = File.join(File.dirname(__FILE__), '..', 'spec', 'resources', file)
16
+ filename = File.join(File.dirname(__FILE__), "..", "spec", "resources", file)
17
17
  image = ChunkyPNG::Canvas.from_file(filename)
18
18
 
19
19
  puts "#{file}: #{image.width}x#{image.height} - #{image.palette.size} colors"
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rake", "rake")
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'standardrb' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("standard", "standardrb")