Q-Logo 我的学习笔记分享

Entries for tag "python"

用Nuitka将Fastapi应用打包成exe

main.py内容如下:

from typing import Optional

from fastapi import FastAPI

app = FastAPI()

@app.get("/")

def read_root():

return {"Hello": "World"}

@app.get("/items/{item_id}")

def read_item(item_id: int, q: Optional[str] = None):

return {"item_id": item_id, "q": q}

if __name__=='__main__':

import uvicorn

uvicorn.run(app, host="0.0.0.0", port=8000)

在main.py所在目录中打开命令行窗口,执行如下Nuitka打包命令:

python -m nuitka --standalone --mingw64 --show-memory --show-progress --nofollow-imports --include-package=uvicorn --include-package=click --include-package=h11 --include-package=starlette --include-package=fastapi --output-dir=o main.py

等待几分钟,即可打包完成。打包后会生成o/main.dist 目录,双击此目录下的main.exe即可启动FastAPI服务。服务启动后,在浏览器访问http://localhost:8000/,可查看到响应字符串

{"Hello":"World"}

用Python开启Http服务

Python 版本是2.6或2.7

python -m SimpleHTTPServer 8000

Python 版本是3.0或更高:

python -m http.server 8000

用上述方式开启服务后,访问http://IP:8000,可以查看到运行命令的目录中的文件和子目录,点击文件可以下载文件,相当于提供了一个文件下载服务。

如果在运行命令的目录中,提供一个index.html文件,那么访问http://IP:8000,就会打开这个index.html文件。

python cv2.imread 读取含中文名称的图片

先用其他支持中文名称图片的函数,把图片数据导入到内存中,然后通过opencv从内存读入图片,这样就能读入中文名称的图片。

def cv2imgread(filename, mode=cv2.IMREAD_UNCHANGED):

# cv2.IMREAD_UNCHANGED 参数可以用-1代替

#cv2.IMREAD_GRAYSCALE 以灰度模式读入图像,可用0代替

#cv2.IMREAD_COLOR 读入彩色图像,可用1代替;

np_data = np.fromfile(filename, dtype=np.uint8) # 先用numpy把图片文件存入变量np_data,把图片数据看做是纯字节数据

img = cv2.imdecode(np_data, mode) #从内存数据读入图片

return img

用simplekml设置和转换KML 文件中的颜色

KML 文件中,要为点、线等设置颜色时,一般用<color>标签,例如

<color>FF0000FF</color>

<color>标签的文本内容,是为以BGR(AABBGGRR,其中AA是alpha,表示不透明度;B、G、R分别表示Blue、Green、Red即蓝、绿、红三种颜色,任何一种颜色的取值范围都是 0 到 255,一般用两位十六进制表示(00 到 FF))。上例中的FF0000FF,表示红色,具体来看:前两位FF表示完全不透明,第三、四位00表示蓝色分量为0,第五、六位00表示绿色分量为0,第七、八位FF表示红色分量为FF。

这种表示方式与平时常用的RGB方式略有不同。当我们自己写KML文件时,需要注意这里的区别,如果需要的话,要将RGB方式表示的颜色表示为KML要求的BGR格式。

SimpleKML简介

SimpleKML 是一个Python 包,能帮助我们方便地生成kml或kmz文件。

例如下面的代码就可以创建一个位于指定经纬度的点,以及一条宽度为10颜色为红色的线:

import simplekml
kml = simplekml.Kml()
kml.newpoint(name="示例点", coords=[(18.432314,-33.988862)])
# lon, lat, optional height

lin = kml.newlinestring(name="Pathway", description="A pathway in Kirstenbosch",
coords=[(18.43312,-33.98924), (18.43224,-33.98914),
(18.43144,-33.98911), (18.43095,-33.98904)])
lin.style.linestyle.color = 'FF0000FF'
# Red
lin.style.linestyle.width= 10
# 10 pixels
kml.save("pointexample.kml")

用SimpleKML转换颜色格式

如果我们已经有了RGB格式表示的颜色,需要转换为SimpleKML要求的BGR颜色,也很简单,直接使用simplekml.Color.hex()即可,例如要将RGB格式的红色'FF0000'转换为SimpleKML要求的'FF0000FF',可以这样转换

simplekml.Color.hex('FF0000')

除此之外,SimpleKML 还提供了其他的转换函数,可以自行查阅使用