Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stumpycr/stumpy_png
Read/Write PNG images in pure Crystal
https://github.com/stumpycr/stumpy_png
crystal image-processing png
Last synced: about 1 month ago
JSON representation
Read/Write PNG images in pure Crystal
- Host: GitHub
- URL: https://github.com/stumpycr/stumpy_png
- Owner: stumpycr
- License: mit
- Created: 2016-07-06T21:27:55.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-12-05T01:37:20.000Z (about 1 year ago)
- Last Synced: 2024-10-25T01:23:30.321Z (about 2 months ago)
- Topics: crystal, image-processing, png
- Language: Crystal
- Homepage:
- Size: 243 KB
- Stars: 106
- Watchers: 7
- Forks: 21
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - stumpy_png - Read and write PNG images (Image processing)
- awesome-crystal - stumpy_png - Read and write PNG images (Image processing)
- awesome-crystal - stumpy_png - Read and write PNG images (Image processing)
README
# stumpy_png
[![CI](https://github.com/stumpycr/stumpy_png/actions/workflows/ci.yml/badge.svg)](https://github.com/stumpycr/stumpy_png/actions/workflows/ci.yml)[Documentation](https://docs.leonrische.me/stumpy_png/)
## 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](https://github.com/stumpycr/stumpy_core)## Usage
### Install the `stumpy_png` shard
1. `shards init`
2. Add the dependency to the `shard.yml` file
``` yaml
...
dependencies:
stumpy_png:
github: stumpycr/stumpy_png
version: "~> 5.0"
...
```
3. `shards install`### Reading
``` crystal
require "stumpy_png"canvas = StumpyPNG.read("foo.png")
r, g, b = canvas[0, 0].to_rgb8
puts "red=#{r}, green=#{g}, blue=#{b}"
```### Writing
``` crystal
require "stumpy_png"
include StumpyPNGcanvas = 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
endStumpyPNG.write(canvas, "rainbow.png")
```![PNG image with a color gradient](examples/rainbow.png)
(See `examples/` for more examples)
## Reading PNG files
### Color Types
- [x] Grayscale
- [x] Grayscale + Alpha
- [x] RGB
- [x] RGB + Alpha
- [x] Palette### Filter Types
- [x] None
- [x] Sub
- [x] Up
- [x] Average
- [x] Paeth### Interlacing Methods
- [x] None
- [x] 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
```bash
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
```make sure `zlib` is installed
([Installing zlib under ubuntu](https://ubuntuforums.org/showthread.php?t=1528204)).## Contributors
Thanks goes to these wonderful people ([emoji key](https://github.com/kentcdodds/all-contributors#emoji-key)):
| [
Chris Hobbs](https://github.com/rx14)
[💻](https://github.com/l3kn/stumpy_png/commits?author=RX14 "Code") | [
Ary Borenszweig](https://github.com/asterite)
[💻](https://github.com/l3kn/stumpy_png/commits?author=asterite "Code") | [
Alex Muscar](https://github.com/muscar)
[💻](https://github.com/l3kn/stumpy_png/commits?author=muscar "Code") | [
Dru Jensen](https://github.com/drujensen)
[💻](https://github.com/l3kn/stumpy_png/commits?author=drujensen "Code") | [
kojix2](https://github.com/kojix2)
[📖](https://github.com/l3kn/stumpy_png/commits?author=kojix2 "Documentation") | [
obskyr](http://obskyr.io/)
[💻](https://github.com/l3kn/stumpy_png/commits?author=obskyr "Code") | [
r00ster](https://github.com/r00ster91)
[💻](https://github.com/l3kn/stumpy_png/commits?author=r00ster91 "Code") |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |This project follows the [all-contributors](https://github.com/kentcdodds/all-contributors) specification. Contributions of any kind welcome!