前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python库之–turtle,matplotlib,numpy,opencv,os,pillow

python库之–turtle,matplotlib,numpy,opencv,os,pillow

作者头像
十四君
发布于 2019-11-27 13:20:51
发布于 2019-11-27 13:20:51
2.2K0
举报
文章被收录于专栏:UrlteamUrlteam

引言

下面部分为本人初窥python的世界有感所作。

在学python之前,我总觉得这个东西很玄乎,而且认为网上传的很邪门:几行画出一个函数图,几十行做出一个人物形象,几十行写出一个小游戏。当时只觉得时夸大其词了。后来慢慢学习python,虽然知道了它可以用好多库,但也并没有觉得有什么。直到这次学长给我机会让我做一些东西,我才真正了解到它如何去使用,才真正发现它的乐趣,因此开启了新世界的大门,非常感谢学长!!!

在学习python的初期,思维总被束缚,总觉得去实现读取网页连接、打开文件读取每个文件、修改图片信息等等这些很难实现,结果发现这些。。。其实都在库里面实现好了,只需要去调用它即可。直到我认识到了这一点,我才开始走进这个python的世界。(不愧为超级语言)

在学习pyhton中,陆陆续续也了解到了其他的知识,例如Linux服务器,网站等等知识。对我来说,这些东西有着很大的吸引力。学习这些东西非常有趣,好玩,在休闲时间做做这些,挺享受,但是也挺虐心(库中的各种函数不会使用)。唯一遗憾的是,到了现在才了解到这些东西。

以后继续努力把~~~

turtle库

turtle库,也叫海龟库。是入门级的图形绘制函数库。

turtle的原(wan)理(fa):

想象一只小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,在窗体正中心,在画布上游走,它走过的轨迹就形成了绘制的图形。它由程序控制,当然,我们可以改变它的颜色,宽度,速度,行动轨迹等等。

画笔的属性

画笔(画笔的属性,颜色、画线的宽度等)

1) turtle.pensize():设置画笔的宽度;

2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如”green”, “red”,也可以是RGB 3元组。例如turtle.pencolor(“red”),画笔就会改成红色。

3) turtle.speed (speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。turtle.speed(10)为最快。(画笔最快,而不是你最快  – .- 手动狗头)

绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为3种:

一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)    画笔运动命令

命令

说明

turtle.forward(distance)

向当前画笔方向移动distance像素长度

turtle.backward(distance)

向当前画笔相反方向移动distance像素长度

turtle.right(degree)

顺时针移动degree°

turtle.left(degree)

逆时针移动degree°

turtle.pendown()

移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)

将画笔移动到坐标为x,y的位置

turtle.penup()

提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()

画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )

将当前x轴移动到指定位置

sety( )

将当前y轴移动到指定位置

setheading(angle)

设置当前朝向为angle角度

home()

设置当前画笔位置为原点,朝向东。

dot(r)

绘制一个指定直径和颜色的圆点

(2)     画笔控制命令

命令

说明

turtle.fillcolor(colorstring)

绘制图形的填充颜色

turtle.color(color1, color2)

同时设置pencolor=color1, fillcolor=color2

turtle.filling()

返回当前是否在填充状态

turtle.begin_fill()

准备开始填充图形

turtle.end_fill()

填充完成

turtle.hideturtle()

隐藏画笔的turtle形状

turtle.showturtle()

显示画笔的turtle形状

(3)    全局控制命令

命令

说明

turtle.clear()

清空turtle窗口,但是乌龟的位置和状态不会改变

turtle.reset()

清空窗口,重置turtle状态为起始状态

turtle.undo()

撤销上一个turtle动作

turtle.isvisible()

返回当前turtle是否可见

stamp()

复制当前图形

turtle.write(s [,font=(“font-name”,font_size,”font_type”)])

写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

好了,现在我们可以举个实例来运用这些操作了:

