前言

我们今天的任务很明确,我先系统梳理一下:

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="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>

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

到此这篇关于Python&Matlab实现炫酷的3D旋转图的文章就介绍到这了,更多相关Python Matlab3D旋转图内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Python&Matlab实现炫酷的3D旋转图的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift - 协议protocol

    1,Swift中协议类似于别的语言里的接口,协议里只做方法的声明,包括方法名、返回值、参数等信息,而没有具体的方法实现。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. Swift - 使用UIScrollView实现页面滚动切换

    UIScrollView提供了以页面为单位滚动显示各个子页面内容的功能,每次手指滑动后会滚动一屏的内容。要实现该功能,需要如下操作:1,将UIScrollView的pagingEnabled属性设置成true2,必须通过contentSize属性设置各个页面相加的宽度。比如iphone手机一屏宽度是320,如果有3个页面,则contentSize就需要设置为320*3=9603,最好将showsHorizontalScrollIndicator和showsverticalScrollIndicator设置

  6. 在 Cocoa 中实现 ICU 文本变换

    ICU库提供了一整套强大的文本变换功能,在处理用户输入、特别是当你的程序需要处理一些英语之外的语言或者非拉丁字符时非常有用。在Apple的平台中,字符串变换一直以来都是通过CoreFoundation的CFStringTranform函数来实现。输入变换结果HELLOWORLDLowerhelloworld仅转换元音字母为小写。拉丁到ASCII这一步会移除变音符以及会把ASCII码范围之外的字符和标点符号转换成ASCII中与之最为接近的版本。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@fox

  7. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  8. Swift根据日期字符串返回日期是星期几

    weekday}在这个版本的实现中,首先要知道timeIntervalSince1970是取当前日期和1970-01-010点的时间差,当天是星期四,因此根据时间差算星期几时需要加4;为了保证输入年份小于1970时仍然有效,也就是说interval以及days有可能为负数,因此模7取余后,又进行了加7和模7;最后,为了调整weekday按之前约定星期一从1开始编号,需要将计算的0值转换成7,于是有了最后一行的“returnweekday==0?7:weekday”。

  9. Swift3.0 关于reduce函数,知道这些就够了

    reduce方法把数组元素组合计算为一个值。在事例中Result和Element是Int,初始值是0,combine函数计算两个Int之和和计算改写成:Swift中操作符可用着函数,可简化成:reduce可能是高阶函数中最难理解的一个。需要注意的是combine函数的两参数类型不同,$0为计算结果类型,$1为数组元素类型。下面是reduce的两种用法。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部