P(NG)Convert Rust
The Rust version of the famous P(NG)Convert from Hive Solutions.
This Rust crate can be used as a command line application, as a crate in another rust project, as a Web Assembly module (able to be used within JavaScript that targets web browsers or NodeJS) or as a Python package.
Command Line Application
Compiling & Executing
Build and run with:
cargo run
Alternatively, compile first with:
cargo build
and then run the binary with:
./target/debug/pconvert-rust
Additionally, for better code optimization, compile with the --release
flag:
cargo build --release
and then run the release binary with:
./target/release/pconvert-rust
Usage
$ pconvert-rust
Usage: pconvert-rust <command> [args...]
where command can be one of the following: compose, convert, benchmark, version
$ pconvert-rust compose <dir>
$ pconvert-rust convert <file_in> <file_out>
$ pconvert-rust benchmark <dir> [--parallel]
$ pconvert-rust version
Example
let top = pconvert_rust::utils::read_png_from_file("top.png".to_string(), false).unwrap();
let mut bottom = pconvert_rust::utils::read_png_from_file("bottom.png".to_string(), false).unwrap();
let blending_fn = pconvert_rust::blending::get_blending_algorithm(
&pconvert_rust::blending::BlendAlgorithm::DestinationOver,
);
pconvert_rust::blending::blend_images(&mut bottom, &top, &blending_fn, &None);
pconvert_rust::utils::write_png_to_file_d("out.png".to_string(), &bottom).unwrap();
WebAssembly (WASM) Module
Compiling & Executing
Follow this guide on how to install wasm-pack
.
To build, use the wasm-extension
feature:
wasm-pack build -- --features wasm-extension
To run the demo, follow this.
Usage
Check the demo site to see how to use the PConvert WASM module.
JavaScript API exposed:
blendImages(bot, top, targetFileName, algorithm, isInline, options)
blendImagesData(bot, top, algorithm, isInline, options)
blendMultiple(imageFiles, targetFileName, algorithm, algorithms, isInline, options)
blendMultipleData(images, algorithm, algorithms, isInline, options)
blendImagesBenchmarkAll(bot, top, isInline)
blendMultipleBenchmarkAll(imageFiles, isInline)
getModuleConstants()
Python package
Compiling & Executing
This crate can be installed as a python package through the use of pip
. Simply run:
pip install .
Usage
Check this folder for examples.
Import the python package with:
import pconvert_rust
Python API exposed. The parameter options
is a python dictionary of optional parameters and if num_threads
is specified with a value of 1 or more, the work load will be distributed across multiple threads (belonging to a internally managed thread pool).
blend_images(bot_path, top_path, target_path, algorithm, is_inline, options)
blend_multiple(img_paths, out_path, algorithm, algorithms, is_inline, options)
get_thread_pool_status()
pconvert_rust.ALGORITHMS
pconvert_rust.FILTER_TYPES
pconvert_rust.COMPILER_VERSION
Tests
For rust crate tests:
cargo test
For python API tests:
python setup.py test
For WASM API tests:
npm test
Documentation
Generate documentation using:
cargo doc --lib --all-features
License
P(NG)Convert Rust is currently licensed under the Apache License, Version 2.0.
Build Automation