简单时钟 Python import turtle from datetime import * # 抬起画笔,向前运动一段距离放下 def Skip(step): turtle.penup() turtle.forward(step) turtle.pendown() def mkHand(name, length): # 注册Turtle形状,建立表针Turtle turtle.reset() Skip(-length * 0.1) # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 turtle.begin_poly() turtle.forward(length * 1.1) # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 turtle.end_poly() # 返回最后记录的多边形。 handForm = turtle.get_poly() turtle.register_shape(name, handForm) def Init(): global secHand, minHand, hurHand, printer # 重置Turtle指向北 turtle.mode("logo") # 建立三个表针Turtle并初始化 mkHand("secHand", 135) mkHand("minHand", 125) mkHand("hurHand", 90) secHand = turtle.Turtle() secHand.shape("secHand") minHand = turtle.Turtle() minHand.shape("minHand") hurHand = turtle.Turtle() hurHand.shape("hurHand") for hand in secHand, minHand, hurHand: hand.shapesize(1, 1, 3) hand.speed(0) # 建立输出文字Turtle printer = turtle.Turtle() # 隐藏画笔的turtle形状 printer.hideturtle() printer.penup() def SetupClock(radius): # 建立表的外框 turtle.reset() turtle.pensize(7) for i in range(60): Skip(radius) if i % 5 == 0: turtle.forward(20) Skip(-radius - 20) Skip(radius + 20) if i == 0: turtle.write(int(12), align="center", font=("Courier", 14, "bold")) elif i == 30: Skip(25) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-25) elif (i == 25 or i == 35): Skip(20) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-20) else: turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-radius - 20) else: turtle.dot(5) Skip(-radius) turtle.right(6) def Week(t): week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] return week[t.weekday()] def Date(t): y = t.year m = t.month d = t.day return "%s %d%d" % (y, m, d) def Tick(): # 绘制表针的动态显示 t = datetime.today() second = t.second + t.microsecond * 0.000001 minute = t.minute + second / 60.0 hour = t.hour + minute / 60.0 secHand.setheading(6 * second) minHand.setheading(6 * minute) hurHand.setheading(30 * hour) turtle.tracer(False) printer.forward(65) printer.write(Week(t), align="center", font=("Courier", 14, "bold")) printer.back(130) printer.write(Date(t), align="center", font=("Courier", 14, "bold")) printer.h0ome() turtle.tracer(True) # 100ms后继续调用tick turtle.ontimer(Tick, 100) def main(): # 打开/关闭龟动画,并为更新图纸设置延迟。 turtle.tracer(False) Init() SetupClock(160) turtle.tracer(True) Tick() turtle.mainloop() if __name__ == "__main__": main() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 import turtle from datetime import * # 抬起画笔,向前运动一段距离放下 def Skip(step): turtle.penup() turtle.forward(step) turtle.pendown() def mkHand(name, length): # 注册Turtle形状,建立表针Turtle turtle.reset() Skip(-length * 0.1) # 开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。 turtle.begin_poly() turtle.forward(length * 1.1) # 停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。 turtle.end_poly() # 返回最后记录的多边形。 handForm = turtle.get_poly() turtle.register_shape(name, handForm) def Init(): global secHand, minHand, hurHand, printer # 重置Turtle指向北 turtle.mode("logo") # 建立三个表针Turtle并初始化 mkHand("secHand", 135) mkHand("minHand", 125) mkHand("hurHand", 90) secHand = turtle.Turtle() secHand.shape("secHand") minHand = turtle.Turtle() minHand.shape("minHand") hurHand = turtle.Turtle() hurHand.shape("hurHand") for hand in secHand, minHand, hurHand: hand.shapesize(1, 1, 3) hand.speed(0) # 建立输出文字Turtle printer = turtle.Turtle() # 隐藏画笔的turtle形状 printer.hideturtle() printer.penup() def SetupClock(radius): # 建立表的外框 turtle.reset() turtle.pensize(7) for i in range(60): Skip(radius) if i % 5 == 0: turtle.forward(20) Skip(-radius - 20) Skip(radius + 20) if i == 0: turtle.write(int(12), align="center", font=("Courier", 14, "bold")) elif i == 30: Skip(25) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-25) elif (i == 25 or i == 35): Skip(20) turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-20) else: turtle.write(int(i/5), align="center", font=("Courier", 14, "bold")) Skip(-radius - 20) else: turtle.dot(5) Skip(-radius) turtle.right(6) def Week(t): week = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"] return week[t.weekday()] def Date(t): y = t.year m = t.month d = t.day return "%s %d%d" % (y, m, d) def Tick(): # 绘制表针的动态显示 t = datetime.today() second = t.second + t.microsecond * 0.000001 minute = t.minute + second / 60.0 hour = t.hour + minute / 60.0 secHand.setheading(6 * second) minHand.setheading(6 * minute) hurHand.setheading(30 * hour) turtle.tracer(False) printer.forward(65) printer.write(Week(t), align="center", font=("Courier", 14, "bold")) printer.back(130) printer.write(Date(t), align="center", font=("Courier", 14, "bold")) printer.h0ome() turtle.tracer(True) # 100ms后继续调用tick turtle.ontimer(Tick, 100) def main(): # 打开/关闭龟动画,并为更新图纸设置延迟。 turtle.tracer(False) Init() SetupClock(160) turtle.tracer(True) Tick() turtle.mainloop() if __name__ == "__main__": main()

