Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ritiek/auto-image-cropper
Removes extra white borders to correctly resize canvas
https://github.com/ritiek/auto-image-cropper
canvas crop image resize rust
Last synced: 17 days ago
JSON representation
Removes extra white borders to correctly resize canvas
- Host: GitHub
- URL: https://github.com/ritiek/auto-image-cropper
- Owner: ritiek
- License: mit
- Created: 2017-05-17T18:31:45.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2020-08-15T20:45:23.000Z (about 4 years ago)
- Last Synced: 2024-10-14T00:22:24.829Z (about 1 month ago)
- Topics: canvas, crop, image, resize, rust
- Language: Rust
- Homepage:
- Size: 2.53 MB
- Stars: 24
- Watchers: 5
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# auto-image-cropper
[![Crates.io](https://img.shields.io/crates/v/auto-image-cropper.svg)](https://crates.io/crates/auto-image-cropper/) [![Build Status](https://travis-ci.org/ritiek/auto-image-cropper.svg?branch=master)](https://travis-ci.org/ritiek/auto-image-cropper/)
- Removes extra white boundaries from images to correctly resize canvas.
- Thanks **[@matthewkmayer](https://github.com/matthewkmayer)** for bringing down cropping times
(see [#1](https://github.com/ritiek/auto-image-cropper/pull/1) and [#2](https://github.com/ritiek/auto-image-cropper/pull/2))!## Screenshots
The borders are just to represent the actual images tested with.
(click to zoom)
## Installation and Usage
```shell
$ cargo install auto-image-cropper
```or if you like to live on the bleeding edge
```shell
$ git clone https://github.com/Ritiek/auto-image-cropper
$ cd auto-image-cropper
$ cargo build --release
```Use `./target/release/autocrop` to start using the tool.
```shell
USAGE:
autocrop [OPTIONS] --inputFLAGS:
-h, --help Prints help information
-V, --version Prints version informationOPTIONS:
-i, --input Location of input image/directory
-o, --output Location of output image/directory
```For example:
```
$ ./target/release/autocrop -i benchmarking/face.jpg -o face.out.jpg
```## Python Bindings
This tool also provides Python bindings via [PyO3](https://github.com/PyO3/pyo3) (using Rust FFI).
You need a Rust nightly toolchain to proceed (PyO3 does not support Rust stable at the moment).
If you have `rustup`, run:
```
$ rustup default nightly
```
to switch to nightly channel.This feature can then be enabled by passing `--features "python-binding"` to cargo when compiling.
For example:
```shell
$ cargo build --release --features "python-binding"
```This will generate a dynamic library (\*.so) on Linux machines with the name
`./target/release/libauto_image_cropper.so`.Let's move this dynamic library into our current working directory:
```shell
$ mv target/release/libauto_image_cropper.so .
```
It can now be utilized via Python scripts using:
```python
>>> import libauto_image_cropper# Returns the optimal top-left and bottom-right corner
# coordinates for a given image to be cropped
>>> (top_left, bottom_right) = libauto_image_cropper.calculate_corners("benchmarking/face.jpg")
>>> print(top_left)
(442, 73)
>>> print(bottom_right)
(783, 536)
```
(I haven't checked this out on Windows or OSX, but should follow a similar procedure)## Benchmarks
- This tool was hackishly re-written in [Python](python/) to compare with Rust - just for fun.
- The benchmarks were done on a MacBook Air running macOS Sierra 10.12.2.
| Image | Python | Rust | Times Faster |
|:---------------------------------------:|:-------:|:------:|:------------:|
| [face.jpg](benchmarking/face.jpg) | 0.867s | 0.155s | 5.59 |
| [square.png](benchmarking/square.png) | 1.682s | 0.142s | 11.84 |
| [flowers.jpg](benchmarking/flowers.jpg) | 2.222s | 0.476s | 4.66 |
| [human.jpg](benchmarking/human.jpg) | 2.362s | 0.294s | 8.02 |
| [pets.jpg](benchmarking/pets.jpg) | 5.366s | 1.704s | 3.14 |
| [agent47.jpg](benchmarking/agent47.jpg) | 51.559s | 7.519s | 6.85 |- Python struggles to find the optimal coordinates but is quick (quicker than Rust) when saving the cropped image back to disk. Rust really outperforms while finding the optimal coordinates.
**[2020 / 03] UPDATE:** These benchmarks were done in 2017. Rust and its image libraries have a come long way ahead and I
believe should now offer even better performance! I'll update these benchmarks when I'm able to.## License
`The MIT License`