|
|
|
import subprocess, os, time
|
|
|
|
|
|
|
|
class ImageConverter:
|
|
|
|
|
|
|
|
class ConverterSettings:
|
|
|
|
def __init__(self):
|
|
|
|
# mkbitmap settings
|
|
|
|
self.highpass_filter = 0
|
|
|
|
self.blur = 0
|
|
|
|
# potrace settings
|
|
|
|
self.turd = 0
|
|
|
|
|
|
|
|
# This function takes a file and runs it through mogrify, mkbitmap, and finally potrace.
|
|
|
|
# The flow of the intermediate files is
|
|
|
|
# input_file.extension : The input file
|
|
|
|
# input_file.bmp : The input file converted to bmp
|
|
|
|
# input_file-n.bmp : The bmp file after running through some filters
|
|
|
|
# input_file.svg : The output svg render
|
|
|
|
def convert_image(self, file_name, settings):
|
|
|
|
base_name = file_name.split(".")[0]
|
|
|
|
|
|
|
|
print("Converting input file [{}]".format(file_name))
|
|
|
|
|
|
|
|
print("Running mogrify...")
|
|
|
|
start = time.time()
|
|
|
|
subprocess.call(["mogrify", "-format", "bmp", "input-images/{}".format(file_name)])
|
|
|
|
print("Run took [{:.2f}] seconds".format(time.time() - start))
|
|
|
|
|
|
|
|
print("Running mkbitmap...")
|
|
|
|
start = time.time()
|
|
|
|
mkbitmap_args = ["mkbitmap", "input-images/{}.bmp".format(base_name),
|
|
|
|
"-o", "input-images/{}-n.pbm".format(base_name)]
|
|
|
|
if settings.highpass_filter > 0:
|
|
|
|
mkbitmap_args.append(["-f", settings.highpass_filter])
|
|
|
|
|
|
|
|
if settings.blur > 0:
|
|
|
|
mkbitmap_args.append(["-b", settings.blur])
|
|
|
|
|
|
|
|
subprocess.call(mkbitmap_args)
|
|
|
|
print("Run took [{:.2f}] seconds".format(time.time() - start))
|
|
|
|
|
|
|
|
print("Running potrace...")
|
|
|
|
start = time.time()
|
|
|
|
|
|
|
|
potrace_args = ["potrace",
|
|
|
|
"-z", "white",
|
|
|
|
"-b", "svg",
|
|
|
|
"input-images/{}-n.pbm".format(base_name),
|
|
|
|
"--rotate", "0",
|
|
|
|
"-o", "tmp/conversion-output.svg"]
|
|
|
|
|
|
|
|
if settings.turd > 0:
|
|
|
|
potrace_args.append(["-t", settings.turd])
|
|
|
|
|
|
|
|
subprocess.call(potrace_args)
|
|
|
|
|
|
|
|
print("Run took [{:.2f}] seconds\n".format(time.time() - start))
|