PedroKV: ok když má kamera přímo url tak je to ideální.
Na stahování snímků netřeba volat wget, (netřeba ukládat mezisoubor na disk) ale pokud teda bude script v Pythonu tak šáhni po knihovně requests, zachází se s ní jednoduše, celé by to mohlo vypadat např takto:
response = requests.get(url_kamery, auth=(login, heslo))
if not response.status_code == requests.codes.ok:
print("Nepodarilo se stahnout obrazek.")
sys.exit(1)
img = Image.open(BytesIO(response.content)) # Nacte obrazek
img.thumbnail(size=(640, 480)) # Zmensi
draw = ImageDraw.Draw(img)
draw.text((10, 10), "Teplota: {}°C".format(get_temperature())) # Vepise text
img.save("/home/pi/kamera.jpg", format="JPEG") # Ulozi
Co se týče názvu obrázku atp tak si to naformátuj např pomocí datetime pak lze vytvářet strukturu jako /rok/měsíc/den/hodina.
Dokázal byl vepsat do obrázku hodnoty tak, aby se vepsaly černým písmem na bílém pozadí, tj. aby pod písmenkem automaticky vznikl bílý obdélníček. Nebo musím taky nejdřív nakreslit bílý obdelník a na něj pak napsat text? Googlil jsem teď chvíli info k PIL a nic kloudného jsem nevygooglil.. :-(
Aktuálně to mám přes convert takhle:
cmd=("convert camerasmall.png -fill white -draw 'rectangle 648,6,793,17 rectangle 684,19 793,30 rectangle 684,32 781,43 rectangle 684,45 763,56' -pointsize 10 -fill black -font DejaVu-Sans -annotate +650+16 'snímek: %s' -annotate +686+29 'barometr: %s hPa' -annotate +687+42 'teploměr: %s °C' -annotate +685+55 'vlhkoměr: %s %s' camerasmall.jpg" % (timedata,relative_pressure1,temperature1,humidity0,percent))
tak momentálně to mám takhle:
import requests
import PIL
import io
from PIL import Image,ImageDraw,ImageFont
response=requests.get("adresaobrázkuzkamery")
if not response.status_code==requests.codes.ok:
print (timenow()+" Unable to download image")
sys.exit(1)
img=Image.open(io.BytesIO(response.content))
img=img.resize(size=(800,600),resample=1)
draw=ImageDraw.Draw(img)
draw.rectangle([648,6,793,17],fill="white")
draw.rectangle([684,19,793,30],fill="white")
draw.rectangle([684,32,781,43],fill="white")
draw.rectangle([684,45,763,56],fill="white")
font=ImageFont.truetype('/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf',11, encoding="unic")
draw.text((650,7), (u"snímek: "+timedata),font=font, fill="black")
draw.text((686,20), ("barometr: "+str(relative_pressure1)+" hPa"),font=font, fill="black")
draw.text((687,33), (u"teploměr: "+str(temperature1)+" °C"),font=font, fill="black")
draw.text((685,46), (u"vlhkoměr: "+str(humidity0)+" %"),font=font, fill="black")
černý text na bílém pozadí asi psát nejde, jediná šance je zjistit šířku textu vypsání do obrázku a podle toho udělat šířku bílého obdélníku. Nakonec na to kašlu a nechám délku obdélníku statickou. Trochu mě potrápilo, že přes convert jsem měl font užší. Ač jsem měl specifikovaný font DejaVuSans, convert používal Condensed verzi. A díky quality=90 v image.save (stejné nastavení kvality, jako mám nyní na PC), se text v boxíkách zčitelnil. image.thumbnail a image.resize dělají to samé, jen každý s jiným defaultním filtrem. Použil jsem image.resize a resample=1, přijde mi, že to dává nejhezčí výsledek. No musím se podívat ještě na denní snímek.