目录
- 前言
- 1.Python爬取美女照片
- 1.1 留恋忘返的网址
- 1.2 Python代码
- 1.3 结果
- 2.Python实现
- 2.1 条件准备
- 2.2 运行展示
- 2.3 Python实现
- 3.Matlab实现
- 3.1 运行展示
- 3.2 Matlab代码
前言
我们今天的任务很明确,我先系统梳理一下:
1.先用Python爬取一波漂亮的美女照片;
2.然后Python中炫酷的代码实现;
3.最后用matlab伺候,得到相同的结果。
1.Python爬取美女照片
1.1 留恋忘返的网址
站长素材-分享综合设计素材的平台 (chinaz.com)
1.2 Python代码
#~~~~欢迎关注公众号:电力系统与算法之美~~~~~~~~~~~~·
#~~~~~~~~~导入相关库~~~~~~~~~~~~~~~~~~~~·
import urllib.request
from lxml import etree
#~~~~~~~~~1.请求对象的定制~~~~~~~~~~~~~~~~~
def create_request(page):
if (page == 1):
url = 'https://sc.chinaz.com/tag_tupian/YaZhouMeiNv.html'
else:
url = 'https://sc.chinaz.com/tag_tupian/yazhoumeinv_' + str(page) + '.html'
# print(url)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
request = urllib.request.Request(url=url, headers=headers)
return request
#~~~~~~~~~~~2.获取网页的源码~~~~~~~~~~~~~~~~~~~~~
def get_content(request):
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
return content
#~~~~~~~~~~~~~~~~~~~3.下载图片~~~~~~~~~~~~~~~~~~~~~~~~~~
def down_img(content):
# 下载文件格式:urllib.request.urlretrieve('图片地址','文件的名字')
tree = etree.HTML(content)
name_list = tree.xpath('//div[@id = "container"]//a/img/@alt')
# 一般涉及到图片的网站,都会进行懒加载,要把src换成src2(懒加载时,src会以src2出现)
src_list = tree.xpath('//div[@id = "container"]//a/img/@src2')
# print(len(name_list))
# print(len(src_list))
for i in range(len(name_list)):
name = name_list[i]
src = src_list[i]
url = 'https:' + src
url = url.replace('_s', '')
urllib.request.urlretrieve(url=url, filename='./meinv/' + name + '.jpg')
#~~~~~~~~~运行~~~~~~~~~~~~~~~
if __name__ == '__main__':
start_page = int(input('请输入起始页码:'))
end_page = int(input('请输入终止页码:'))
for page in range(start_page, end_page + 1):
#~~~~1.定制请求对象~~~~~
request = create_request(page)
#~~~~2.获取网页源码~~~~~
content = get_content(request)
#~~~~~3.解析源码并下载图片~~~
down_img(content)
1.3 结果

温馨提示:meinv这个文件夹是提前建立的。
2.Python实现
2.1 条件准备
由1中爬取的照片,我们就可以为接下来的事做准备啦。选取十二张照片,如图:

2.2 运行展示

运行出来比下面这个还炫酷:

2.3 Python实现
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS3制作3D图片立方体旋转特效</title> <link rel="stylesheet" href="https://www.freexyz.cn/dev/css/index.css" rel="external nofollow" > </head> <body> <!--/*外层最大容器*/--> <div class="wrap"> <!-- /*包裹所有元素的容器*/--> <div class="cube"> <!--前面图片 --> <div class="out_front"> <img src="https://www.freexyz.cn/dev/img/1.jpg" class="pic"> </div> <!--后面图片 --> <div class="out_back"> <img src="https://www.freexyz.cn/dev/img/2.jpg" class="pic"> </div> <!--左图片 --> <div class="out_left"> <img src="https://www.freexyz.cn/dev/img/3.jpg" class="pic"> </div> <!--右图片 --> <div class="out_right"> <img src="https://www.freexyz.cn/dev/img/4.jpg" class="pic"> </div> <!--上图片 --> <div class="out_top"> <img src="https://www.freexyz.cn/dev/img/5.jpg" class="pic"> </div> <!--下图片 --> <div class="out_bottom"> <img src="https://www.freexyz.cn/dev/img/6.jpg" class="pic"> </div> <!--小正方体 --> <span class="in_front"> <img src="https://www.freexyz.cn/dev/img/7.jpg" class="in_pic"> </span> <span class="in_back"> <img src="https://www.freexyz.cn/dev/img/8.jpg" class="in_pic"> </span> <span class="in_left"> <img src="https://www.freexyz.cn/dev/img/9.jpg" class="in_pic"> </span> <span class="in_right"> <img src="https://www.freexyz.cn/dev/img/10.jpg" class="in_pic"> </span> <span class="in_top"> <img src="https://www.freexyz.cn/dev/img/11.jpg" class="in_pic"> </span> <span class="in_bottom"> <img src="https://www.freexyz.cn/dev/img/12.jpg" class="in_pic"> </span> </div> </div> </body> </html>
3.Matlab实现
3.1 运行展示

