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.
Deletenice your post Many fans search for Robert Downey Jr phone number, but finding direct contact with celebrities is nearly impossible. However, you can stay updated by following Robert Downey Jr on verified social media platforms and official fan pages.
ReplyDelete