(* Creating photomontage of all pictures *) (* Requires: montagepics - collection of pictures filemont - file for montage thsize = 50 or ... columns = 30 or ... ifRefreshMont = True - use to force refreshing Output: rows *) maintainMontage := Module[{dirmontage, filemontage, filesdel, mf, d0, nf, sth, cline, nomontage}, rows = Ceiling[Length[montagepics]/columns]; (* Temporary directory for executing montage *.jpg *) dirmontage = ToFileName[{dirtemp, "montage"}]; If[FileType[dirmontage] =!= Directory, CreateDirectory[dirmontage]]; filemontage = "montage.jpg"; If[FileType[dirmontage] =!= Directory, Print["Fatal error: temporary directory for using montage - ", dirmontage, " was not found and cannot be created. Exiting ..."]; Exit[]; ]; SetDirectory[dirmontage]; filesdel = FileNames[{RegularExpression["\\d{6,6}[.]jpg"], "montage*.jpg"}]; mf = Length[filesdel]; If[mf > 0, Print["maintainMontage: Deleting previously copied ", mf, " files: ", Short[filesdel, 2], " from temporary directory ", dirmontage]; DeleteFile /@ filesdel; ]; checkfile /@ montagepics; (* Deciding whether to update montage *) If[FileType[filemont] === File && !ifRefreshMont === True, d0 = AbsoluteTime[FileDate[filemont]]; If[And @@ ((AbsoluteTime[FileDate[#]] < d0)& /@ montagepics), Goto[nomontage]]; ]; sth = ToString[thsize]; Print["Creating photomontage from ", Length[montagepics], " pictures: ", Short[montagepics, 2], ". Reduced thumbnails: " <> sth <>"x" <> sth <> "."(* <> " Size " <> width <> "x" <> height *)]; nf = 0; Do[nf++; filecopy = ToString[PaddedForm[nf, 5, NumberPadding -> "0"]] <> ".jpg"; CopyFile[fileorig, filecopy], {fileorig, montagepics}]; cline = "montage -quality 80 -background grey -bordercolor grey -geometry " <> sth <> "x" <> sth <> "+1+1 -tile " <> ToString[columns] <> "x" <> ToString[rows] <> " \"*.jpg\" "<> filemontage; (* Print[cline]; *) (* Running command *) Run[cline]; If[FileType[filemont] === File, Print["Deleting previous montage file: ", filemont]; DeleteFile[filemont]; ]; CopyFile[filemontage, filemont]; Label[nomontage]; ResetDirectory[]; ];