这段代码运行后,会画出一个简单的时钟,实时的表示现在的时间。

然而,运行出来的钟表是黑色的。。。很不酷,,,

所以我们只要在绘制图形时设置画笔的颜色就行了,那么我们应该怎么告诉计算机我们想用什么颜色的呢?

这里我们就了解到了RGB色彩模式

RGB色彩模式

RGB色彩模式是由三种颜色,也就是R(red),G(green),B(blue)构成的万物色。它的每个取值范围为0-255整数或者0-1小数,三种颜色不同的取值就构成了不同的颜色,具体的某个颜色可以网上搜出来表来对照。ex:

蓝色(blue): (0,0,255)or (0,0,1)

粉色(pink):(255,192,203) or (1,0.75,0.8)

于是我们有三种变换颜色的方法:pencolor(“blue”)    pencolor(0,0,255)   pencolor(0,0,1)

这三种方法都是把颜色变为蓝色,一般来说,记住颜色的英文名称为最好。

然而,我们发现这还不够,turtle虽然功能很齐全,但是在绘制函数图等某种具体的需求上显得有些乏力,所以我们渴望有新的东西可以满足我们的需求。

于是——–matplotlib库与NumPy 库脚踏七彩祥云从西边归来了。

matplotlib库 and NumPy库

在这里为什么将这两个库合起来介绍呢?是因为:matplotlib库是一个数据可视化库,顾名思义,就是将数据以表的形式呈现出来。而NumPy是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。所以它们两个结合在一起就可以根据我们的需求来绘制相应的图形。例如绘制我们最熟悉的sin,cos这些三角函数图像。

代码如下:

Python

import numpy as np import matplotlib.pyplot as plt # 设置x,y轴的数值 x1 = np.linspace(0, 4*np.pi, 100) y1 = np.sin(x1) y2 = np.cos(x1) # 画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度) plt.plot(x1, y1, label="$sin(x)$", color="blue", linewidth=2) plt.plot(x1, y2, label="$cos(x)$", color="red", linewidth=2) # X和Y坐标轴 plt.xlabel("x") plt.ylabel("sin(x) and cos(x)") # 图表的标题 plt.title("sin and cos") # Y轴的范围 plt.ylim(-1.5, 1.5) plt.xlim(0,4*np.pi) # 显示图示 plt.legend() # 显示图 plt.show()

12345678910111213141516171819202122232425262728

import numpy as npimport matplotlib.pyplot as plt # 设置x,y轴的数值x1 = np.linspace(0, 4*np.pi, 100)y1 = np.sin(x1)y2 = np.cos(x1) # 画图(x轴,y轴,给所绘制的曲线的名字,画线颜色,画线宽度)plt.plot(x1, y1, label="$sin(x)$", color="blue", linewidth=2)plt.plot(x1, y2, label="$cos(x)$", color="red", linewidth=2) # X和Y坐标轴plt.xlabel("x")plt.ylabel("sin(x) and cos(x)") # 图表的标题plt.title("sin and cos") # Y轴的范围plt.ylim(-1.5, 1.5)plt.xlim(0,4*np.pi) # 显示图示plt.legend() # 显示图plt.show()

