背景知识

DC comics是美国时代华纳旗下DC娱乐下属的一个漫绘图书出版商。

超人、蝙蝠侠之类漫画的始作俑者。

在Wolfram的眼下为止3750个PopularCurves数据中(所有下载数据有2-3GB之巨!)。当中有248个图片专属于DC comics里的漫画角色。

由于248个数据图片信息小于250MB。easy处理。这篇博客介绍怎样下载这248个角色的包含图片在内的信息,尤其是显示当中的图片。

代码实现

预备条件

想要下载这些数据,首先要确保自己有一台能够正常连接到internet的电脑,电脑上安装有wolfram的经典产品Mathematica最新版10.1. 由于数据有数百兆之多,所以,请确保足够的网络带宽。考虑到图片数据处理的问题,您的电脑的内存不能太小。

废话少说,直接上代码吧。

下载原始图片数据

这里的代码下载DC Comics数据中自带的图片信息并显示。最后再把它们合并在一个GIF动画文件里。

ClearAll["Global`*"];
dcComics=Quiet@Check[EntityValue[EntityClass["PopularCurve","DCComics"],"Entities"],50];
While[NumberQ@doComics,dcComics=Quiet@Check[EntityValue[EntityClass["PopularCurve","DCComics"],"Entities"],50]];
nCharacters=(Dimensions@dcComics)[[1]] If[!ValueQ@dcImgList,dcImgList=ConstantArray[0,{nCharacters}]];
Do[dcImg=Quiet@Check[EntityValue[dcComics[[i]],"Image"],50];
While[NumberQ@dcImg,dcImg=Quiet@Check[EntityValue[dcComics[[i]],"Image"],50]];
dcImgLabel=Quiet@Check[EntityValue[dcComics[[i]],"Name"],50];
While[NumberQ@dcImgLabel,dcImgLabel=Quiet@Check[EntityValue[dcComics[[i]],"Name"],50]];
dcImgList[[i]]=Labeled@@{dcImg,ToString@i<>"."<>dcImgLabel};
Print@dcImgList[[i]],{i,1,nCharacters}];(*每下载一幅图片都显示它*) (*把所有图片导出到一个GIF动画中,*)
Export["dcComics.gif",dcImgList,"TransitionEffect"->Background,"TransparentColor"->White]

到此为止,得到的这个GIF往往须要用gifsicle或convert之类处理才干正常使用。我用gifsicle处理的时候用的是这种命令:

gifsicle dcComics.gif -d120 "#0-247" > final.gif

结果是这种:

下载图片的參数方程信息及其个性化绘制

默认的DC Comics的图片数据中都有一个“十”字形的坐标轴,非常难看。

鉴于每幅图片都有自己的參数方程和參数区间的信息,能够获取这些信息之后,自己画一个纯净版的出来。比方,第142号图片女记者、超人嫂Lois Lane,代码例如以下:

