diff --git a/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/.htaccess b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/.htaccess new file mode 100644 index 0000000..2105dd1 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/.htaccess @@ -0,0 +1,14 @@ +RewriteEngine on +RewriteRule ^photoalben/(.*) http://cwsvjudo\.bplaced\.net/photoalben/$1 +RewriteRule ^ressourcen/(.*)$ http://cwsvjudo\.bplaced\.net/ressourcen/$1 +RewriteRule ^/ressourcen/(.*)$ http://cwsvjudo\.bplaced\.net/ressourcen/$1 + +RewriteCond %{HTTP_HOST} cwsvjudo.bplaced.net +RewriteRule ^news$ news\.php [L] +RewriteCond %{HTTP_HOST} cwsvjudo.bplaced.net +RewriteRule ^news/([0-9]+)$ news\.php?newsId=$1 + +RewriteCond %{HTTP_HOST} amp.cwsvjudo.bplaced.net +RewriteRule ^news$ news\.php [L] +RewriteCond %{HTTP_HOST} amp.cwsvjudo.bplaced.net +RewriteRule ^news/([0-9]+)$ news\.php?newsId=$1 [L] diff --git a/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/config.inc.php b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/config.inc.php new file mode 100644 index 0000000..16ec268 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/config.inc.php @@ -0,0 +1,20 @@ + diff --git a/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/css/cwsvJudoAmp.css b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/css/cwsvJudoAmp.css new file mode 100644 index 0000000..451e014 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/css/cwsvJudoAmp.css @@ -0,0 +1,233 @@ +/* +@font-face { + font-family: Orbitron-Medium; + src: url(/ressourcen/fonts/Orbitron-Medium.otf); +} +*/ +html{ + background: #FFAE00; + box-sizing: border-box; +} +*, ::before, ::after { + box-sizing: inherit; +} + +body{ + font-size: 4.5vmin; + font-family: arial, helvetica, sans-serif; + background: #FFAE00; +} + + +.newsTable{ + border: solid 1px #000000; + width:100%; + padding: 1%; +} + +.newsTableHeader{ + background: #FF8100; +} +.newsTableFooter{ + clear: both; + background: #FF8100; +} + +.bigPicture{ + width: 100%; + height: auto; +} + +.centeredText{ + text-align: center; +} + +.orbitronFont{ + font-family: "Orbitron-Medium", Impact, Charcoal, sans-serif; + padding-top: .16em; +} + +.Inhaltsverzeichnis{ + padding: 1%; + width: 100%; + background-color: + #FF8100; + font-variant: + small-caps; + font-size: + larger; + font-weight: + bolder; +} +.Inhaltsverzeichnis a{ + color: inherit; +} +.Inhaltsverzeichnis div a:hover{ + text-decoration: + none; + color: + #993300; +} + +.navButton{ + border-color: white; + border-style: outset; + border-radius: 1em; + text-align: center; + text-decoration: none; + cursor: pointer; + display: inline-block; + padding-left: .5em; + padding-right: .5em; +} + +.messageBox{ + width: 100%; + border:solid 1px #000000; + background-color:#FF8100; + font-size:smaller; +} + +.fullWidth{ + width:100%; +} + +.noMargin{ + margin: 0; +} + +.rightFloat{ + float:right; +} + +.leftFloat{ + float:left; +} + +.clearBoth{ + clear: both; +} + +/*--- + * Formatierung der News in Amp + */ +.ampNewsBox{ + clear: both; + border: solid 1px #000000; + width:100%; + padding: 1%; +} +.ampNewsBoxHeader{ + background: #FF8100; +} +.ampNewsBoxFooter{ + clear: both; + background: #FF8100; +} +/*--- + * Formatierung der subNav in Amp + */ +.ampSubNav{ + display: flex; + justify-content: space-between; +} + +/*--- + * touchable Links +*/ +.touchLink{ + display: inline-block; + padding: 0.25em 0 0.25em 0; + margin: 0.25em 0 0.25em 0; + background-color: #FF8100; + border-radius: .5em; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +/*--- + * Eine kleine NachrichtenBox + */ +.messageBox{ + width: 100%; + border:solid 1px #000000; + background-color:#FF8100; + font-size:smaller; +} + +/* + * Unterauswahl-Navigationsleiste + */ + +/* der SubNavContainer*/ +.subNav{ + display: flex; +/* flex-direction: column;*/ + align-items: stretch; + justify-content: space-between; +} +.subNav a{ + color: inherit; +} +.subNavElement{ + /*width: 100%;*/ + background: #FF8100; + padding-top:.125em; + padding-left:.125em; + padding-right:.125em; + border-style: outset; + border-radius: 1em; + font-size: 1.125em; + text-decoration: none; + flex-basis: 20%; + border-style: outset; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} +.subNavElementIcon{ + text-align: center; + max-width: 2.5em; + height: auto; + padding: .125em; +} +.subNavElementCaption{ + display: none; +} + +.activeNav { + border-color: #A80101; + border-style: inset; +} +.pngAddress{ + width: 20em; + height: auto; + vertical-align: middle; +} + + +/* + * Tabelle mit den GalerieLinks +*/ +.galTable{ + width: 100%; +} +.galTable tr, th, td { + width: auto; + vertical-align: middle; +} + +.galTable tr:nth-child(odd){ + background-color: #FF8100; +} + +.galTable tr td img{ + display: inline; + vertical-align: middle; +} + +.galTable tr td a img{ + display: inline; + vertical-align: middle; +} + diff --git a/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/cwsvJudo.ampTemplate.inc.php b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/cwsvJudo.ampTemplate.inc.php new file mode 100644 index 0000000..37e3a13 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/backup/ampPages-backup-2018-06-11-06-49/cwsvJudo.ampTemplate.inc.php @@ -0,0 +1,107 @@ + + + + +
-TEMPLATE; -$chCounter_page_title = "Photoalbum ".$wkName; -$chCounter_visible=1; include( $_SERVER['DOCUMENT_ROOT'].'/expCounter/counter.php');?> - - - diff --git a/homepage/redesign2018/markdownExperiment/sitemap.xml b/homepage/redesign2018/markdownExperiment/sitemap.xml new file mode 100644 index 0000000..e5c9672 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/sitemap.xml @@ -0,0 +1,27 @@ + + + + + http://cwsvjudo.bplaced.net/ + + + http://cwsvjudo.bplaced.net/galerien + + + http://cwsvjudo.bplaced.net/wkKalender + + + http://cwsvjudo.bplaced.net/trainingszeiten + + + http://cwsvjudo.bplaced.net/kontakt + + + http://cwsvjudo.bplaced.net/JudoWiki + + diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9 b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9 index 224d1af..2511401 100644 --- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9 +++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vp9 @@ -83,11 +83,11 @@ videos/webm/%.webm: videos/aufnahmen/mögel/%.MP4 -an \ -f webm \ $@ - curl \ - --upload-file $@ \ - --user cwsvjudo:Dee4oquu \ - ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ - --ftp-create-dirs +# curl \ +# --upload-file $@ \ +# --user cwsvjudo:Dee4oquu \ +# ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ +# --ftp-create-dirs curl \ --upload-file $@ \ --user cwsvjudo:***REMOVED*** \ @@ -118,11 +118,11 @@ videos/webm/%.webm: videos/aufnahmen/moegel/%.MP4 -an \ -f webm \ $@ - curl \ - --upload-file $@ \ - --user cwsvjudo:Dee4oquu \ - ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ - --ftp-create-dirs +# curl \ +# --upload-file $@ \ +# --user cwsvjudo:Dee4oquu \ +# ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ +# --ftp-create-dirs curl \ --upload-file $@ \ --user cwsvjudo:***REMOVED*** \ @@ -163,11 +163,11 @@ videos/webm/%.webm: videos/aufnahmen/helko/%.mp4 -an \ -f webm \ $@ - curl \ - --upload-file $@ \ - --user cwsvjudo:Dee4oquu \ - ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ - --ftp-create-dirs +# curl \ +# --upload-file $@ \ +# --user cwsvjudo:Dee4oquu \ +# ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@) \ +# --ftp-create-dirs curl \ --upload-file $@ \ --user cwsvjudo:***REMOVED*** \ @@ -198,11 +198,11 @@ videos/webm/%.webm: videos/aufnahmen/papaRomy/%.mp4 -an \ -f webm \ $@ - curl \ - --upload-file $@ \ - --user cwsvjudo:Dee4oquu \ - "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ - --ftp-create-dirs +# curl \ +# --upload-file $@ \ +# --user cwsvjudo:Dee4oquu \ +# "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ +# --ftp-create-dirs curl \ --upload-file $@ \ --user cwsvjudo:***REMOVED*** \ @@ -233,11 +233,11 @@ videos/webm/%.webm: videos/aufnahmen/papaRomy/%.webm -an \ -f webm \ $@ - curl \ - --upload-file $@ \ - --user cwsvjudo:Dee4oquu \ - "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ - --ftp-create-dirs +# curl \ +# --upload-file $@ \ +# --user cwsvjudo:Dee4oquu \ +# "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ +# --ftp-create-dirs curl \ --upload-file $@ \ --user cwsvjudo:***REMOVED*** \ @@ -268,11 +268,11 @@ videos/webm/%.webm: videos/aufnahmen/elly/%.mp4 -an \ -f webm \ "$@" - curl \ - --upload-file "$@" \ - --user cwsvjudo:Dee4oquu \ - "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ - --ftp-create-dirs +# curl \ +# --upload-file "$@" \ +# --user cwsvjudo:Dee4oquu \ +# "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ +# --ftp-create-dirs curl \ --upload-file "$@" \ --user cwsvjudo:***REMOVED*** \ @@ -282,11 +282,11 @@ videos/webm/%.webm: videos/aufnahmen/elly/%.mp4 videos/thumbnails/%.jpg: videos/webm/%.webm mkdir -p videos/thumbnails -ffmpeg -i "$^" -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf fps=fps=1/600 "$@" - curl \ - --upload-file "$@" \ - --user cwsvjudo:Dee4oquu \ - "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ - --ftp-create-dirs +# curl \ +# --upload-file "$@" \ +# --user cwsvjudo:Dee4oquu \ +# "ftp://cwsvjudo.square7.net/videoalben/videoalben.2018/$(VID_GAL_DIR)/$(patsubst videos/%,%,$@)" \ +# --ftp-create-dirs curl \ --upload-file "$@" \ --user cwsvjudo:***REMOVED*** \ diff --git a/homepage/redesign2018/markdownExperiment/src/tools/config.inc.php b/homepage/redesign2018/markdownExperiment/src/tools/config.inc.php new file mode 100644 index 0000000..b13a88d --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/config.inc.php @@ -0,0 +1,4 @@ + diff --git a/homepage/redesign2018/markdownExperiment/src/tools/index.php b/homepage/redesign2018/markdownExperiment/src/tools/index.php new file mode 100644 index 0000000..b9813ff --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/index.php @@ -0,0 +1,7 @@ +" : $wkName; + + include_once( $_SERVER['DOCUMENT_ROOT']."/ressourcen/phpLib/videoGallery/videoGallery.tmpl.php" ); +?> diff --git a/homepage/redesign2018/markdownExperiment/src/tools/indexHier.php b/homepage/redesign2018/markdownExperiment/src/tools/indexHier.php new file mode 100644 index 0000000..b9813ff --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/indexHier.php @@ -0,0 +1,7 @@ +" : $wkName; + + include_once( $_SERVER['DOCUMENT_ROOT']."/ressourcen/phpLib/videoGallery/videoGallery.tmpl.php" ); +?> diff --git a/homepage/redesign2018/markdownExperiment/src/tools/indexInArbeit.php b/homepage/redesign2018/markdownExperiment/src/tools/indexInArbeit.php new file mode 100644 index 0000000..1b5bbb0 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/indexInArbeit.php @@ -0,0 +1,13 @@ + + + + + In Arbeit + + + Die Videos des Wettkampfes sind momentan noch in Vorbereitung. Einfach später noch mal probieren. + + + diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/Makefile.mkGalGen b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/Makefile.mkGalGen new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/Makefile.mkGalGen @@ -0,0 +1 @@ + diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/ReadMe.md b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/ReadMe.md new file mode 100644 index 0000000..647ab16 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/ReadMe.md @@ -0,0 +1,16 @@ +# mkGalGen + +Erstellen einer htmlGalerie + + +Ausgangspunkt: + +- Verzeichnisse mit Bildern +- Konfigurationsdatei für das Album mit + - Liste mit Bildern mit + - dem Dateinamen + - selectMarker (evtl sollen nicht alle Bilder verwendet werden) + - Bearbeitungsflags wie + - Drehung des Bildes + - Name des Albums/der Galerie + diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/createImageList.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/createImageList.py new file mode 100644 index 0000000..553b713 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/createImageList.py @@ -0,0 +1,49 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# sortierer.py + +import sys, os, exifread, datetime + +picDirs = []; + +if len(sys.argv) <= 1: + picDirs = ["."]; +else: + for arg in sys.argv[1:]: + picDirs += [arg]; + +#picDirs = { +# "/home/marko/keeper/judo/bilder/bilder.2016/2016-10-23_OttoGoshiLiga+HallCategoryIII2016/mögel", +# "/home/marko/keeper/judo/bilder/bilder.2016/2016-10-23_OttoGoshiLiga+HallCategoryIII2016/olympus/denoised", +# "/home/marko/keeper/judo/bilder/bilder.2016/2016-12-21_Jahrendefeier/olymp/denoised", +#} + +print("Reading Filenames") +picFilesData = [] +for picDir in picDirs: + for (dirPath, dirnames, fileNames) in os.walk(picDir): + for fileName in fileNames: + fullFilename = os.path.join(dirPath, fileName) + fileHandle = open(fullFilename, 'rb') + exifTag = exifread.process_file(fileHandle, stop_tag='EXIF DateTimeOriginal', details=False) + + picFileDate = {} + picFileDate['filename'] = fullFilename + picFileDate['exifDate'] = str( exifTag['EXIF DateTimeOriginal'] ) + picFileDate['selected'] = True + + fileHandle.close() + + picFilesData.append( picFileDate ) + break + +picFilesDataSorted = sorted(picFilesData, key=lambda pic: pic['exifDate']) + +outputString = picFilesDataSorted[0]['filename'] +for pic in picFilesDataSorted[1:]: + outputString += ", " + pic['filename'] +# print pic['filename'] +# print pic['exifDate'] +# print pic['selected'] + +print outputString diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListCreator.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListCreator.py new file mode 100644 index 0000000..6b49b1c --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListCreator.py @@ -0,0 +1,70 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +### +# Modulimporte +### + +import sys, os, exifread, datetime +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +#import Tkinter +import tkinter +#from PIL import Image, ImageTk +#import image, imageTk + +import json + +### +# Funktionsdefinitionen +### + +def getJpgListFromDirectory( jpgDirName ): + jpgListe = list() + + # @todo Werden hier Unterverzeichnisse mit durchsucht? Das 'walk' klingt so! + for (dirPath, dirNames, fileNames) in os.walk(jpgDirName): + #print( dirPath ) + #print( dirNames ) + #print( fileNames ) + for fileName in fileNames: + fullFilename = os.path.join(dirPath, fileName) + fileHandle = open(fullFilename, 'rb') + exifTag = exifread.process_file(fileHandle, stop_tag='EXIF DateTimeOriginal', details=False) + + picFileDate = {} + picFileDate['filename'] = fullFilename + #print(str(exifTag)) + picFileDate['exifDate'] = str( exifTag.get('EXIF DateTimeOriginal', None ) ) + picFileDate['selected'] = True + picFileDate['toRotate'] = 0 + + fileHandle.close() + + #print( picFileDate ) + jpgListe.append( picFileDate ) + break + return jpgListe + +### +# Main +### + +# Argumente parsen +parser = argparse.ArgumentParser(description='Eine jpgList erstellen') +parser.add_argument('jpgFolder', metavar='jpgFolder', nargs='?', default='.', help='ein Verzeichnis mit jpgDateien') +parser.add_argument('--jsonOutFile', default="data.json") +argv = parser.parse_args() + +#print( argv.jpgFolder ) +#print( getJpgListFromDirectory(argv.jpgFolder) ) + +with open(argv.jsonOutFile, 'w') as fp: + json.dump(getJpgListFromDirectory(argv.jpgFolder), fp, indent=4) diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListLoader.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListLoader.py new file mode 100644 index 0000000..92fcdf7 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgListLoader.py @@ -0,0 +1,47 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +### +# Modulimporte +### + +import sys, os, exifread, datetime +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +#import Tkinter +#import tkinter +#from PIL import Image, ImageTk +#import image, imageTk + +import json + +### +# Funktionsdefinitionen +### + + +### +# Main +### + +# Argumente parsen +parser = argparse.ArgumentParser(description='Eine jpgList erstellen') +parser.add_argument('jsonFileName', metavar='jsonFileName', nargs='?', default='.', help='json-Datei') +#parser.add_argument('--jsonOutFile', default="data.json") +argv = parser.parse_args() + +jpgList = [] + +with open(argv.jsonFileName) as json_data: + jpgList = json.load(json_data) + +for entry in jpgList: + print(entry['filename']) + diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgSelector.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgSelector.py new file mode 100644 index 0000000..4250e22 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jpgSelector.py @@ -0,0 +1,197 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +import sys +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +import os, exifread, datetime + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +# json IO +import json + + +#import Tkinter +import tkinter +from PIL import Image, ImageTk +#import image, imageTk + + +# fits the resolution inRes to the resolution fitRes +def fitRes( inRes, fitRes =[500, 500] ): + outRes = [500,500] + # die größere Ausdehnung mus der neuen 500 entsprechen, die andere im gleichen Maßstab skaliert werden + if inRes[0] > inRes[1]: + outRes[1] = int( 500 * inRes[1] / inRes[0] ) + else: + outRes[0] = int( 500 * inRes[0] / inRes[1] ) + + return outRes + +# Eine Klasse zum anzeigenden Durchblättern von jpgDateien +class jpgAlbum: +# Dem Konstruktor wird eine Liste mit jpgs übergeben + def __init__(self, masterWidget): + + # Membervariablen + # die leere Liste mit den Bildinformationen + self.jpgListe = [] + + # der Index des aktuell angezeigten Bildes in der Liste + self.aktIndex = -1 + # Flag, ob das Bild ausgewählt ist, also mit in die Galerie kommen soll + self.aktSelectState = True + + # der Anzeigebereich des aktuell anzuzeigenden Bildes +# self.photoWidget = Tkinter.Label(masterWidget) + self.photoWidget = tkinter.Label(masterWidget) + self.photoWidget.pack() + + # Vorwärts/Rückwärts Button +# nextButton = Tkinter.Button(masterWidget, text="Next", command=self.next) + nextButton = tkinter.Button(masterWidget, text="Next", command=self.next) +# nextButton.pack(side=Tkinter.RIGHT) + nextButton.pack(side=tkinter.RIGHT) +# previousButton = Tkinter.Button(masterWidget, text="Previous", command=self.previous) + previousButton = tkinter.Button(masterWidget, text="Previous", command=self.previous) +# previousButton.pack(side=Tkinter.LEFT) + previousButton.pack(side=tkinter.LEFT) + +# self.selectedCheckbox = Tkinter.Checkbutton(masterWidget, text="selected", variable=self.aktSelectState, onvalue=True, offvalue=False, command=self.aktSelectToggle) + self.selectedCheckbox = tkinter.Checkbutton(masterWidget, text="selected", variable=self.aktSelectState, onvalue=True, offvalue=False, command=self.aktSelectToggle) +# self.selectedCheckbox.pack(side=Tkinter.BOTTOM) + self.selectedCheckbox.pack(side=tkinter.BOTTOM) + + masterWidget.bind("", self.next) + masterWidget.bind("", self.previous) + masterWidget.bind("", self.rotateAktJpgClockwise) + masterWidget.bind("", self.aktSelectToggle) + masterWidget.bind("", self.close) + masterWidget.bind("q", self.close) + +# ein Verzeichnis nach jpgs durchgehen und der klasseneigenen ImgList hinzufügen + def addDirectory(self, picDirName): + for (dirPath, dirNames, fileNames) in os.walk(picDirName): + for fileName in fileNames: + fullFilename = os.path.join(dirPath, fileName) + fileHandle = open(fullFilename, 'rb') + exifTag = exifread.process_file(fileHandle, stop_tag='EXIF DateTimeOriginal', details=False) + + picFileDate = {} + picFileDate['filename'] = fullFilename + #print(str(exifTag)) + picFileDate['exifDate'] = str( exifTag.get('EXIF DateTimeOriginal', None ) ) + #picFileDate['selected'] = True + picFileDate['selected'] = False + picFileDate['toRotate'] = 0 + + fileHandle.close() + + self.jpgListe.append( picFileDate ) +# break + + self.aktIndex = 0 + self.changeJpg(self.jpgListe[self.aktIndex]['filename']) + + def sortJpgListeByExifDate(self): + self.jpgListe = sorted(self.jpgListe, key=lambda pic: (pic['exifDate'], pic['filename'])) + self.aktIndex = 0 + self.changeJpg(self.jpgListe[self.aktIndex]['filename']) + + def rotateAktJpgClockwise(self, event): + if self.aktIndex >= 0: + self.jpgListe[self.aktIndex]['toRotate'] = ( self.jpgListe[self.aktIndex]['toRotate'] - 90 ) % 360 + self.changeJpg(self.jpgListe[self.aktIndex]['filename']) + + def aktSelectToggle(self, event=None): + if self.jpgListe[self.aktIndex]['selected']: + self.jpgListe[self.aktIndex]['selected'] = False + self.selectedCheckbox.deselect() + else: + self.jpgListe[self.aktIndex]['selected'] = True + self.selectedCheckbox.select() + + self.aktSelectState = self.jpgListe[self.aktIndex]['selected'] + #print(str(self.jpgListe)) + print("selected: " + str( sum(1 for entry in self.jpgListe if entry['selected'] ) ) ) + + def jsonSaveJpgList(self): + with open(args.jpgFolder + "/jpegAlbum.json", 'w') as fp: + json.dump( self.jpgListe, fp, indent=4) + + +# aktIndex++ + def next(self, event=None): + self.aktIndex = (self.aktIndex + 1) % len(self.jpgListe) + self.aktSelectState = self.jpgListe[self.aktIndex]['selected'] + self.changeJpg(self.jpgListe[self.aktIndex]['filename']) +# aktIndex-- + def previous(self, event=None): + self.aktIndex = (self.aktIndex - 1) % len(self.jpgListe) + self.aktSelectState = self.jpgListe[self.aktIndex]['selected'] + self.changeJpg(self.jpgListe[self.aktIndex]['filename']) + +# ein Bildwechsel + def changeJpg(self, newJpgName): + #print("aktBild: [{}]{}".format(self.aktIndex, self.jpgListe[self.aktIndex])) + + openSuccess = False + while not openSuccess: + try: + self.aktJpg = Image.open(newJpgName) + openSuccess = True + except IOError: + openSuccess = False + print(self.jpgListe[self.aktIndex]['filename'] + " is no image!") + self.jpgListe.pop(self.aktIndex) +# self.next() + #print("Returning!") + return + + #print("Handling " + self.jpgListe[self.aktIndex]['filename'] ) + self.aktRes = self.aktJpg.size + #self.aktJpgScaled = self.aktJpg.resize([500, 500*self.aktRes[1]/self.aktRes[0]]).rotate(self.jpgListe[self.aktIndex]['toRotate']) + + self.aktJpgScaled = self.aktJpg.resize( fitRes( self.aktRes )).rotate(self.jpgListe[self.aktIndex]['toRotate']) + + self.photo = ImageTk.PhotoImage(self.aktJpgScaled) + self.photoWidget.configure(image = self.photo) + self.photoWidget.image = self.photo + + self.aktSelectState = self.jpgListe[self.aktIndex]['selected'] + + if self.aktSelectState: + self.selectedCheckbox.select() + else: + self.selectedCheckbox.deselect() +# print("aktBild: [{}]{}".format(self.aktIndex, self.jpgListe[self.aktIndex])) + + def close(self, event): + # hier noch das speichern einfügen + self.jsonSaveJpgList() + sys.exit() + + + + + +parser = argparse.ArgumentParser(description='ein jpg anzeigen') +parser.add_argument('jpgFolder', metavar='jpgFolder', nargs='?', default='.', help='ein Verzeichnis mit jpgDateien') +args = parser.parse_args() + +#master = Tkinter.Tk() +master = tkinter.Tk() +master.geometry('%dx%d+%d+%d' % (800, 600, 0, 0)) +app = jpgAlbum(master) +app.addDirectory(args.jpgFolder) +app.sortJpgListeByExifDate() + + +master.mainloop() +#master.destroy() diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonAlbumTest-Template.sh b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonAlbumTest-Template.sh new file mode 100644 index 0000000..3362cb4 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonAlbumTest-Template.sh @@ -0,0 +1,30 @@ +#! /bin/bash -v +# Beispiel-/Testaufruf zum Erzeugen eines Albums aus eine jsonAlbum.json heraus + +mkGalGenPath="/home/marko/keeper/judo/cwsvJudo/src/mkGalGen" + +imgDirBase="/home/marko/keeper/judo/media/photos/photos.2018/2018-04-22_LittleOttoGoshiLiga-2018-1_U9U12_HalleS" +galDirName="2018-04-22_LittleOttoGoshiLiga-2018-1_U9U12_HalleS" +galName="Little-Otto-Goshi-Liga 2018-1" + +galDirBase="/home/marko/keeper/judo/cwsvJudo/photoalben/photoalben.2018" +logoFileName="/home/marko/keeper/judo/graphiken/logos/cwsvJudoLogoWappen.100x.png" + + +mkdir -p ${galDirBase} + +# Des Erzeugen der json +python3 ${mkGalGenPath}/jpgSelector.py ${imgDirBase} +# das Erzeugen des Makefiles +python3 ${mkGalGenPath}/jsonJpgList2Makefile.py ${imgDirBase}/jpegAlbum.json --imgDirBase=${imgDirBase} --galName="${galName}" --galDirBase="${galDirBase}" --galDirName="${galDirName}" --logoFileName="${logoFileName}" > Makefile.${galDirName} +#das aufrufen des makefiles +make --file=Makefile.${galDirName} +# upload des ganzen +lftp -e "mirror -R ${galDirBase}/${galDirName} photoalben/photoalben.2018/${galDirName}" -u cwsvjudo,***REMOVED*** ftp://cwsvjudo.bplaced.net + +# und nochmal das ganze mit Komprimierung +python3 ${mkGalGenPath}/jsonJpgList2Makefile.py ${imgDirBase}/jpegAlbum.json --imgDirBase=${imgDirBase} --galName="${galName}" --galDirBase="${galDirBase}" --galDirName="${galDirName}" --logoFileName="${logoFileName}" --compressHard="true" > Makefile.${galDirName} +#das aufrufen des makefiles +make --file=Makefile.${galDirName} +# upload des ganzen +lftp -e "mirror -R ${galDirBase}/${galDirName} photoalben/photoalben.2018/${galDirName}" -u cwsvjudo,***REMOVED*** ftp://cwsvjudo.bplaced.net diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2IndexPhp.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2IndexPhp.py new file mode 100755 index 0000000..fde8d14 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2IndexPhp.py @@ -0,0 +1,69 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +### Aus einer in einer jsonDatei gegebenen jpgListe (albumKompatibel) +### eine index.php erzeugen + +### +# Modulimporte +### + +#import sys, os, exifread, datetime +import sys, os, datetime +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +#import Tkinter +#import tkinter +#from PIL import Image, ImageTk +#import image, imageTk + +import json + +### +# Funktionsdefinitionen +### + + +### +# Main +### + +# Argumente parsen +parser = argparse.ArgumentParser(description='Ein Makefile erstellen') +parser.add_argument('jsonFileName', metavar='jsonFileName', nargs='?', default='.', help='json-Datei') +parser.add_argument('--galName') +#parser.add_argument('--galName', default="dummyGalName") +#parser.add_argument('--galDirName', default="dummyGalDirName") +#parser.add_argument('--galDirBase', default="dummyGalDirBase", help="Basisverzeichnis, in dem das Verzeichnis mit dem Album angelegt werden soll") +#parser.add_argument('--galOptImgWiderSide', default="1024") +#parser.add_argument('--galOptThbWiderSide', default="200") + +argv = parser.parse_args() + +jpgList = [] + +with open(argv.jsonFileName) as json_data: + #print(json_data) + jpgList = json.load(json_data) + + +indexPhp = "" + +indexPhp += "" + +print(indexPhp) diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2Makefile.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2Makefile.py new file mode 100755 index 0000000..bb0f3d5 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2Makefile.py @@ -0,0 +1,158 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +### Aus einer in einer jsonDatei gegebenen jpgListe (albumKompatibel) +### ein Makefile erzeugen +### Example usage: +### /d/privat/cwsvJudo/src/mkGalGen/jsonJpgList2Makefile.py jpegAlbum.json --galName="Zwergenturnier 2006" --galDirBase=" /d/privat/cwsvJudo/src/mkGalGen/testingArea/photoalben/photoalben.2006/" --galDirName="2006-09-30_Zwergenturnier2006" > Makefile + +### +# Modulimporte +### + +#import sys, os, exifread, datetime +import sys, os, datetime +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +#import Tkinter +#import tkinter +#from PIL import Image, ImageTk +#import image, imageTk + +import json + +### +# Funktionsdefinitionen +### + +# Für ftpDateinamen +def slugified(value): + """ + Normalizes string, converts to lowercase, removes non-alpha characters, + and converts spaces to hyphens. + """ + import unicodedata + + returnValue = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore') + returnValue = unicode(re.sub('[^\w\s-]', '', returnValue).strip().lower()) + returnValue = unicode(re.sub('[-\s]+', '-', returnValue)) + + return returnValue + +### +# Main +### + +# Argumente parsen +parser = argparse.ArgumentParser(description='Ein Makefile erstellen') +parser.add_argument('jsonFileName', metavar='jsonFileName', nargs='?', default='.', help='json-Datei') +parser.add_argument('--galName') #, default="dummyGalName") +parser.add_argument('--galDirName')#, default="dummyGalDirName") +parser.add_argument('--galDirBase')#, default="dummyGalDirBase", help="Basisverzeichnis, in dem das Verzeichnis mit dem Album angelegt werden soll") +parser.add_argument('--imgDirBase')#, default="dummyGalDirBase", help="Basisverzeichnis, in dem das Verzeichnis mit dem Album angelegt werden soll") +# Eventuell als Target mit einbauen, um es in einer korrekten Auflösung mit zu erzeugen +parser.add_argument('--logoFileName') +parser.add_argument('--galOptImgWiderSide', default="1024") +parser.add_argument('--galOptThbWiderSide', default="200") + +parser.add_argument('--compressHard') + +argv = parser.parse_args() + +jpgList = [] + +with open(argv.jsonFileName) as json_data: + #print(json_data) + jpgList = json.load(json_data) + +makefileTargets = list() + +allTarget = "" +allTarget += ".PHONY: all\nall: " +for index, entry in enumerate(jpgList): + # Die Bilder und Thumbnails + if entry['selected']: + allTarget += argv.galDirBase + "/" + argv.galDirName + "/images/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".jpg " + allTarget += argv.galDirBase + "/" + argv.galDirName + "/thumbs/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".png " + # Die phpDateien + allTarget += argv.galDirBase + "/" + argv.galDirName + "/index.php " + allTarget += argv.galDirBase + "/" + argv.galDirName + "/view.php " + + +allTarget += "\n" + +makefileTargets.append(allTarget) + +# Imagetargets +for index, entry in enumerate(jpgList): + if entry['selected']: + makefileTarget = "" + + # @todo zfill(3) variabel gestalten + # @todo filename / vs. \ + # @todo eol == '\n' vs eol == '\r\n' (vs eol == '\r') +# makefileTarget += argv.galDirBase + "/" + argv.galDirName + "/images/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".jpg: " + argv.imgDirBase + "/" + entry['filename'] + "\n" +# @todo Steht im jsonFile bei den Dateinamen der Bilder das imgDirBase mit? (Vereinbarungssache, intuitiv würde ich sagen, Dateinamen im jsonFile sollten relativ zur Lage des jsonFiles selber sein) + #makefileTarget += argv.galDirBase + "/" + argv.galDirName + "/images/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".jpg: " + argv.imgDirBase + "/" + entry['filename'] + "\n" + makefileTarget += argv.galDirBase + "/" + argv.galDirName + "/images/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".jpg: " + entry['filename'] + "\n" + makefileTarget += "\tmkdir -p " + argv.galDirBase + "/" + argv.galDirName + "/images/\n" +# makefileTarget += "\tconvert $^ -resize \"" + argv.galOptImgWiderSide + ">\" \"$@\"\n" + # imageMagick rotates clockwise, imagetk counterclockwise +# makefileTarget += "\tcomposite -rotate -" + str(entry["toRotate"]) + " -dissolve 25% -gravity northwest " + argv.logoFileName + " $^ -resize \"" + argv.galOptImgWiderSide + ">\" \"$@.png\"\n" + + +# makefileTarget += "\tcomposite -dissolve 25% -gravity northwest " + argv.logoFileName + " $^ -resize \"" + argv.galOptImgWiderSide + ">\" \"$@.png\"\n" +# makefileTarget += "\t/home/marko/proggis/guetzli/bin/Release/guetzli --quality 95 \"$@.png\" \"$@\"\n" + + if argv.compressHard == "true": + makefileTarget += "\tconvert \\( $^ -normalize -rotate -" + str(entry["toRotate"]) + " -resize \"" + argv.galOptImgWiderSide + ">\" \\) " + argv.logoFileName + " -composite \"$@.png\"\n" + makefileTarget += "\t/home/marko/proggis/guetzli/bin/Release/guetzli --quality 90 \"$@.png\" \"$@\"\n" + makefileTarget += "\trm \"$@.png\"\n" + else: + makefileTarget += "\tconvert \\( $^ -normalize -rotate -" + str(entry["toRotate"]) + " -resize \"" + argv.galOptImgWiderSide + ">\" \\) " + argv.logoFileName + " -composite \"$@\"\n" + + makefileTargets.append(makefileTarget) + +# Thumbnailtargets +for index, entry in enumerate(jpgList): + if entry['selected']: + makefileTarget = "" + + # @todo zfill(3) variabel gestalten + # @todo filename / vs. \ + # @todo eol == '\n' vs eol == '\r\n' (vs eol == '\r') + #makefileTarget += argv.galDirBase + "/" + argv.galDirName + "/thumbs/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".png: " + argv.imgDirBase + "/" + entry['filename'] + "\n" + makefileTarget += argv.galDirBase + "/" + argv.galDirName + "/thumbs/" + argv.galName.replace(" ", "\\ ") + "-" + str(index).zfill(3) + ".png: " + entry['filename'] + "\n" + makefileTarget += "\tmkdir -p " + argv.galDirBase + "/" + argv.galDirName + "/thumbs/\n" +# makefileTarget += "\tconvert $^ -resize \"" + argv.galOptThbWiderSide + ">\" \"$@\"\n" + makefileTarget += "\tconvert $^ -rotate -" + str(entry["toRotate"]) + " -resize \"" + argv.galOptThbWiderSide + ">\" -alpha set -virtual-pixel transparent -channel A -blur 0x8 -level 50%,100% +channel \"$@\"\n" + #makefileTarget += "\tpngnq -Q f -s 1 -f -e .png \"$@\"\n" + if argv.compressHard == "true": + makefileTarget += "\tpngquant --speed 1 --force --ext .png \"$@\"\n" + makefileTarget += "\t/home/marko/proggis/zopfli/zopflipng --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent -y \"$@\" \"$@\"\n" + + makefileTargets.append(makefileTarget) + +# phpDateienTargets + +indexPhpTarget = "" +indexPhpTarget += argv.galDirBase + "/" + argv.galDirName + "/index.php: " + argv.jsonFileName + "\n" +indexPhpTarget += "\tmkdir -p " + argv.galDirBase + "/" + argv.galDirName + "\n" +indexPhpTarget += "\t/home/marko/keeper/judo/cwsvJudo/src/mkGalGen/jsonJpgList2IndexPhp.py " + argv.jsonFileName + " --galName=\"" + argv.galName + "\" > $@\n" +viewPhpTarget = "" +viewPhpTarget += argv.galDirBase + "/" + argv.galDirName + "/view.php: " + argv.jsonFileName + "\n" +viewPhpTarget += "\tmkdir -p " + argv.galDirBase + "/" + argv.galDirName + "\n" +viewPhpTarget += "\t/home/marko/keeper/judo/cwsvJudo/src/mkGalGen/jsonJpgList2ViewPhp.py " + argv.jsonFileName + " --galName=\""+ argv.galName + "\" > $@\n" + +makefileTargets.append(indexPhpTarget) +makefileTargets.append(viewPhpTarget) + +for entry in makefileTargets: + print(entry) diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2ViewPhp.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2ViewPhp.py new file mode 100755 index 0000000..306a80c --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/jsonJpgList2ViewPhp.py @@ -0,0 +1,69 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- + +### Aus einer in einer jsonDatei gegebenen jpgListe (albumKompatibel) +### eine index.php erzeugen + +### +# Modulimporte +### + +#import sys, os, exifread, datetime +import sys, os, datetime +#sys.path.append('/mingw64/lib/python3.6/site-packages/') + +# für Kommandozeilenargumente +import argparse + +# für glob :) +# @ToDo herausfinden, was glob macht +import glob + +#import Tkinter +#import tkinter +#from PIL import Image, ImageTk +#import image, imageTk + +import json + +### +# Funktionsdefinitionen +### + + +### +# Main +### + +# Argumente parsen +parser = argparse.ArgumentParser(description='Ein Makefile erstellen') +parser.add_argument('jsonFileName', metavar='jsonFileName', nargs='?', default='.', help='json-Datei') +parser.add_argument('--galName') +#parser.add_argument('--galName', default="dummyGalName") +#parser.add_argument('--galDirName', default="dummyGalDirName") +#parser.add_argument('--galDirBase', default="dummyGalDirBase", help="Basisverzeichnis, in dem das Verzeichnis mit dem Album angelegt werden soll") +#parser.add_argument('--galOptImgWiderSide', default="1024") +#parser.add_argument('--galOptThbWiderSide', default="200") + +argv = parser.parse_args() + +jpgList = [] + +with open(argv.jsonFileName) as json_data: + #print(json_data) + jpgList = json.load(json_data) + + +indexPhp = "" + +indexPhp += "" + +print(indexPhp) diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/sortierer.py b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/sortierer.py new file mode 100644 index 0000000..647f0dd --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/sortierer.py @@ -0,0 +1,36 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# sortierer.py + +import os, exifread, datetime +import numpy as np +from sklearn.cluster import MeanShift, estimate_bandwidth +from sklearn.datasets.samples_generator import make_blobs + +picDirs = { + "/home/marko/keeper/judo/bilder/bilder.2016/2016-10-23_OttoGoshiLiga+HallCategoryIII2016/mögel", + "/home/marko/keeper/judo/bilder/bilder.2016/2016-10-23_OttoGoshiLiga+HallCategoryIII2016/olympus/denoised", +} + +print("Reading Files") +picFiles = [] +for picDir in picDirs: + for (dirPath, dirnames, fileNames) in os.walk(picDir): + for fileName in fileNames: + picFiles.append( os.path.join(dirPath, fileName) ) + break + +print("Reading Tags") +X = [] +for picFile in picFiles: + fHandle = open(picFile, 'rb') + fTag = exifread.process_file(fHandle, stop_tag='EXIF DateTimeOriginal', details=False) + timeTag = datetime.datetime.strptime(str( fTag['EXIF DateTimeOriginal'] ), "%Y:%m:%d %H:%M:%S") + X.append( timeTag.hour * 3600 + timeTag.minute * 60 + timeTag.second ) + fHandle.close() +xArray = np.asarray(X) +print xArray + +print("Doing MeanShift") +mkMS = MeanShift( bin_seeding=True ) +mkMS.fit(np.asarray(X)) diff --git a/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/testingArea/Makefile b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/testingArea/Makefile new file mode 100644 index 0000000..c3b1370 --- /dev/null +++ b/homepage/redesign2018/markdownExperiment/src/tools/mkGalGen/testingArea/Makefile @@ -0,0 +1,78 @@ +# Makefile zum Erzeugen der Bilder der Gallerie +# Einziger Input soll eigentlich sein: +# - Liste der Bilder, die angezeigt werden soll +# - Zielverzeichnis der Gallerie +# +# Problem: +# - die Bildquellen können verschiedene Verzeichnisse haben +# - meine Targets bisher benutzen als Abhängigkeit das +# Quellverzeichnis +# - geht nicht, wenn verschiedene Verzeichnisse benutzt werden +# - geht es vieleicht doch? wie reagiert die +# Abhängigkeitserkennung von make, ist %.jpg nur der Dateiname +# oder der gesamte Pfad? Wenn der ganze Pfad, dann bliebe noch +# das Problem mit den gleichen Dateinamen (Dateien aus +# verschiedenen Ordnern werden in den selben Order kopiert) +# - das heisst auch, dass in der Gallerie zwei Dateien mit dem +# gleichen Namen landen könnten +# - eine Umbenennung wäre nötig +# - mit einem allgemeinen Makefile wird es also nicht gehen... +# - es könnte ein Makefile erzeugt werden, jedes Bild und Thumbnail +# ein eigenes (konkretes) Target + +# InputDaten +# - als Inputdaten sollen herhalten: +# - eine Liste der Bilder für die Gallerie +# - vielleicht auch eine Datei mit den Daten der Gallerie? +# -> Nein! Um den Makeprozess effektiv zu gestalten sollten es die +# Quellbilder als Abhängigkeiten sein. Das Makefile oder +# zumindest die Dateiliste sollte generiert werden +# - das Zielverzeichnis für die Gallerie + +IMAGE_SOURCE_DIR = /d/privat/cwsvJudo/src/mkGalGen/2006-09-30_zwergenturnier/800x600 +IMAGE_SOURCE_FILES = $(wildcard $(IMAGE_SOURCE_DIR)/*.jpg) +GALLERY_TARGET_DIR = /d/privat/cwsvJudo/src/mkGalGen/testingArea/2006-09-30_zwergenturnier + +# Ende Inputdaten + +GALLERY_IMAGE_TARGET_FILES = $(addprefix $(GALLERY_TARGET_DIR)/images/, $(notdir $(IMAGE_SOURCE_FILES))) +GALLERY_THUMBNAILS_TARGET_FILES = $(addprefix $(GALLERY_TARGET_DIR)/thumbnails/, $(addsuffix .png, $(basename $(notdir $(IMAGE_SOURCE_FILES))))) + +GUETZLI = /d/projekte/tests/guetzli.git/bin/Release/guetzli.exe + +IMAGES_WIDTH_WIDER_SIDE = 800 +THUMBNAILS_WIDTH_WIDER_SIDE = 160 + +THUMBNAIL_OPTIONS_BLUREDGES = -alpha set -virtual-pixel transparent -channel A -blur 0x25 -level 50%,100% +channel +THUMBNAIL_OPTIONS_TORNEDGES = \( +clone -alpha extract -virtual-pixel black -spread 50 -blur 0x3 -threshold 50% -spread 1 -blur 0x.7 \) -alpha off -compose Copy_Opacity -composite + +.PHONY: all clean thumbClean imageClean +all: $(GALLERY_IMAGE_TARGET_FILES) $(GALLERY_THUMBNAILS_TARGET_FILES) +clean: thumbClean imageClean +thumbClean: + $(RM) $(GALLERY_THUMBNAILS_TARGET_FILES) +imageClean: + $(RM) $(GALLERY_IMAGE_TARGET_FILES) + +include Makefile.imgTargets.inc + +# Target für die AlbumBilder +$(GALLERY_TARGET_DIR)/images/%.jpg:$(IMAGE_SOURCE_DIR)/%.jpg + mkdir -p $(GALLERY_TARGET_DIR)/images + convert $^ -resize "$(IMAGES_WIDTH_WIDER_SIDE)>" $@ + $(GUETZLI) --quality 95 $@ $@ + + +$(GALLERY_TARGET_DIR)/thumbnails/%.png:$(IMAGE_SOURCE_DIR)/%.jpg + mkdir -p $(GALLERY_TARGET_DIR)/thumbnails + convert $^ $(THUMBNAIL_OPTIONS_TORNEDGES) -resize "$(THUMBNAILS_WIDTH_WIDER_SIDE)>" $@ + pngnq -Q f -s 1 -f -e .png $@ + +.PHONY: +echoTest: + echo $(IMAGE_SOURCE_DIR) + echo $(GALLERY_TARGET_DIR) + echo $(IMAGE_SOURCE_FILES) + echo $(GALLERY_IMAGE_TARGET_FILES) + echo $(GALLERY_THUMBNAILS_TARGET_FILES) + echo $(GAL_TARGET_DIR)
Die Videos des Wettkampfes sind momentan noch in Vorbereitung. Einfach später noch mal probieren.