解释一下其中的函数:

numpy.linspace(start, stop, num, endpoint=True, retstep=False, dtype=None)

在指定的间隔内返回均匀间隔的数字,在[start, stop]返回num均匀分布的样本。即在x从0-4Π中返回100个均匀分布的点。

numpy.sin(t)

这个就很好理解了,根据t值来确定sin的函数值。同理numpy.cos也是。

那么前三行的意思就是画0-4Π范围上的sin,cos的图。

plt.plot(x,y,format_string,**kwargs) x轴数据,y轴数据,format_string控制曲线的格式字串 format_string 由颜色字符,风格字符,和标记字符 ,下面有链接介绍。

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot

不过这些图像好像没什么意思??

所以我们找到了笛卡尔爱心曲线(-.-嘿嘿嘿嘿嘿嘿 十八禁)

于是代码就出来了:

Python

import matplotlib.pyplot as plt from matplotlib import animation import numpy as np import math def drawHeart(): t = np.linspace(0, math.pi, 1000) x = np.sin(t) y = np.cos(t) + np.power(x, 2.0/3) plt.plot(x, y, color='red', linewidth=2, label='h') plt.plot(-x, y, color='red', linewidth=2, label='-h') plt.xlabel('t') plt.ylabel('h') plt.ylim(-2, 2) plt.xlim(-2, 2) plt.title("爱心曲线",fontproperties='SimHei') plt.show() drawHeart()

123456789101112131415161718

import matplotlib.pyplot as pltfrom matplotlib import animationimport numpy as npimport math def drawHeart():    t = np.linspace(0, math.pi, 1000)    x = np.sin(t)    y = np.cos(t) + np.power(x, 2.0/3)    plt.plot(x, y, color='red', linewidth=2, label='h')    plt.plot(-x, y, color='red', linewidth=2, label='-h')    plt.xlabel('t')    plt.ylabel('h')    plt.ylim(-2, 2)    plt.xlim(-2, 2)    plt.title("爱心曲线",fontproperties='SimHei')    plt.show()drawHeart()

这段代码就是用数学函数计算出具体值,然后画出来一个爱心。

我们发现这还不够好玩(nan),有没有更好玩的,可以更考(ke)验(yi)技(de)术(se)的呢?自然有啦,人的天性本就如此。所以我们找到了图片转化字符的样例,就是一张图片转化为字符存到文本里,实现用字符实现对图片的转化。而我们怎么进行对图片的处理呢?由此,我们用到了pillow库(又学到了)。

Pillow库

要知道Pillow库,首先要知道PIL。

PIL:Python imaging Library  即python的图像处理库。

Pillow 是PIL派生的一个分支,支持3以上Python版本。

Pillow库支持相当多的图片格式。直接使用Image模块中的open()函数读取图片,而不必先处理图片的格式,Pillow库自动根据文件决定格式。

Image模块中的save()函数可以保存图片,除非你指定文件格式,那么文件名中的扩展名用来指定文件格式。

例:

Python

im = Image.open('demo.gif') im.save('demo.BMP')

12

im = Image.open('demo.gif')im.save('demo.BMP')

回到正题上,我们要处理图片,让其用字符填充,那么字符一定不能填充其颜色,也就是说,我们用字符去生成的图片只是黑白的。那么,我们就要将图片转化为黑白的,然后一个一个的对比并填充,所以我们用到了模式转换函数。即:

Python

# 黑白 img = Image.open('s.png') img.show() #原图,为彩色的 img = img.convert("L") img.show() #转换后的,只有黑白

12345

# 黑白img = Image.open('s.png')img.show() #原图,为彩色的img = img.convert("L")img.show() #转换后的,只有黑白

这样就完成了我们关键的第一步,接下来就开始进行对比。

在这里有一个重要的函数getpixel,该函数检索指定坐标点的像素的RGB颜色值。然后下面对比选取相应坐标的字符值即可。

接下来只要每个位置对比,选取合适的字符去填充就完成了整个操作。

下面为完整代码:

Python

