一、前言 一般的图像处理软件还真不那么好处理,尤其还要将不同大小、不同格式的图像文件一次性拼接为一个长图像还非常复杂!那么有什么好的办法一键生成没有呢? 有,下面我们就借助数学软件来编制一个小程序,实现将一个文件夹中指定的不同格式的图像文件,以及指定文件夹中及其所有的子文件中指定格式图像文件,不管他们的大小如何,全部连接成一个长图,并根据指定的位置和文件名及图像格式保存下来。 二、实现环境与程序说明 实现软件:Mathematica数学软件 表达式及注释说明: (*level为设置合并子文件夹的层数,1表示只合并当前文件夹下的图像文件*) PCTimage[ext_ _]:= Module[{imagelist,extlist={ext},toutfile,outimage}, (*对输入的文件后缀名,如jpg,png,...用逗号隔开的后缀名列表合并成{"*.jpg","*.png",...}*) extlist=StringJoin["*.",ToString[#]]&/@extlist; (*获取指定格式的图像文件绝对路径与文件名列表*) imagelist=FileNames[extlist,File[SystemDialogInput["Directory"]]]; If[imagelist=={},Return["对不起,您选择的文件夹下没有指定类型的图像文件!"]]; (*导入所有图像*) imagelist=Import[#]&/@imagelist; (*让所有图像中一致化维度、数据类型、色彩空间等属性*) imagelist=ConformImages[imagelist,{Min,Min}]; (*按列拼接图像,即上下拼接为长图,如果不执行下面语句则横向拼接*) outimage=ImageAssemble[Subsets[imagelist,{1}]]; (*打开另存为对话框,选择保存长图目标文件夹和文件名*) toutfile=SystemDialogInput["FileSave",{FileNameJoin[{$UserDocumentsDirectory,StringJoin[ToString[#]&/@Take[DateList[],5]]}],{"PNG格式图像文件(*.png)"->{"*.png"},"JPG图像文件(*.jpg)"->{"*.jpg"},"BMP图像文件(*.bmp)"->{"*.bmp"},"GIF图像文件(*.gif)"->{"*.gif"}}},WindowTitle->"设置输出长图文件名"]; (*执行保存操作*) Export[toutfile,outimage]; (*打开保存长图文件的文件夹*) SystemOpen[DirectoryName[AbsoluteFileName[toutfile]]]; (*在Mathematica中显示长图输出结果*) Return[outimage]; ] 输入完成后,按下【Shift】+【Enter】间执行以上表达式(可以复制以上表达式直接到Mathematica软件的笔记本中执行即可),在Mathematica中定义函数PCTimage[]. 三、生成方式 在Mathematica中执行函数PCTimage[png,jpg],函数的参数为图形文件的后缀名,可以只输入一个,也可以输入由逗号隔开的多个!执行后会弹出一个对话框,选择保存有图像的文件夹,Mathematica处理完成后,会弹出一个另存为对话框,选择图像文件保存文件,默认文件名为当前的时间命名的文件。保存后,会自动打开保存长图文件的文件夹,并在Mathematica中显示长图效果。具体操作步骤和效果可以浏览一下后面视频。 【注】如果在FileNames最后再加参数Infinity,则会将选择文件夹下及所有层级的子文件夹中指定格式的图像文件连接成一个长图。将ConformImages的{Min,Min}参数改成{Max,Max}则将所有图像的大小改成图像中最大的宽度和高度连接所有图像,也可以直接指定高度与宽度,比如{600,800}。 数学实验与数学软件参见:数学实验视频教学 |
|