(* Creating photomontage of group of pictures *) (* Requires: set - collection of pictures like {{"2016", "1988", "02"}, {"2016", "1988", "03"}} 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, montagepics}, montagepics = Table[{year, roll, pic} = pict; ToFileName[{dir00, "pictures", "archives", "compress", year, roll, "jpeg"}, pic <> "q.jpg"], {pict, set}]; checkfile /@ montagepics; 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 grey75 -bordercolor grey75 -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[]; ]; (* No longer used *) maintainMontage90 := Module[{dirmontage, filemontage, filesdel, mf, d0, nf, sth, cline, nomontage, montagepics}, montagepics = Table[{year, roll, pic} = pict; ToFileName[{dir00, "pictures", "archives", "compress", year, roll, "jpeg"}, pic <> "q.jpg"], {pict, set}]; checkfile /@ montagepics; 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 grey90 -bordercolor grey90 -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[]; ];