silvia-odwyer/photon

GitHub: silvia-odwyer/photon

Stars: 3837 | Forks: 183

# photon

Photon banner, showing the Photon logo on a dark background

Photon

[![Status](https://img.shields.io/badge/status-active-success.svg?logo=statuspal)]() [![GitHub Issues](https://img.shields.io/github/issues/silvia-odwyer/photon.svg?logo=github)](https://github.com/silvia-odwyer/photon/issues) [![Gitter Chat](https://img.shields.io/gitter/room/silvia-odwyer/photon?color=cyan&logo=Gitter)](https://gitter.im/photonlibrary/community "Gitter chat") [![NPM Monthly Downloads](https://img.shields.io/npm/dm/@silvia-odwyer/photon-node?logo=npm&color=pink)](https://www.npmjs.com/package/@silvia-odwyer/photon-node) [![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/silvia-odwyer/photon/ci.yml?branch=master&logo=github&)](https://github.com/silvia-odwyer/photon/blob/master/.github/workflows/compile_wasm.yaml) [![Crates.io](https://img.shields.io/crates/v/photon_rs?logo=rust)](https://crates.io/crates/photon_rs) [![License](https://img.shields.io/github/license/silvia-odwyer/photon)](https://github.com/silvia-odwyer/photon/blob/master/LICENSE.md) [![X (formerly Twitter) Follow](https://img.shields.io/twitter/follow/silvia_923)](https://twitter.com/silvia_923 "Follow on X/Twitter")

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

## 📝 Table of Contents - [Get Started with WebAssembly](https://github.com/silvia-odwyer/photon#get-started-with-webassembly) - [Get Started Natively](https://github.com/silvia-odwyer/photon#get-started-natively) - [Documentation](https://docs.rs/photon-rs/) - [Official Website](https://silvia-odwyer.github.io/photon/) - [All Available Functions](https://silvia-odwyer.github.io/photon/docs/photon/all.html) - [Got Questions? Ask Here!](https://github.com/silvia-odwyer/photon#got-questions) 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. You can run Photon: - natively - in the browser with WebAssembly - on Node with WebAssembly ### Features - **Fast:** On the web, Photon's high-performance allows it to run at near-native speed. Benchmarks can be found [here](https://github.com/silvia-odwyer/photon/wiki/Benchmarks). - **Call with JS:** Want to use Photon on the web or with Node? Using a simple npm package, you're good to go. Get all the benefits of WebAssembly with zero-cost abstraction. - **Use Natively:** For command-line apps, native photo editing apps, and so forth, Photon's core codebase is in Rust, allowing for cross-platform development. - **Pure Rust** - Unlike other libraries, 100% of the library's codebase is written in Rust, so security and safety is guaranteed. ### Featured in Photon is the image processing library used in the AI assistant [OpenClaw](https://github.com/openclaw/openclaw). It is also the image processing library used in the [Pi coding agent](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) also. ### Live Demo View the [official demo of WASM in action](https://silvia-odwyer.github.io/photon/demo.html). ### Photon In Action ![Imgur](https://i.imgur.com/PShSZ6k.png) ### Version 0.3.2 Release Version 0.3.2 has been released on Crates.io and NPM, with new features including: - A duotone filter and preset duotone effects - Image rotation - Dithering filter - Image cropping update (fixed in [PR #100](https://github.com/silvia-odwyer/photon/pull/100)) ### Supported Image Formats The following image formats are supported: - PNG - JPEG - BMP - ICO - TIFF - WEBP ### Get Started #### Getting Started Guide Check out Photon's [getting started guide, complete with tutorials, installation instructions, and more](https://silvia-odwyer.github.io/photon/guide) ### 📚 Documentation View the [official documentation](https://docs.rs/photon-rs/). ### Functions 96 customisable functions are available, for varying image effects. Functions include: - **Image correction**: Hue rotation, sharpening, brightness adjustment, adjusting saturation, lightening/darkening all within various colour spaces. - **Resizing**: Resize images both natively and on the web. - **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**: Monochrome tints, 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. - **Watermarking**: Watermark images in multiple formats. - **Blending**: Blend images together using 10 different techniques, change image backgrounds. - **Special effects**: Film grain, vignette, Bayer dither effects + many more (in next 2026 release) ## Get Started Natively ### Install Add the following line to the dependencies section of your Rust project's Cargo.toml: ###### Cargo.toml [dependencies] photon-rs = "0.3.2" #### Using Photon Natively The following code opens an image from the filesystem, applies an effect, and outputs it as a PNG. Here is a code sample to get you started: extern crate photon_rs; use photon_rs::native::{open_image, save_image}; fn main() -> Result<(), Box> { // Open the image (a PhotonImage is returned) let mut img = open_image("test_image.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")?; Ok(()) } ##### See More Examples [For more examples, check out the guide on how to get started with Photon natively.](https://silvia-odwyer.github.io/photon/guide/using-photon-natively/) ### Building WebAssembly package In order to build the WebAssembly package you will need `wasm-pack`. Check https://rustwasm.github.io/wasm-pack/installer/ on how to install it. Then you can run the command: wasm-pack build ./crate ## Get Started With WebAssembly ### Using a Bundler? #### Installing Photon If you're using Webpack or a bundler to build your project, install Photon via [npm](https://www.npmjs.com/package/@silvia-odwyer/photon): npm install @silvia-odwyer/photon You can run Photon directly in any web browser that supports WebAssembly, which includes Chrome, Firefox, Safari, and Edge. ##### Get Started with Photon on The Web To get started, [check out the guide](https://silvia-odwyer.github.io/photon/guide/using-photon-web/). #### Using NodeJS? If you're intending to use Photon with NodeJS, you can install the NodeJS version of the library: npm install @silvia-odwyer/photon-node See the [NodeJS tutorial, which shows how to use Photon with NodeJS](https://silvia-odwyer.github.io/photon/guide/using-photon-node/). #### Using Cloudflare Workers? If you're using Cloudflare Workers, you can install the following library to use Photon with Cloudflare Workers: npm install @cf-wasm/photon The full usage steps are provided [here](https://www.npmjs.com/package/@cf-wasm/photon). ## Modules Photon contains a series of modules, which include: - `effects`: Various image effects, including adding offsets, thresholding, duotoning, solarization, etc. - `channels`: Functions related to increasing/decreasing the red, green, and blue channels of the image data. - `transform`: Resize, crop, flip, and rotate images. - `filters`: Preset filters, which alter the rgb channels of the image. Contains over 20. - `conv`: Laplace, Sobel, emboss; image proc functions which require image convolution. - `noise`: Noise generation of varying tints and hues. - `multiple`: A module for dealing with multiple images, such as watermarking images, etc., - `correction`: Hue rotation, adjusting saturation, lightening/darkening: all techniques available in multiple colour spaces, which lead to varying effects. ### Quick Start Example Clone this repo: git clone https://github.com/silvia-odwyer/photon Run the binary, which will perform an image processing function on an image: cargo run --release Compare the original image with the outputted image, and you'll see the desired effect has been applied. ## Latest Updates - Bayer dither, film grain and vignette effects - Added in [PR #216](https://github.com/silvia-odwyer/photon/pull/216) - 3 way color grading and functions for making adjustments/corrections to images - Added in [PR #214](https://github.com/silvia-odwyer/photon/pull/214) - Halftoning effect for WASM - Added in [PR #184](https://github.com/silvia-odwyer/photon/pull/184) - WebP Encoding Support - Added in [PR #164](https://github.com/silvia-odwyer/photon/pull/164) ## Cool Projects Using Photon - [OpenClaw](https://github.com/openclaw/openclaw) - [Pi coding agent](https://www.npmjs.com/package/@earendil-works/pi-coding-agent) - [Next Image Processing API](https://github.com/yoeven/next-image-processing-api) - [Hypetrigger](https://crates.io/crates/hypetrigger) If you've built a project with Photon and would like to be included in the list, just submit a PR! ## Got Questions? If there are any issues involving running/using the library, make sure to open an issue, it would be greatly appreciated, and will help improve the library. - [Spectrum](https://spectrum.chat/photonlibrary) - [Gitter](https://gitter.im/photonlibrary/community) ## Additional Notes Functions have been designed with flexibility in mind, so that full customization of effects and filters can be utilised; for every function, hundreds of differing image effects/tints/hues can be created, just by changing parameters slightly, so with every function comes the ability to fully experiment. For developers who would like to work with high-level constructs can do so, such as applying effects to imagery (eg: Laplace or Sobel) or filters; this library provides a complete suite of functions to do so, as well as in-built filters and presets. `photon` can be thought of as a high-level wrapper to the Rust `image` crate, but conversely also includes functions which provide low-level access to pixel and channel manipulation, perfect for developers who wish to work with this data directly. ## To Do - Blend images using browser-specific functions for WASM version of library. - Vintage images with light leaks, etc., - Tests in a headless web browser for WebAssembly version of library ## License This project is licensed under the Apache 2.0 License - see the [LICENSE.md](LICENSE.md) file for details.
标签:通知系统