from PIL import Image #要索引的字符列表 ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ") #获取字符列表的长度 length = len(ascii_char) #读取图像文件 img = Image.open('time.jpg') #对图像进行一定缩小,图片的大小可以根据上传图片的大小来按需调节 (width,height) = img.size img = img.resize((int(width*0.5),int(height*0.2))) print(img.size) def convert(img): img = img.convert("L") # 转为灰度图像 txt = "" for i in range(img.size[1]): for j in range(img.size[0]): gray = img.getpixel((j, i)) # 获取每个坐标像素点的灰度 unit = 256.0 / length txt += ascii_char[int(gray / unit)] #获取对应坐标的字符值 txt += '\n' return txt txt = convert(img) f = open("demo.txt","w") f.write(txt) #存储到文件中 f.close()

1234567891011121314151617181920212223242526

from PIL import Image#要索引的字符列表ascii_char = list("$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\|()1{}[]?-_+~<>i!lI;:,\"^`'. ")#获取字符列表的长度length = len(ascii_char)#读取图像文件img = Image.open('time.jpg')#对图像进行一定缩小,图片的大小可以根据上传图片的大小来按需调节(width,height) = img.sizeimg = img.resize((int(width*0.5),int(height*0.2)))  print(img.size)def convert(img):    img = img.convert("L")  # 转为灰度图像    txt = ""    for i in range(img.size[1]):        for j in range(img.size[0]):            gray = img.getpixel((j, i))     # 获取每个坐标像素点的灰度            unit = 256.0 / length            txt += ascii_char[int(gray / unit)] #获取对应坐标的字符值        txt += '\n'    return  txt txt = convert(img)f = open("demo.txt","w")f.write(txt)            #存储到文件中f.close()

pillow还有很多对图片处理的强大作用,还没了解完,这里就不一一贴出来了。

https://www.jianshu.com/p/f03f7f52d465

此为总结链接,方便以后查看。

那么在实现了用字符去填充图片后,我们自然会想到,可不可以用图片去填充图片呢??

当然可以,这就是千图成像技术,用非常多图片拼成一个大图。

代码非常的短,其实核心思想是差不多的,只需要将字符填充换为图像填充即可。

Python

from PIL import Image import os import random def get_img(path="./img_v2/save/"): img_file_list = os.listdir(path) tmp = path+random.choice(img_file_list) return Image.open(tmp) if __name__ == '__main__': width,height = int(458*320/10), int(537*240/10) test_im = Image.new("RGB", (width,height), "#ffffff") peiqi_img = Image.open("a.jpg").convert("L") for i in range(0,width,100): for j in range(0,height,100): tmp_i,tmp_j = int(i/32),int(j/24) gray = peiqi_img.getpixel((tmp_i,tmp_j)) if gray < 230: test_im.paste(get_img(),(i,j)) test_im.save("tmp.jpg")

12345678910111213141516171819

from PIL import Imageimport osimport randomdef get_img(path="./img_v2/save/"):    img_file_list = os.listdir(path)    tmp = path+random.choice(img_file_list)    return Image.open(tmp)if __name__ == '__main__':    width,height = int(458*320/10), int(537*240/10)    test_im = Image.new("RGB", (width,height), "#ffffff")    peiqi_img = Image.open("a.jpg").convert("L")     for i in range(0,width,100):        for j in range(0,height,100):            tmp_i,tmp_j = int(i/32),int(j/24)            gray = peiqi_img.getpixel((tmp_i,tmp_j))            if gray < 230:                test_im.paste(get_img(),(i,j))    test_im.save("tmp.jpg")

若精度不够高,拼成的图片效果不好,则可以对图片进行裁剪处理:

Python

#把图片全部剪切为100*100格式存到img_v2/save目录下 循环时也以100为步长 这样会调整精度 readPath='./img_v2/img/' savePath='./img_v2/save/' files=os.listdir(readPath) n=0 for file in files: n+=1 imgPath=readPath+ "\\" + file img=cv2.imread(imgPath) img=cv2.resize(img,(100,100))#更改图片的大小 cv2.imwrite(savePath+ "\\"+file,img) print(n)#查看循环情况

123456789101112

