diff --git a/README.md b/README.md index 89b4a09..cbaf68b 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ So far, the following projects have been integrated to this repo: |[Gmail Mailing Script](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/mailing) |[mayank-kapur](https://github.com/kapurm17) | |[Handwrting DNN recognizer](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Handwriting_Recognizer) |[Chris]() | |[HTML Table to List](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/HTML_Table_to_List) | [Nitish Srivastava](https://github.com/nitish-iiitd)| -|[Image circle formatter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Image-Circulator) |[Berk Gureken](https://github.com/bureken) | +|[Image circle formatter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Image-Circulator) |[Berk Gureken](https://github.com/bureken) | |[Image To PDF](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/images2pdf)|[msaoudallah](https://github.com/msaoudallah)| |[Instadp Web Scrapper](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/InstadpShower)|[Psychiquest](https://github.com/psychiquest)| |[Own IP locator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Location_Of_Own_IP_Adress)|[Chris]()| @@ -39,6 +39,7 @@ So far, the following projects have been integrated to this repo: |[Python Algebra Solver](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Algebra-Solver)|[Sengxay Xayachack](https://github.com/frankxayachack)| |[Random name generator](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Random_Names_Generator)| [Ayush Bhardwaj](https://github.com/hastagAB)| |[Server Ping](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Ping_Server)|[prince]()| +|[Signature photo to PNG converter](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/signature2png)|[Rodolfo Ferro](https://github.com/RodolfoFerro)| |[Simple Webpage Parser](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SimpleWebpageParser)|[Nitish Srivastava](https://github.com/nitish-iiitd)| |[Slideshare downloader](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/Slideshare-Downloader)|[Chris Goes](https://github.com/GhostofGoes)| |[SMS your location](https://github.com/hastagAB/Awesome-Python-Scripts/tree/master/SmsYourLocation)|[prince]()| @@ -63,14 +64,14 @@ Remember to star the repo if you love the scipts~ :wink: ## Contribuition Guidelines : - Make a **separate folder** for your script. -- There shouldn't be any **spaces** between the names of the script. (Use underscore or dash Symbol) +- There shouldn't be any **spaces** between the names of the script. (Use underscore or dash Symbol) - :x: Script One - :heavy_check_mark: Script_One - :heavy_check_mark: Script-One - The Folder should contain the followings - - - Main Python Script, + - Main Python Script, - Supporting files for the Script (If any) - A separate `README.md` File with proper documentation. - + - Feel Free to add your script in the [project's list](https://github.com/hastagAB/Awesome-Python-Scripts#what-do-we-have) above. diff --git a/signature2png/README.md b/signature2png/README.md new file mode 100644 index 0000000..0e5f769 --- /dev/null +++ b/signature2png/README.md @@ -0,0 +1,59 @@ +# Python signature editor + +The present repo contains a Python script to process signature images, it returns a `png` image with transparent background containing only the signature. + +## Setup + +The Python PIL ([Python Image Library](http://pillow.readthedocs.io/en/latest/)) package with [Python 3](https://www.python.org/downloads/) is used in this repo. + +To install PIL via pip: +```bash +pip install pillow +``` + +## Contents + +The main script is [`signature.py`](https://github.com/RodolfoFerro/Signature/blob/master/scripts/signature.py), which contains a set of utility functions developed so far. + +### Done so far + +* Binarize your signature +* Remove background and make it transparent + +### TODO + +* Smooth image +* Image orientation +* Crop to get only signature + +## Usage + +The main script, [`signature.py`](https://github.com/RodolfoFerro/Signature/blob/master/scripts/signature.py) requires a set of parameters that are needed in the parser. + +```bash +$ python signature.py -h +usage: signature.py [-h] -i INPUT [-o OUTPUT] [-th THRESHOLD] + +optional arguments: + -h, --help show this help message and exit + -i INPUT, --input INPUT + Input image. + -o OUTPUT, --output OUTPUT + Output image. + -th THRESHOLD, --threshold THRESHOLD +``` + +An example to use this script is as follows: + +```bash +$ python signature.py -i imgs/example.jpg -o imgs/result.png -th 190 +``` + +### Results + + + +*** + +#### Reference to: + diff --git a/signature2png/imgs/example.jpg b/signature2png/imgs/example.jpg new file mode 100644 index 0000000..645ea27 Binary files /dev/null and b/signature2png/imgs/example.jpg differ diff --git a/signature2png/imgs/result.png b/signature2png/imgs/result.png new file mode 100644 index 0000000..05f1e99 Binary files /dev/null and b/signature2png/imgs/result.png differ diff --git a/signature2png/signature.py b/signature2png/signature.py new file mode 100644 index 0000000..e6cd21a --- /dev/null +++ b/signature2png/signature.py @@ -0,0 +1,90 @@ +# =============================================================== +# Author: Rodolfo Ferro PĂ©rez +# Email: ferro@cimat.mx +# Twitter: @FerroRodolfo +# +# Script: Process signatures to remove background. +# +# ABOUT COPYING OR USING PARTIAL INFORMATION: +# This script was originally created by Rodolfo Ferro. Any +# explicit usage of this script or its contents is granted +# according to the license provided and its conditions. +# =============================================================== + +from PIL import Image, ImageOps +import argparse + +inFile = '' +outFile = '' + + +def binarize(img, threshold=127): + """Utility function to binarize an image.""" + + for i in range(img.size[0]): + for j in range(img.size[1]): + if img.getpixel((i, j)) > threshold: + img.putpixel((i, j), 255) + else: + img.putpixel((i, j), 0) + + return img + + +def make_transparent(img): + """Utility function to make transparent background from image.""" + + img = img.convert("RGBA") + data = img.getdata() + + transparent = [] + for item in data: + if item[:3] == (255, 255, 255): + transparent.append((255, 255, 255, 0)) + else: + transparent.append(item) + + img.putdata(transparent) + return img + + +def main(inFile, outFile, threshold=190): + """Main function to process image.""" + + img = Image.open(inFile).convert('L') + img = binarize(img, threshold=threshold) + img = make_transparent(img) + img.save(outFile) + + return True + + +def parser(): + """Argument parser function.""" + + # Construct the argument parser: + ap = argparse.ArgumentParser() + + ap.add_argument("-i", "--input", + required=True, + type=str, + default="result.png", + help="Input image.") + + ap.add_argument("-o", "--output", + type=str, + default="result.png", + help="Output image.") + + ap.add_argument("-th", "--threshold", + type=int, + default=127) + + args = vars(ap.parse_args()) + + return args['input'], args['output'], args['threshold'] + + +if __name__ == "__main__": + inFile, outFile, threshold = parser() + main(inFile, outFile, threshold=threshold)