png-glitch

Crates.iopng-glitch
lib.rspng-glitch
version0.6.0
created_at2024-01-11 00:14:00.945019+00
updated_at2025-12-21 07:41:32.853454+00
descriptionA library to glitch PNG images.
homepage
repositoryhttps://github.com/chikoski/png-glitch
max_upload_size
id1095733
size4,286,270
N. Shimizu (chikoski)

documentation

README

png-glitch

A library to glitch PNG files. This library is inspired by the pnglitch, a Ruby library to glitch PNG images.

Please visit "The Art of PNG Glitch" for more details about glitching PNG images.

Glitched PNG image

The original image:

The original PNG file is a photo of a media art placed in a slightly darker space.

Data Structures

+-----------------+
|    PngGlitch    |
+-----------------+
        |
        v
+-----------------+
|       Png       |
+-----------------+
        |
        +--------------------+--------------------+--------------------+
        |                    |                    |                    |
        v                    v                    v                    v
+-----------------+  +-----------------+  +-----------------+  +-----------------+
|     Header      |  |   Terminator    |  |      Chunk      |  |   ScanLine[]    |
+-----------------+  +-----------------+  +-----------------+  +-----------------+
        |                    |                    |                    |
        v                    v                    v                    v
+-----------------+  +-----------------+  +-----------------+  +-----------------+
|    MetaData     |  |      Chunk      |  |    ChunkType    |  |   FilterType    |
+-----------------+  +-----------------+  +-----------------+  +-----------------+
        |
        v
+-----------------+
|    ColorType    |
+-----------------+

Example usage

The following snippet glitches ./a_png_file.png by

  • Changing filter method of all scan lines
  • Setting 1 to the 4th byte of each scan line

The glitched image is emitted to ./glitched.png.

use png_glitch::{FilterType, PngGlitch};

let mut png_glitch = PngGlitch::open("./a_png_file.png")?;
png_glitch.foreach_scanline(|scan_line|{
  scan_line.set_filter_type(FilterType::None);
  scan_line[4] = 1;
});
png_glitch.save("./glitched.png")?;

Contribution

  1. Fork the repository.
  2. Create a feature branch on your forked repository with git checkout -b feature-name command.
  3. Develop the feature.
  4. Commit your changes with git commit command.
  5. Upload the feature branch to GitHub and create a pull request.

License

Please refer to the LICENSE file.

Commit count: 63

cargo fmt