#把图片全部剪切为100*100格式存到img_v2/save目录下 循环时也以100为步长 这样会调整精度readPath='./img_v2/img/'savePath='./img_v2/save/'files=os.listdir(readPath)n=0for file in files:    n+=1    imgPath=readPath+ "\\" + file    img=cv2.imread(imgPath)    img=cv2.resize(img,(100,100))#更改图片的大小    cv2.imwrite(savePath+ "\\"+file,img)    print(n)#查看循环情况

这里也用到了os库,os库是Python标准库,包含几百个函数,常用路径操作、进程管理、环境参数等几类。os.path子库以path为入口,用于操作和处理文件路径。关于os库的一些常用函数可以看这里

https://www.jianshu.com/p/2b12a065ea22

还用到了OpenCV库,OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库。它的常用函数看这里

https://www.cnblogs.com/lufengyu/p/11495148.html

总结

写的第一篇博客,技术干货真心不多,可以说是小白入门篇。在技术方面我知道了python作为超级语言的优势,但更多的是在心理方面上的感受。在写这些程序的时候,我完成了思维的转变,这个意义对我来说很大。做这些小程序,虽然小,但是给我的进步却很大。当你从知道它 ->了解它 -> 实现它 经过这三步转变后,你会发现有些东西其实也没有那么的神秘。有时候越学越发现自己的弱小,从而很容易不知疲倦的去学习它(突然想到人生苦短,我学python)。可以如果说不逼自己一把去试试,真的不知道代码原来可以这么精彩。。。

那是不是只有逼自己一把,才能发现世界原来那么精彩呢?

