From 8ac09c04ff9c0808d6ecd849a6cf4e0c8b788c37 Mon Sep 17 00:00:00 2001 From: Rodolfo Ferro Date: Thu, 3 Oct 2019 03:08:43 -0500 Subject: [PATCH] Added signatue photo to (transparent) png converter script. --- README.md | 9 ++-- signature2png/README.md | 59 +++++++++++++++++++++ signature2png/imgs/example.jpg | Bin 0 -> 12176 bytes signature2png/imgs/result.png | Bin 0 -> 3299 bytes signature2png/signature.py | 90 +++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+), 4 deletions(-) create mode 100644 signature2png/README.md create mode 100644 signature2png/imgs/example.jpg create mode 100644 signature2png/imgs/result.png create mode 100644 signature2png/signature.py 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 0000000000000000000000000000000000000000..645ea27e9f007966dbdf965705c6dd03e107c446 GIT binary patch literal 12176 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 literal 0 HcmV?d00001 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)