过去几个月练习总结了python的基础知识(基础语法),大概熟悉了django框架(结构运行),接下来准备学习python的第三方类库比如数学二维图形和图像处理等。接下来要总结的就是二维图形的生成比如线状图,图像(片)处理比如剪裁上色等;总结的不能面面俱到,列出几个主要的操作,希望大家多多指点。代码是在django框架里写的,本地访问端口是8000,路由是/user和/pic。
调试操作流程:
1.编写好代码
2.终端执行命令: python manage.py runserver 0.0.0.0:8000
3.浏览器里输入: http://127.0.0.1:8000/user
首先上代码和效果图:需要先安装第三方类库
from django.shortcuts import render
from django.http import HttpResponse # 数据返回到页面展示
import numpy as np # python -m pip install numpy 安装第三方类库命令
from numpy.random import randn
import matplotlib.pyplot as pt
import matplotlib.mlab as mlab
import mpmath as mp
# Create your views here.
def user(request):
# 数据输出页面并终止(类似php echo ‘XX’;die;)
return HttpResponse(u'
欢迎学习python')
x = np.arange(0, 360) #array([0, 1, 2, ...180, 359]) 数据对象 类似遍历循环
y = np.sin(x * np.pi / 180) #np.pi = 3.14
pt.plot(x, y) #绘制曲线
pt.xlim(0, 360) # X轴限制区间
pt.ylim(-1.2, 1.2) # Y轴限制区间
pt.title("SIN function")
pt.show()
x = np.arange(0, 360)
y = np.sin(x * np.pi / 180)
z = np.cos(x * np.pi / 180)
pt.plot(x, y, color='blue')
pt.plot(x, z, color='red')
pt.xlim(0, 360)
pt.ylim(-1.2, 1.2)
pt.title("SIN & COS function")
pt.show(
mp.plot(lambda x: x * x, [-10, 10]) #python语法里 lambda 快速定义匿名函数
# 柱状图------------
X = [0, 1, 2, 3, 4, 5] #定义X轴区间
Y = [222, 42, 455, 664, 454, 334] #Y轴数据
fig = pt.figure() #创建图表
#x X轴左边界 Y轴方向 0.4柱宽
pt.bar(X, Y, 0.4, color="green")
pt.xlabel("X-axis") # x轴标识
pt.ylabel("Y-axis")
pt.title("data bar chart")
pt.show()
names = ['5', '10', '15', '20', '25'] #界定X轴单位和间距
x = range(len(names))
y = [0.855, 0.84, 0.835, 0.815, 0.81]
y1 = [0.86, 0.85, 0.853, 0.849, 0.83]
# pl.xlim(-1, 11) # 限定横轴的范围
# pl.ylim(-1, 110) # 限定纵轴的范围
pt.plot(x, y, marker='o', mec='r', mfc='w', label=u'y=x^2') #绘制线条
pt.plot(x, y1, marker='*', ms=10, label=u'y=x^3')
pt.legend() # 让图例生效
pt.xticks(x, names, rotation=45) #刻度:刻标 刻度标签
pt.margins(0) #类似css里的边距
pt.subplots_adjust(bottom=0.15) #图片中子图的底部边距
pt.xlabel(u"time(s)X-line") # X轴标签
pt.ylabel("RMSE") # Y轴标签
pt.title("A simple plot") # 标题
pt.show()
# 线状图(绘制1条折线 1条)-----------------
pt.style.use('ggplot')
# 输入Y1值,定义X1的范围
y1 = [0.8, 0.4, 0.2, 0.1, 0.05, 0.025, 0.0125, 0.00625, 0.0031, 0.0016]
x1 = range(0, 10)
fig = pt.figure()
ax1 = fig.add_subplot(1, 1, 1)
# 每条折线都可以通过选项进行设置,使用不同的数据点类型、颜色和线型
ax1.plot(x1, y1, marker=r'o', color=u'blue', linestyle='-', label='Blue Solid')
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
# ax1.set_title('Line Plots: Markers, Colors, and Linestyles')
# 横坐标命名
pt.xlabel('Time')
# 纵坐标命名
pt.ylabel('Trust Value')
# loc='best' 指示 matplotlib 根据图中的空白部分将图例
# 放在最合适的位置。或者,你也可以使用这个参数为图例指定一个具体位置
pt.legend(loc='best')
pt.savefig('line_plot.png', dpi=400, bbox_inches='tight')
pt.show()
def pic(request):
# 图像处理--Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内。如open、save、conver、show…等功能。
# convert()函数,用于不同模式图像之间的转换。PIL中有九种不同模式,分别为1,L,P,
from PIL import Image ##调用库
im = Image.open("E:/beautygirl.jpg") #文件存在的路径
#im.show() # 调用系统图片查看器,打开图片
im.save("E:/beautygirl.png") ## 将"E:\beautygirl.jpg"保存为"E:\beautygirl.png"
im = Image.open("E:/beautygirl.png") ##打开新的png图片
print(im.format, im.size, im.mode)
# 图片变成灰色-------------
rgb2xyz = (0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0)
new_im = im.convert("L", rgb2xyz)
new_im.show()
# 左边是原图,有边是变灰图
box = (300, 300, 700, 700) ##确定拷贝区域大小
region = im.crop(box) ## 将im表示的图片对象拷贝到region中,大小为box
region.show()
#Draft类 配置图像文件加载器,使得返回一个与给定的模式和尺寸尽可能匹配的图像的版本
from PIL import Image ##调用库
im = Image.open("E:/beautygirl.jpg") #文件存在的路径
#print(im.size, im.mode)
new_im = im.draft("L", (200, 200)) #Draft类 返回一个与给定的模式和尺寸尽可能匹配的图像的版本
print(new_im.size, new_im.mode)
new_im.show()
#Rotate类 返回一个按照给定角度顺时钟围绕图像中心旋转后的图像拷贝。变量filter是NEAREST、BILINEAR或者BICUBIC之一。如果省略该变量,或者图像模式为“1”或者“P”,则默认为NEAREST。变量expand,如果为true,表示输出图像足够大,可以装载旋转后的图像。如果为false或者缺省,则输出图像与输入图像尺寸一样大。
from PIL import Image ##调用库
im = Image.open("E:/beautygirl.jpg") #文件存在的路径
im_45 = im.rotate(45)
im_30 = im.rotate(30, Image.NEAREST, 1)
print(im_45.size, im_30.size)
im_45.show()
im_30.show()
#Transform类,使用给定的尺寸生成一张新的图像,与原图有相同的模式,使用给定的转换方式将原图数据拷贝到新的图像中。在当前的PIL版本中,参数method为EXTENT(裁剪出一个矩形区域),AFFINE(仿射变换),QUAD(将正方形转换为矩形),MESH(一个操作映射多个正方形)或者PERSPECTIVE。变量filter定义了对原始图像中像素的滤波器。在当前的版本中,变量filter为NEAREST、BILINEAR、BICUBIC或者ANTIALIAS之一
print(im.size)
imtra = im.transform((200, 200), Image.EXTENT, (100, 100, 500, 500))
print(imtra.size)
imtra.show()
#输入图像的一个四边形(通过四个角定义的区域)映射到给定尺寸的长方形。变量data是一个8元组(x0,y0,x1,y1,x2,y2,x3,y3),它包括源四边形的左上,左下,右下和右上四个角。
print(im.size)
imtra = im.transform((200, 200), Image.QUAD, (0, 0, 0, 500, 600, 500, 600, 0)) #00是原点 0,500是左上角坐标 600,500是右上角坐标 600,0右下角坐标
print(imtra.size)
imtra.show()
上述代码是借鉴网上专业技术博客,实际动手操作完成;
python的第三方类库还有很多就这里就简单列举出几个常用的,还希望大家多多指点
--------------------------------谢谢---------------------------------