• 从Wolframserver获取DC comics卡通人物数据


    背景知识

    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。

  • 相关阅读:
    【HDOJ】1811 Rank of Tetris
    【HDOJ】1518 Square
    日期类 Date
    RunTime
    System 系统类
    StringBuffer
    获取联系人列表的时候contact_id出现null的值
    String类
    object类
    eclipse使用的步骤
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5347266.html
Copyright © 2020-2023  润新知