本篇内容主要讲解“Python和Matlab怎么实现炫酷的3D旋转图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python和Matlab怎么实现炫酷的3D旋转图”吧!
站长素材-分享综合设计素材的平台 (chinaz.com)
#~~~~欢迎关注公众号:电力系统与算法之美~~~~~~~~~~~~· #~~~~~~~~~导入相关库~~~~~~~~~~~~~~~~~~~~· 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)
温馨提示:meinv这个文件夹是提前建立的。
由1中爬取的照片,我们就可以为接下来的事做准备啦。选取十二张照片,如图:
运行出来比下面这个还炫酷:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS3制作3D图片立方体旋转特效</title> <link rel="stylesheet" href="css/index.css" rel="external nofollow" > </head> <body> <!--/*外层最大容器*/--> <div class="wrap"> <!-- /*包裹所有元素的容器*/--> <div class="cube"> <!--前面图片 --> <div class="out_front"> <img src="img/1.jpg" class="pic"> </div> <!--后面图片 --> <div class="out_back"> <img src="img/2.jpg" class="pic"> </div> <!--左图片 --> <div class="out_left"> <img src="img/3.jpg" class="pic"> </div> <!--右图片 --> <div class="out_right"> <img src="img/4.jpg" class="pic"> </div> <!--上图片 --> <div class="out_top"> <img src="img/5.jpg" class="pic"> </div> <!--下图片 --> <div class="out_bottom"> <img src="img/6.jpg" class="pic"> </div> <!--小正方体 --> <span class="in_front"> <img src="img/7.jpg" class="in_pic"> </span> <span class="in_back"> <img src="img/8.jpg" class="in_pic"> </span> <span class="in_left"> <img src="img/9.jpg" class="in_pic"> </span> <span class="in_right"> <img src="img/10.jpg" class="in_pic"> </span> <span class="in_top"> <img src="img/11.jpg" class="in_pic"> </span> <span class="in_bottom"> <img src="img/12.jpg" class="in_pic"> </span> </div> </div> </body> </html>
动态视频:
%====欢迎关注关注号:电力系统与算法之美 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
到此,相信大家对“Python和Matlab怎么实现炫酷的3D旋转图”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。