Photon banner, showing the Photon logo on a dark background

[![Status](https://img.shields.io/badge/status-active-success.svg)]() [![GitHub Issues](https://img.shields.io/github/issues/silvia-odwyer/photon.svg)](https://github.com/silvia-odwyer/photon/issues) [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/silvia-odwyer/photon.svg)](https://github.com/silvia-odwyer/p/pulls) [![Gitter chat](https://badges.gitter.im/silvia-odwyer/photon.png)](https://gitter.im/photonlibrary/community "Gitter chat") [![Crates.io](https://img.shields.io/crates/v/photon-rs)](https://crates.io/crates/photon-rs)

High-performance, cross-platform Rust/WebAssembly image processing library

📝 Table of Contents

Photon is a high-performance Rust image processing library, which compiles to WebAssembly, allowing for safe, blazing-fast image processing both natively and on the web.

Features

Live Demo

View the official demo of WASM in action.

Get Started

Getting Started Guide

Check out Photon's getting started guide, complete with tutorials, installation instructions, and more

Documentation

📚 Documentation

View the official documentation.

Photon In Action

Imgur

Functionality

96+ customisable functions are available.

Resize, transform, correct, and filter images: apply as many effects as desired.

Functions include: - Image correction: Hue rotation, sharpening, brightness adjustment, adjusting saturation, lightening/darkening all within various colour spaces. - Convolutions: Sobel filters, blurs, Laplace effects, edge detection, etc., - Channel manipulation: Increasing/decreasing RGB channel values, swapping channels, removing channels, etc. - Transform: Resize, crop, rotate and flip images. - Monochrome effects: Duotoning, greyscaling of various forms, thresholding, sepia, averaging RGB values - Colour manipulation: Work with the image in various colour spaces such as HSL, LCh, and sRGB, and adjust the colours accordingly. - Filters: Over 30 pre-set filters available, incorporating various effects and transformations. - Text: Apply text to imagery in artistic ways, or to watermark, etc., - Watermarking: Watermark images in multiple formats. - Blending: Blend images together using 10 different techniques, change image backgrounds.

Install

Native

Add the following line to the dependencies section of your Rust project's Cargo.toml:

Cargo.toml

toml [dependencies] photon-rs = "0.3.2"

Web

Install Photon as an npm module:

bash npm install --save @silvia-odwyer/photon

Node.JS

To install Photon as an npm module for Node.JS use:

bash npm install --save @silvia-odwyer/photon-node

Using Photon Natively

The following code opens an image from the filesystem, applies an effect, and saves it.

Here is a code sample to get you started:

```rs extern crate photonrs; use photonrs::native::{openimage, saveimage};

fn main() { // Open the image (a PhotonImage is returned) let mut img = openimage("testimage.png");

// Increment the red channel by 40
photon_rs::channels::alter_red_channel(&mut img, 40);

// Write file to filesystem.
save_image(img, "raw_image.jpg");

} ```

For more examples, check out the guide on how to get started with Photon natively.

Using Photon On The Web

Modules

Photon contains a series of modules, which include:

All effects and filters can be viewed below and on the official website.

Run Examples

Clone this crate's official GitHub repo: sh git clone https://github.com/silvia-odwyer/photon

Run the binary, which will perform an image processing function on an image: sh cd crate cargo run --release

Compare the original image with the outputted image, and you'll see the desired effect has been applied.

Got Questions?

If you'd like to chat to the developer about your potential use case, or have further questions about this library, just submit them here, and I'll get back to you!

License

This project is licensed under the Apache 2.0 License - see the LICENSE.md file for details.