Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

convert sheet directly to bmp #88

Open
wants to merge 2 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions handwrite/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from handwrite.sheettopng import SHEETtoPNG
from handwrite.pngtosvg import PNGtoSVG
from handwrite.sheettobmp import SHEETtoBMP
from handwrite.bmptosvg import BMPtoSVG
from handwrite.svgtottf import SVGtoTTF
from handwrite.cli import converters
59 changes: 59 additions & 0 deletions handwrite/bmptosvg.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
# from PIL import Image, ImageChops
import os
import shutil
import subprocess


class PotraceNotFound(Exception):
pass


class BMPtoSVG:
"""Converter class to convert character BMPs to BMPs and SVGs."""

def convert(self, directory):
"""Call converters on each .bmp in the provider directory.

Walk through the custom directory containing all .bmp files
from sheettobmp and convert them to svg.
"""
path = os.walk(directory)
for root, dirs, files in path:
for f in files:
if f.endswith(".bmp"):
# self.trim(root + "/" + f)
self.bmpToSvg(root + "/" + f)

def bmpToSvg(self, path):
"""Convert .bmp image to .svg using potrace.

Converts the passed .bmp file to .svg using the potrace
(http://potrace.sourceforge.net/). Each .bmp is passed as
a parameter to potrace which is called as a subprocess.

Parameters
----------
path : str
Path to the bmp file to be converted.

Raises
------
PotraceNotFound
Raised if potrace not found in path by shutil.which()
"""
if shutil.which("potrace") is None:
raise PotraceNotFound("Potrace is either not installed or not in path")
else:
subprocess.run(["potrace", path, "-b", "svg", "-o", path[0:-4] + ".svg"])

# def trim(self, im_path):
# im = Image.open(im_path)
# bg = Image.new(im.mode, im.size, im.getpixel((0, 0)))
# diff = ImageChops.difference(im, bg)
# bbox = list(diff.getbbox())
# bbox[0] -= 1
# bbox[1] -= 1
# bbox[2] += 1
# bbox[3] += 1
# cropped_im = im.crop(bbox)
# cropped_im.save(im_path)
116 changes: 58 additions & 58 deletions handwrite/cli.py
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
import os
import shutil
import argparse
import tempfile

from handwrite import SHEETtoPNG
from handwrite import PNGtoSVG
from handwrite import SVGtoTTF


def run(sheet, output_directory, characters_dir, config, metadata):
SHEETtoPNG().convert(sheet, characters_dir, config)
PNGtoSVG().convert(directory=characters_dir)
SVGtoTTF().convert(characters_dir, output_directory, config, metadata)


def converters(sheet, output_directory, directory=None, config=None, metadata=None):
if not directory:
directory = tempfile.mkdtemp()
isTempdir = True
else:
isTempdir = False

if config is None:
config = os.path.join(
os.path.dirname(os.path.realpath(__file__)), "default.json"
)
if os.path.isdir(config):
raise IsADirectoryError("Config parameter should not be a directory.")

if os.path.isdir(sheet):
raise IsADirectoryError("Sheet parameter should not be a directory.")
else:
run(sheet, output_directory, directory, config, metadata)

if isTempdir:
shutil.rmtree(directory)


def main():
parser = argparse.ArgumentParser()
parser.add_argument("input_path", help="Path to sample sheet")
parser.add_argument("output_directory", help="Directory Path to save font output")
parser.add_argument(
"--directory",
help="Generate additional files to this path (Temp by default)",
default=None,
)
parser.add_argument("--config", help="Use custom configuration file", default=None)
parser.add_argument("--filename", help="Font File name", default=None)
parser.add_argument("--family", help="Font Family name", default=None)
parser.add_argument("--style", help="Font Style name", default=None)

args = parser.parse_args()
metadata = {"filename": args.filename, "family": args.family, "style": args.style}
converters(
args.input_path, args.output_directory, args.directory, args.config, metadata
)
import argparse
import os
import shutil
import tempfile
from bmptosvg import BMPtoSVG
from sheettobmp import SHEETtoBMP
from svgtottf import SVGtoTTF
def run(sheet, output_directory, characters_dir, config, metadata):
SHEETtoBMP().convert(sheet, characters_dir, config)
BMPtoSVG().convert(directory=characters_dir)
SVGtoTTF().convert(characters_dir, output_directory, config, metadata)
def converters(sheet, output_directory, directory=None, config=None, metadata=None):
if not directory:
directory = tempfile.mkdtemp()
isTempdir = True
else:
isTempdir = False
if config is None:
config = os.path.join(
os.path.dirname(os.path.realpath(__file__)), "default.json"
)
if os.path.isdir(config):
raise IsADirectoryError("Config parameter should not be a directory.")
if os.path.isdir(sheet):
raise IsADirectoryError("Sheet parameter should not be a directory.")
else:
run(sheet, output_directory, directory, config, metadata)
if isTempdir:
shutil.rmtree(directory)
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input_path", help="Path to sample sheet")
parser.add_argument("output_directory", help="Directory Path to save font output")
parser.add_argument(
"--directory",
help="Generate additional files to this path (Temp by default)",
default=None,
)
parser.add_argument("--config", help="Use custom configuration file", default=None)
parser.add_argument("--filename", help="Font File name", default=None)
parser.add_argument("--family", help="Font Family name", default=None)
parser.add_argument("--style", help="Font Style name", default=None)
args = parser.parse_args()
metadata = {"filename": args.filename, "family": args.family, "style": args.style}
converters(
args.input_path, args.output_directory, args.directory, args.config, metadata
)
Loading