我已经准备好了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
微信公众号开放接口自定义收发消息
文档地址:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Explanation_of_interface_privileges.html
biaoblog.cn 个人博客
2025/05/21
1700
独立开发微信公众号服务的一次复盘
上篇文章主要分享了异步编程的一些经验。主要包括回调函数,发布订阅,Promise,async await以及yield关键字。
terrence386
2022/07/14
4610
独立开发微信公众号服务的一次复盘
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
因为微信消息的转发,需要服务器在外网环境下进行访问,而我们正常编写代码需要在本地环境,所以我们需要通过Natapp进行内网穿透(成本为每月9元)
Maynor
2023/09/26
6840
手把手做一个公众号GPT智能客服【二】实现微信公众号回复(订阅送源码!)
手把手教你如何微信公众号开发「建议收藏」
最近的话,发现微信开发其实也有很多挺有意思的地方,比如最近很火的一款游戏“跳一跳”,也让我如此着迷。。但是,今天我所要讲的并不是对于小程序的开发,而是要说一下,关于微信开发的另外一个内容,那就是微信公众号。。
全栈程序员站长
2022/09/25
3.6K0
手把手教你如何微信公众号开发「建议收藏」
微信公众号推送如何写代码
写微信公众号推送的代码需要用到微信公众平台提供的开发者文档和API接口。以下是一个示例代码,包含了获取用户信息和回复文本消息:
hide
2023/12/12
3390
微信公众号推送如何写代码
文章自动同步微信公众号实践
本文来自 zhiyi 的个人博客实践,可以通过开放能力将其他平台的文章同步到微信公众号上。 整体思路 微信官方提供了素材管理的 API,通过 API 可以很方便地进行同步。在使用 API 之前需要进行鉴权,所以需要先获取 access token。微信公众号中不允许出现外域图片,因此需要把文章里的图片全部使用微信的图片上传接口处理后替换。此外,微信公众号支持 HTML 标签但是只支持内联样式,所以必须把外联样式全部转换为内联样式。 所以,同步到微信公众号的操作,需要按照以下步骤: 使用公众号的 appid
用户1097444
2022/06/29
1.5K0
文章自动同步微信公众号实践
微信网页开发
套用《围城》里老学究的的一句开场白:"兄弟我刚入行的时候…“兄弟我是很不喜欢微信这样一款应用的——尽管我在2011年就已经是微信的注册用户。在我看来,第一个,能用qq达到的目的为什么还要微信?其次,凭什么一个开发要绑在一款微信里?但是,周边的人似乎在我毕业的前后通通用上了微信。
一粒小麦
2019/08/13
4.2K0
微信公众号开发基本流程
背景: 过年前后做了个微信公众号项目,已经过去一段时间了,抽空回忆总结下基本流程吧,不然很快估计自己就忘了。。
全栈程序员站长
2022/09/06
4K0
微信公众号开发基本流程
Java微信公众号开发(附源码!!!)
笔者最近在为一个艺考服务团队开发手机端的服务,由于开发app需要的时间较长,所以选择开发微信公众号。本人比较擅长Java开发,所以本文是基于Java语言的公众号开发。话不多说,直接进入正题。
全栈程序员站长
2022/08/29
7820
Java微信公众号开发(附源码!!!)
使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」
微信公众号网页开发第一步是验证服务器这一步是必不可少的。我是用的是liunx系统搭配宝塔面板,基于node.js+nginx进行开发的。
全栈程序员站长
2022/09/07
1.3K0
使用nodejs进行微信公众号网页开发(一)验证服务器「建议收藏」
PHP公众号开发给用户发微信消息提醒功能
最近做的一个项目,当有用户有资金到账或者成员变动时需要给他发一条微信消息提示。针对这个,开始想使用模板消息,但是刚注册的公众号申请消息模板需要几天时间申请,在时间不足下选择了使用客服消息接口,微信文档地址: https://mp.weixin.qq.com/wiki。
北桥苏
2024/05/29
3840
微信公众号推送消息笔记
根据业务需要,开发一个微信公众号的相关开发,根据相关开发和整理总结了一下相关的流程和需要,进行一些整理和总结分享给大家,最近都在加班和忙碌,博客已经很久未更新了,打气精神,再接再厉,申请、认证公众号的一系列流程就不在这里赘述了,主要进行的是技术的分享,要达到的效果如下图:
stark张宇
2024/07/23
3310
vue的hash路由微信授权方法
示例代码: klren0312/wechatVueHash (github.com)
治电小白菜
2021/12/14
2.8K1
使用云函数快速打造公众号自动回复机器人
想法 于上周五发现了一个有趣的仓库: co-wechat(https://github.com/node-webot/co-wechat)。突发奇想,我不要你觉得,我要我觉得,腾讯云云函数配合该库,理论上可以快速搭建一个微信公众号的自动回复机器人。所以就开始查查文档,开搞了。 开搞 步骤一 先用Tencent Serverless Toolkit for VS Code这个VS Code插件生成一个云函数。并根据该文档修改下template.yaml,配置API网关触发器。 去到函数的面板,点击上
腾讯云serverless团队
2019/08/30
4.2K5
使用云函数快速打造公众号自动回复机器人
【愚公系列】2022年09月 微信小程序-微信小程序实现网页一键登录功能
如果微信小程序要获取微信登录的用户信息,需要拿到code去后台换取用户信息,具体步骤又如下:
愚公搬代码
2022/10/05
1.7K0
微信公众号是html页面吗,微信公众号网页开发
如果有相关接口权限无法开启,推荐使用:微信公众平台-开发-开发者工具-公众平台测试帐号开发
全栈程序员站长
2022/09/06
14.5K0
微信公众号是html页面吗,微信公众号网页开发
微信公众号开发——2、微信网页开发
在公众号平台下,自定义菜单,添加菜单,并选择菜单内容跳转到指定页面地址即可(需认证后方可添加页面地址,个人账号暂不支持认证)。
全栈程序员站长
2022/09/01
7.8K0
Yii2.0实现微信公众号后台开发
1.用户授权接口:获取access_token、openid等;获取并保存用户资料到数据库
botkenni
2019/09/02
9880
基于koa框架写的通过code获取微信用户openid的Demo
github地址:https://github.com/xuedingmiaojun/koa-wx-auth-demo
薛定喵君
2020/05/25
1K0
用java开发微信公众号:公众号接入和access_token管理(二)
本文讲述如何通过Java代码实现微信公众号的自动回复功能,包括关键词回复,图文回复,以及自定义菜单。同时介绍了如何获取Access Token以及注意事项。
古时的风筝
2018/01/08
2.5K0
用java开发微信公众号:公众号接入和access_token管理(二)
推荐阅读
相关推荐
微信公众号开放接口自定义收发消息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档