pconvert-rust
TypeScript icon, indicating that this package has built-in type declarations

0.5.1 • Public • Published

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

// blends the provided image as a new image to be used
// under the current instance
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();

// gathers the mask top blending algorithm function and
// uses it to blend both images
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);

// "outputs" the blended image contents to the `out.png` file
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:

// blends two File objects and returns a File object
blendImages(bot, top, targetFileName, algorithm, isInline, options)

// blends two ImageData objects and returns an ImageData object
blendImagesData(bot, top, algorithm, isInline, options)

// blends multiple File objects and returns a File object
blendMultiple(imageFiles, targetFileName, algorithm, algorithms, isInline, options)

// blends multiple ImageData objects  and returns an ImageData object
blendMultipleData(images, algorithm, algorithms, isInline, options)

// benchmarks and prints to console various times for different combinations of blending algorithms, compression algorithms and filters for `blendImages`
blendImagesBenchmarkAll(bot, top, isInline)

// benchmarks and prints to console various times for different combinations of blending algorithms, compression algorithms and filters for `blendMultiple`
blendMultipleBenchmarkAll(imageFiles, isInline)

// returns a JSON of module constants (e.g. ALGORITHMS, FILTER_TYPES, COMPILER_VERSION, ...)
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).

# blends two images read from the local file system and writes the result to the file system
blend_images(bot_path, top_path, target_path, algorithm, is_inline, options)

# blends multiple images read from the local file system and writes the result to the file system
blend_multiple(img_paths, out_path, algorithm, algorithms, is_inline, options)

# returns a python dict with summary information about the internal thread pool (size, active jobs, queued jobs)
get_thread_pool_status()

# access module constants (e.g. ALGORITHMS, FILTER_TYPES, COMPILER_VERSION, ...)
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

Build Status Build Status GitHub crates Status PyPi Status npm Status License

Readme

Keywords

none

Package Sidebar

Install

npm i pconvert-rust

Weekly Downloads

0

Version

0.5.1

License

Apache-2.0

Unpacked Size

769 kB

Total Files

9

Last publish

Collaborators

  • platforme