动态视频:

3.2 Matlab代码
%====欢迎关注关注号:电力系统与算法之美
function wlz3d
path='.\meinv\';%文件夹名称
files=dir(fullfile(path,'*.jpg'));
picNum=size(files,1);
%% 遍历路径下每一幅图像
for i=1:picNum
fileName=strcat(path,files(i).name);
img=imread(fileName);
img=imresize(img,[120,120]);
imgSet{i}=img;
end
%% fig axes设置
fig=figure('units','pixels','position',[50 50 600 600],...
'Numbertitle','off','resize','off',...
'name','album3d','menubar','none');
ax=axes('parent',fig,'position',[-0.5 -0.5 2 2],...
'XLim', [-6 6],...
'YLim', [-6 6],...
'ZLim', [-6 6],...
'Visible','on',...
'XTick',[], ...
'YTick',[],...
'Color',[0 0 0],...
'DataAspectRatioMode','manual',...
'CameraPositionMode','manual');
hold(ax,'on')
ax.CameraPosition=[5 5 5];
%% 用于绘制图片的网格
[XMesh,YMesh]=meshgrid(linspace(-1,1,120),linspace(-1,1,120));
ZMesh=ones(120,120);
%% 绘制图片立方体
surfPic(1)=surf(XMesh,YMesh,ZMesh,'CData',imgSet{mod(0,picNum)+1},'EdgeColor','none','FaceColor','interp');
surfPic(2)=surf(XMesh,YMesh(end:-1:1,:),-ZMesh,'CData',imgSet{mod(1,picNum)+1},'EdgeColor','none','FaceColor','interp');
surfPic(3)=surf(ZMesh,XMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(2,picNum)+1},'EdgeColor','none','FaceColor','interp');
surfPic(4)=surf(XMesh,ZMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(3,picNum)+1},'EdgeColor','none','FaceColor','interp');
surfPic(5)=surf(-ZMesh,XMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(4,picNum)+1},'EdgeColor','none','FaceColor','interp');
surfPic(6)=surf(XMesh,-ZMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(5,picNum)+1},'EdgeColor','none','FaceColor','interp');
%% 依靠小立方体数据绘制中等立方体
for i=1:6
surfPicA(i)=surf(surfPic(i).XData.*1.5,surfPic(i).YData.*1.5,surfPic(i).ZData.*1.5,...
'CData',surfPic(i).CData,'EdgeColor','none','FaceColor','interp','FaceAlpha',0.7);
end
%% 用来调整放大比例的矩阵
resizeMat=[2 2 2.5;2 2 2.5;2.5 2 2;
2 2.5 2;2.5 2 2;2 2.5 2];
%% 最大图片绘制
% for i=1:6
% surfPicB(i)=surf(surfPic(i).XData.*resizeMat(i,1),...
% surfPic(i).YData.*resizeMat(i,2),...
% surfPic(i).ZData.*resizeMat(i,3),...
% 'CData',surfPic(i).CData,'EdgeColor',...
% 'none','FaceColor','interp','FaceAlpha',0.7);
% end
lastDis=300;
preDis=300;
set(fig,'WindowButtonMotionFcn',@move2center)
function move2center(~,~)
xy=get(fig,'CurrentPoint');
preDis=sqrt(sum((xy-[300,300]).^2));
end
fps=40;theta=0;
rotateTimer=timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @rotateCube);
start(rotateTimer)
function rotateCube(~,~)
theta=theta+0.02;
ax.CameraPosition=[cos(theta)*5*sqrt(2),sin(theta)*5*sqrt(2),5];
if (~all([preDis lastDis]<150))&&any([preDis lastDis]<150)
for ii=1:6
if preDis<150
surfPicA(ii).XData=surfPic(ii).XData.*resizeMat(ii,1);
surfPicA(ii).YData=surfPic(ii).YData.*resizeMat(ii,2);
surfPicA(ii).ZData=surfPic(ii).ZData.*resizeMat(ii,3);
else
surfPicA(ii).XData=surfPic(ii).XData.*1.5;
surfPicA(ii).YData=surfPic(ii).YData.*1.5;
surfPicA(ii).ZData=surfPic(ii).ZData.*1.5;
end
end
end
lastDis=preDis;
end
% 弃用方案:太卡
% set(fig,'WindowButtonMotionFcn',@move2center)
% function move2center(~,~)
% xy=get(fig,'CurrentPoint');
% dis=sum((xy-[300,300]).^2);
% for ii=1:6
% if dis<200
% surfPicA(ii).XData=surfPic(ii).XData.*resizeMat(ii,1);
% surfPicA(ii).YData=surfPic(ii).YData.*resizeMat(ii,2);
% surfPicA(ii).ZData=surfPic(ii).ZData.*resizeMat(ii,3);
% else
% surfPicA(ii).XData=surfPic(ii).XData;
% surfPicA(ii).YData=surfPic(ii).YData;
% surfPicA(ii).ZData=surfPic(ii).ZData;
% end
% end
%
%
%
% end
end
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)