You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
2.0 KiB

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))