Skip to content

stumpycr/stumpy_png

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
src
 
 
 
 
 
 
 
 
 
 

stumpy_png

CI

Documentation

Interface

  • StumpyPNG.read(path : String) : Canvas read a PNG image file from a path
  • StumpyPNG.read(io : IO) : Canvas read a PNG image file from any IO object
  • StumpyPNG.write(canvas, path : String, bit_depth: 16, color_type: :rgb_alpha) save a canvas as a PNG image file
  • StumpyPNG.write(canvas, io : IO, bit_depth: 16, color_type: :rgb_alpha) write a canvas as PNG data to any IO object
    • bit_depth is optional, valid values are 8 and 16(default)
    • color_type is optional, valid values are :grayscale, :grayscale_alpha, :rgb and :rgb_alpha(default)
  • StumpyPNG::PNG, helper class to store some state while parsing PNG files
  • Canvas and RGBA from stumpy_core

Usage

Install the stumpy_png shard

  1. shards init
  2. Add the dependency to the shard.yml file
...
dependencies:
  stumpy_png:
    github: stumpycr/stumpy_png
    version: "~> 5.0"
...
  1. shards install

Reading

require "stumpy_png"

canvas = StumpyPNG.read("foo.png")
r, g, b = canvas[0, 0].to_rgb8
puts "red=#{r}, green=#{g}, blue=#{b}"

Writing

require "stumpy_png"
include StumpyPNG

canvas = Canvas.new(256, 256)

(0..255).each do |x|
  (0..255).each do |y|
    # RGBA.from_rgb_n(values, bit_depth) is an internal helper method
    # that creates an RGBA object from a rgb triplet with a given bit depth
    color = RGBA.from_rgb_n(x, y, 255, 8)
    canvas[x, y] = color
  end
end

StumpyPNG.write(canvas, "rainbow.png")

PNG image with a color gradient

(See examples/ for more examples)

Reading PNG files

Color Types

  • Grayscale
  • Grayscale + Alpha
  • RGB
  • RGB + Alpha
  • Palette

Filter Types

  • None
  • Sub
  • Up
  • Average
  • Paeth

Interlacing Methods

  • None
  • Adam7

Ancillary Chunks

None are supported right now.

Writing

  • RGB with 8 or 16 bits
  • RGB + Alpha with 8 or 16 bits
  • Grayscale with 8 or 16 bits
  • Grayscale + Alpha with 8 or 16 bits

Troubleshooting

If you run into errors like

/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status

make sure zlib is installed (Installing zlib under ubuntu).

Contributors

Thanks goes to these wonderful people (emoji key):


Chris Hobbs

💻

Ary Borenszweig

💻

Alex Muscar

💻

Dru Jensen

💻

kojix2

📖

obskyr

💻

r00ster

💻

This project follows the all-contributors specification. Contributions of any kind welcome!