2 circles and a dot
This commit is contained in:
parent
26994d7c67
commit
1845e30a1f
29
index.html
29
index.html
|
|
@ -14,7 +14,7 @@
|
||||||
#slider {
|
#slider {
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-bottom:3em;
|
margin-bottom:1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -51,22 +51,35 @@
|
||||||
{
|
{
|
||||||
"city": "Hamburg",
|
"city": "Hamburg",
|
||||||
"lat": "53.64286",
|
"lat": "53.64286",
|
||||||
"lng": "9.9753"
|
"lng": "9.9753",
|
||||||
|
"icon": "test5.png",
|
||||||
|
"anchor": [101,101]
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// "city": "Kiel",
|
// "city": "Kiel",
|
||||||
// "lat": "54.3297",
|
// "lat": "54.3297",
|
||||||
// "lng": "10.1435"
|
// "lng": "10.1435"
|
||||||
// },
|
// },
|
||||||
|
// {
|
||||||
|
// "city": "München",
|
||||||
|
// "lat": "48.1341",
|
||||||
|
// "lng": "11.5674",
|
||||||
|
// "icon": "test8.png",
|
||||||
|
// "anchor": [144,144]
|
||||||
|
// },
|
||||||
{
|
{
|
||||||
"city": "München",
|
"city": "La Spezia",
|
||||||
"lat": "48.1341",
|
"lat": "44.1064",
|
||||||
"lng": "11.5674"
|
"lng": "9.8439",
|
||||||
|
"icon": "test8.png",
|
||||||
|
"anchor": [144,144]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"city": "Teisnach",
|
"city": "Teisnach",
|
||||||
"lat": "49.0301",
|
"lat": "49.0301",
|
||||||
"lng": "12.998"
|
"lng": "12.998",
|
||||||
|
"icon": "test13.png",
|
||||||
|
"anchor": [144,144]
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
@ -74,8 +87,8 @@
|
||||||
const markers = locations.map(location => {
|
const markers = locations.map(location => {
|
||||||
return L.marker([location.lat, location.lng], {icon: L.icon({
|
return L.marker([location.lat, location.lng], {icon: L.icon({
|
||||||
|
|
||||||
iconUrl: location.city + "64.png",
|
iconUrl: location.icon,
|
||||||
iconAnchor: [32,32]
|
iconAnchor: location.anchor
|
||||||
})}).addTo(map);
|
})}).addTo(map);
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -17,13 +17,13 @@ def circular_mask(img):
|
||||||
return img
|
return img
|
||||||
|
|
||||||
|
|
||||||
def arrange_imager_in_circle(images, spacing=5):
|
def arrange_imager_in_circle(images, spacing=5, min_radius=0):
|
||||||
|
|
||||||
d = images[0].size[0]
|
d = images[0].size[0]
|
||||||
dis = d + spacing
|
dis = d + spacing
|
||||||
theta = 2*math.pi / len(images)
|
theta = 2*math.pi / len(images)
|
||||||
|
|
||||||
radius = dis/2/math.sin(theta/2)
|
radius = max(dis/2/math.sin(theta/2), min_radius)
|
||||||
imgWidth, imgHeight = (int(d+radius*2), int(d+radius*2))
|
imgWidth, imgHeight = (int(d+radius*2), int(d+radius*2))
|
||||||
masterImage = Image.new("RGBA", (imgWidth, imgHeight), (255,255,255,0))
|
masterImage = Image.new("RGBA", (imgWidth, imgHeight), (255,255,255,0))
|
||||||
|
|
||||||
|
|
@ -62,7 +62,21 @@ def create_circle(image_paths, output_path):
|
||||||
circular_images[0].save(output_path)
|
circular_images[0].save(output_path)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if len(circular_images) < 7:
|
||||||
output_img = arrange_imager_in_circle(circular_images)
|
output_img = arrange_imager_in_circle(circular_images)
|
||||||
|
ow, oh = output_img.size
|
||||||
|
else:
|
||||||
|
inner_img = arrange_imager_in_circle(circular_images[:4])
|
||||||
|
iw, ih = inner_img.size
|
||||||
|
mask = inner_img.split()[-1]
|
||||||
|
dr = circular_images[0].size[0]//2 + iw//2
|
||||||
|
output_img = arrange_imager_in_circle(circular_images[4:],min_radius=dr)
|
||||||
|
ow, oh = output_img.size
|
||||||
|
output_img.paste(inner_img,((ow-iw)//2,(oh-ih)//2),mask)
|
||||||
|
|
||||||
|
draw = ImageDraw.Draw(output_img)
|
||||||
|
dr = 3
|
||||||
|
draw.ellipse((ow//2-dr, oh//2-dr, ow//2+dr, oh//2+dr),fill=(255,0,0),outline=False)
|
||||||
output_path = output_img.save(output_path)
|
output_path = output_img.save(output_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue