added save settings option and some minor changes

pull/11/head
Rahul 2023-07-22 14:07:40 +05:30
rodzic af7694797c
commit 1c41f56257
4 zmienionych plików z 82 dodań i 9 usunięć

Wyświetl plik

@ -14,32 +14,37 @@ if __name__ == '__main__':
help='Output image path')
parser.add_argument('-r', '--resolution', dest='resolution',
default=argument.show_bitmap, action='store_const',
default=argument.resolution, action='store', nargs='?', type=int,
help='Resolution of the output image')
parser.add_argument('-b', '--show_bitmap', dest='show_bitmap',
parser.add_argument('-b', '--show-bitmap', dest='show_bitmap',
const=not argument.show_bitmap, default=argument.show_bitmap, action='store_const',
help='Display bitmap preview.')
parser.add_argument('-nc', '--no_contour', dest='no_contour',
parser.add_argument('-nc', '--no-contour', dest='no_contour',
const=argument.draw_contours, default=not argument.draw_contours, action='store_const',
help="Don't draw contours.")
parser.add_argument('-nh', '--no_hatch', dest='no_hatch',
parser.add_argument('-nh', '--no-hatch', dest='no_hatch',
const=argument.draw_hatch, default=not argument.draw_hatch, action='store_const',
help='Disable hatching.')
parser.add_argument('--no_cv', dest='no_cv',
parser.add_argument('--no-cv', dest='no_cv',
const=not argument.no_cv, default=argument.no_cv, action='store_const',
help="Don't use openCV.")
parser.add_argument('--hatch_size', dest='hatch_size',
parser.add_argument('--hatch-size', dest='hatch_size',
default=argument.hatch_size, action='store', nargs='?', type=int,
help='Patch size of hatches. eg. 8, 16, 32')
parser.add_argument('--contour_simplify', dest='contour_simplify',
parser.add_argument('--contour-simplify', dest='contour_simplify',
default=argument.contour_simplify, action='store', nargs='?', type=int,
help='Level of contour simplification. eg. 1, 2, 3')
parser.add_argument('--save-settings', dest='save_settings',
const=not argument.save_settings, default=argument.save_settings, action='store_const',
help='To Save the settings to a json file')
args = parser.parse_args()
input_path = args.input_path
@ -51,4 +56,5 @@ if __name__ == '__main__':
argument.show_bitmap = args.show_bitmap
argument.no_cv = args.no_cv
argument.resolution = args.resolution
argument.save_settings = args.save_settings
sketch(input_path, export_path)

Wyświetl plik

@ -1,3 +1,5 @@
import json
class Default:
export_path = "output/out.svg"
show_bitmap = False
@ -7,5 +9,21 @@ class Default:
hatch_size = 16
contour_simplify = 2
resolution = 1024
save_settings = False
def save(self,settings_path):
print("Savings settings to a JSON file")
file = open(settings_path, 'w')
data = {
"resolution": self.resolution,
"show_bitmap": self.show_bitmap,
"draw_contours": self.draw_contours,
"draw_hatch": self.draw_hatch,
"use_opencv": not self.no_cv,
"hatch_size": self.hatch_size,
"contour_simplify": self.contour_simplify
}
json.dump(data,file)
file.close()
argument = Default()

Wyświetl plik

@ -1,15 +1,32 @@
from PIL import Image, ImageOps, ImageDraw
import linedraw.perlin as perlin
from datetime import datetime
import os
from linedraw.filters import appmask, F_SobelX, F_SobelY
from linedraw.default import argument
from linedraw.util import distsum
from linedraw.util import distsum, is_image_file, extract_file_name_and_extension
from linedraw.strokesort import sortlines
def sketch(input_path, output_path):
def sketch(input_path, output_path:str):
IMAGE = None
if not is_image_file(input_path):
return print("Please provide the path for an image.")
out_file, out_ext = extract_file_name_and_extension(output_path)
if not out_file:
in_file, in_ext = extract_file_name_and_extension(input_path)
out_ext = '.svg'
if not output_path.endswith('/'):
output_path += '/'
output_path += in_file + out_ext
if out_ext != '.svg':
return print("Currently we can only save as svg file")
try:
IMAGE = Image.open(input_path)
except FileNotFoundError:
@ -39,10 +56,24 @@ def sketch(input_path, output_path):
draw.line(l, (0, 0, 0), 5)
disp.show()
# if out_ext != '.svg':
# now = datetime.now()
# svg_path = output_path.rsplit('/', 1)[0] + now.strftime("%Y%m%d%H%M%S%f") + '.svg'
# else:
# svg_path = output_path
file = open(output_path, 'w')
file.write(make_svg(lines))
file.close()
# if out_ext != '.svg':
# if not is_image_file(output_path):
# return "Output path is not an image path"
# rasterise_image(svg_path,output_path)
# os.remove(svg_path)
print(len(lines), "strokes.")
if argument.save_settings:
argument.save(os.path.dirname(output_path) + '/settings.json')
print("done.")
return lines
@ -197,3 +228,8 @@ def make_svg(lines):
out += '<polyline points="' + l + '" stroke="black" stroke-width="2" fill="none" />\n'
out += '</svg>'
return out
def rasterise_image(svg_image, raster_image):
print("Converting image....")
# to be implemented

Wyświetl plik

@ -1,3 +1,4 @@
import os
def midpt(*args):
xs,ys = 0,0
for p in args:
@ -7,3 +8,15 @@ def midpt(*args):
def distsum(*args):
return sum([ ((args[i][0]-args[i-1][0])**2 + (args[i][1]-args[i-1][1])**2)**0.5 for i in range(1,len(args))])
def is_image_file(file_path):
image_extensions = ['.jpg', '.jpeg', '.png']
tmp,ext = extract_file_name_and_extension(file_path)
return ext in image_extensions
def extract_file_name_and_extension(file_path):
file_name_with_extension = os.path.basename(file_path)
file_name, file_extension = os.path.splitext(file_name_with_extension)
return file_name, file_extension