Draw anyone's Sketch using Python Turtle Graphics in Python Programming 👨💻🔥
In this post ,I will tell you about How to make Anyone's Sketch in Python using svg file and using these libraries: Turtle,cv2(opencv-python),svgpathtools,svg.path and tqdm.
You can install these libraries using pip command.
Turtle is pre-installed in mostly all programming softwares.
And here are the pip commands to install other libraries :
pip install opencv-python
pip install svgpathtools
pip install svg.path
pip install tqdm
𝗦𝘁𝗲𝗽𝘀 𝘁𝗼 𝗺𝗮𝗸𝗲 𝘀𝗸𝗲𝘁𝗰𝗵 :
1)Go to https://svgconvert.com/#/
2)Upload the image and change the threshold value according to the image and download it as a svg file.
3)Save the code and svg file in the same folder.
Source Code :
import turtle as tu
import cv2
from svgpathtools import svg2paths2
from svg.path import parse_path
from tqdm import tqdm
class sketch_from_svg:
def __init__(self,path,scale=30,x_offset=400,y_offset=400):
self.path = path
self.x_offset = x_offset
self.y_offset = y_offset
self.scale = scale
def hex_to_rgb(self,string):
strlen = len(string)
if string.startswith('#'):
if strlen == 7:
r = string[1:3]
g = string[3:5]
b = string[5:7]
elif strlen == 4:
r = string[1:2]*2
g = string[2:3]*2
b = string[3:4]*2
elif strlen == 3:
r = string[0:1]*2
g = string[1:2]*2
b = string[2:3]*2
else:
r = string[0:2]
g = string[2:4]
b = string[4:6]
return int(r,16)/255,int(g,16)/255, int(b,16)/255
def load_svg(self):
print('loading data')
paths,attributes,svg_att = svg2paths2(self.path)
h = svg_att["height"]
w = svg_att['width']
self.height = int(h[:h.find('.')])
self.width = int(w[:w.find('.')])
res = []
for i in tqdm(attributes):
path = parse_path(i['d'])
co = i['fill']
#print(co)
col = self.hex_to_rgb(co)
#print(col)
n = len(list(path))+2
pts = [((int((p.real/self.width)*self.scale))-self.x_offset, (int((p.imag/self.height)*self.scale))-self.y_offset) for p in (path.point(i/n) for i in range(0,n+1))]
res.append((pts,col))
#res.append(pts)
print('svg data loaded')
return res
def move_to(self,x, y):
self.pen.up()
self.pen.goto(x,y)
self.pen.down()
def draw(self,retain=True):
coordinates = self.load_svg()
self.pen = tu.Turtle()
self.pen.speed(0)
for path_col in coordinates:
f = 1
self.pen.color('black')
#print(path_col)
path = path_col[0]
#print(path_col)
col = path_col[1]
#print(col)
self.pen.color(col)
self.pen.begin_fill()
next = 0
for coord in path:
#for coord in path_col:
x,y = coord
y *= -1
#print(x,y)
if f:
self.move_to(x, y)
f=0
else:
self.pen.goto(x,y)
self.pen.end_fill()
if retain == True:
tu.done()
pen= sketch_from_svg('filename.svg',scale=80)
pen.draw()
MS Dhoni Sketch by using this Code |
WOW... Bro It was superb...... May I know how you calculated the coordinates?
ReplyDeleteThere is a code in python which can trace coordinates of any image,it will be uploaded soon.
DeleteSir please help me with this error
ReplyDeleteFile "d:\try\try.py", line 97, in
pen.draw()
File "d:\try\try.py", line 68, in draw
coordinates = self.load_svg()
File "d:\try\try.py", line 50, in load_svg
co = i['fill']
KeyError: 'fill'
Same error coming
Deletehave u used this site?https://svgconvert.com/#/ .Else it is not even working with me.But the above site is now insecure.
Delete