mCurve=142;(*获取第142幅图片信息并用參数曲线方式单独显示它*)
mhp=Quiet@Check[(EntityValue[dcComics[[#]],"Properties"])&@mCurve,50];
While[NumberQ@mhp,mhp=Quiet@Check[(EntityValue[dcComics[[#]],"Properties"])&@mCurve,50]];
mhe=Quiet@Check[EntityValue[dcComics[[mCurve]],mhp[[10]]][t],50];
While[NumberQ@mhe,mhe=Quiet@Check[EntityValue[dcComics[[mCurve]],mhp[[10]]][t],50]];
hdom=Quiet@Check[EntityValue[dcComics[[mCurve]],mhp[[6]]],50];
While[NumberQ@hdom,hdom=Quiet@Check[EntityValue[dcComics[[mCurve]],hp[[6]]],50]];
mlabel=Quiet@Check[EntityValue[dcComics[[mCurve]],"Name"],50];
While[NumberQ@mlabel,mlabel=Quiet@Check[EntityValue[dcComics[[mCurve]],"Name"],50]];
Print[Style[mlabel,Red]]; ParametricPlot[mhe,{t,hdom[[1]],hdom[[2]]},PlotPoints->1500,PlotStyle->{Blue,Thickness[.002]},Axes->False]

图片例如以下:

总结

主要解决的问题

主要学习了处理下载中的time out exception的办法。

可能的问题

假设不能连接到互联网或wolfram server故障,上面的下载用代码将无法正常工作。假设数据有更新。则实际的数据个数可能不是如今的248个。142号图片也可能不是Lois Lane。

从Wolframserver获取DC comics卡通人物数据的更多相关文章

  1. request获取请求头和请求数据

    package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.io.Pr ...

  2. 获取股票历史数据和当前数据的API

    关键字:股票,stock,API,接口 1.获取股票当前数据 新浪数据接口:http://hq.sinajs.cn/list={code}.{code}替换为股票代码,沪市股票代码加前缀sh,深市股票 ...

  3. Silverlight获取DataGrid选中的行数据

    注意触发的事件为:CurrentCellChanged后台代码: /// <summary> /// 获取datagrid当前选中的单元格数据 /// 如果绑定的数据源为实体的话默认选中的 ...

  4. Android中获取网页表单中的数据实现思路及代码

    在Android中获取网页里表单中的数据具体实现代码如下,感兴趣的各位可以参考过下哈,希望对大家有所帮助 MainActivity如下: 复制代码 代码如下: package cn.testjavas ...

  5. 怎样获取浏览器上次的会话数据(session)

    怎样获取浏览器上次的会话数据: 要知道上次会话session_id是多少? 让cookie保存的PHPSESSID的值不要浏览器一退出就被删除了? 所以我们要设置自己的session_id,不要系统自 ...

  6. Android中获取网页表单中的数据

    MainActivity如下: package cn.testjavascript; import java.util.StringTokenizer; import android.os.Bundl ...

  7. 项目中通过Sorlj获取索引库中的数据

    在开发项目中通过使用Solr所提供的Solrj(java客户端)获取索引库中的数据,这才是真正对项目起实质性作用的功能,提升平台的检索性能及检索结果的精确性 第一步,引入相关依赖的jar包 第二步,根 ...

  8. Python获取股票历史、实时数据与更新到数据库

    要做量化投资,数据是基础,正所谓"巧妇难为无米之炊" 在免费数据方面,各大网站的财经板块其实已提供相应的api,如新浪.雅虎.搜狐...可以通过urlopen相应格式的网址获取数据 ...

  9. 获取DataTable前几条数据

    #region 获取DataTable前几条数据 /// <summary> /// 获取DataTable前几条数据 /// </summary> /// <param ...

随机推荐

  1. asp.net MVC 应用程序的生命周期(上)

    首先我们知道http是一种无状态的请求,他的生命周期就是从客户端浏览器发出请求开始,到得到响应结束.那么MVC应用程序从发出请求到获得响应,都做了些什么呢? 本文我们会详细讨论MVC应用程序一个请求的 ...

  2. [Everyday Mathematics]20150117

    设 $f:\bbR^{n\times n}\to\bbR$ 适合 $$\bex f(cA+B)=cf(A)+f(B),\quad f(AB)=f(BA),\quad\forall\ c\in\bbR, ...

  3. CXF之jaxws:endpoint对spring bean的引用

    由于CXF对spring的无缝支持,CXF的使用,经常与spring捆绑在一起.随之而起的,自然是想在jaxws:endpoint中引用spring bean.在CXF提供的HelloWorld例子中 ...

  4. User Agent

    Android: Mozilla/5.0 (Linux; U; Android 2.3.5; zh-cn; MI-ONE Plus Build/GINGERBREAD) AppleWebKit/533 ...

  5. lightoj 1023

    题意:让你输出前N个大写字母的前K个排列,按字典序,很水,直接dfs. #include<cstdio> #include<string> #include<cstrin ...

  6. Watermarking 3D Polygonal Meshes in the Mesh Spectral Domain

    这周看了一篇Ryutarou Ohbuchi网格水印的论文,论文中提出在网格的频率域中加入水印.对于网格而言,没有如图像中的DCT等转换到频率域的变换,因此用什么量来模拟传统频率域中的系数,是很关键的 ...

  7. [LeetCode] Remove Element 分析

    Remove Element算是LeetCode的一道水题,不过这题也有多种做法,现就我所知的几种做一点讨论. 题目链接:https://leetcode.com/problems/remove-el ...

  8. Java-note-字符串转换为基本值

    Integer.parseInt() and Double.parse.double() 例: Integer.parseInt("123") 得到常量123

  9. BestCoder Round #85

    sum Accepts: 640 Submissions: 1744 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/13107 ...

  10. homework-08 C++课程课后思考与练习

    经过上次晚交作业导致没分以后 我再也不敢晚交作业了 今天就把这次作业先写了 homework Part 1 1. 理解C++变量的作用域和生命周期 a) 用少于10行代码演示你对局部变量的生命周期的理 ...