Aufräumarbeiten im Zweig redesign2018

Auf Branch redesign2018
 zum Commit vorgemerkte Änderungen:
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/.htaccess
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/config.inc.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/css/cwsvJudoAmp.css
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/cwsvJudo.ampTemplate.inc.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/expCounter/counter.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/galerien.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/googlef3ad27a876479282.html
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/index.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/kontakt.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/news.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/newsDev.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/pages/desktop/verein.galerien.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/phpLib/ampify.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/phpLib/cwsvJudoAmpLib.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/robots.txt
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/sitemap.xml
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/trainingszeiten.php
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/urllist.txt
	neue Datei:     backup/ampPages-backup-2018-06-11-06-49/verein.training.php
	neue Datei:     backup/config.inc.php
	neue Datei:     graphiken/icons/cwsv.ico
	neue Datei:     impressumsVorlagen/impressum-recht-de.html
	neue Datei:     impressumsVorlagen/impressum-recht.de
	neue Datei:     impressumsVorlagen/muster_impressum_vorlage_von_www_jurarat_de.txt
	neue Datei:     impressumsVorlagen/sqr-law.de
	gelöscht:       phpLib/imgGallery.square7/indexDev.php.tmpl.orig
	neue Datei:     sitemap.xml
	geändert:       src/Makefiles/Makefile.vp9
	neue Datei:     src/tools/config.inc.php
	neue Datei:     src/tools/index.php
	neue Datei:     src/tools/indexHier.php
	neue Datei:     src/tools/indexInArbeit.php
	neue Datei:     src/tools/mkGalGen/Makefile.mkGalGen
	neue Datei:     src/tools/mkGalGen/ReadMe.md
	neue Datei:     src/tools/mkGalGen/createImageList.py
	neue Datei:     src/tools/mkGalGen/jpgListCreator.py
	neue Datei:     src/tools/mkGalGen/jpgListLoader.py
	neue Datei:     src/tools/mkGalGen/jpgSelector.py
	neue Datei:     src/tools/mkGalGen/jsonAlbumTest-Template.sh
	neue Datei:     src/tools/mkGalGen/jsonJpgList2IndexPhp.py
	neue Datei:     src/tools/mkGalGen/jsonJpgList2Makefile.py
	neue Datei:     src/tools/mkGalGen/jsonJpgList2ViewPhp.py
	neue Datei:     src/tools/mkGalGen/sortierer.py
	neue Datei:     src/tools/mkGalGen/testingArea/Makefile
This commit is contained in:
marko
2018-11-21 08:09:21 +01:00
parent 3b0b967a6c
commit 0948251fac
44 changed files with 2206 additions and 359 deletions

View File

@@ -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*** \

View File

@@ -0,0 +1,4 @@
<?php
$wkName = "Little-Otto-Goshi-Liga 2018-3";
$wkDatum = "2018-08-18";
?>

View File

@@ -0,0 +1,7 @@
<?php
include_once("config.inc.php");
$wkName = empty($wkName) ? "<fehlender Wettkampfname>" : $wkName;
include_once( $_SERVER['DOCUMENT_ROOT']."/ressourcen/phpLib/videoGallery/videoGallery.tmpl.php" );
?>

View File

@@ -0,0 +1,7 @@
<?php
include_once("config.inc.php");
$wkName = empty($wkName) ? "<fehlender Wettkampfname>" : $wkName;
include_once( $_SERVER['DOCUMENT_ROOT']."/ressourcen/phpLib/videoGallery/videoGallery.tmpl.php" );
?>

View File

@@ -0,0 +1,13 @@
<?php
include_once("config.inc.php");
?>
<!DOCTYPE html>
<html>
<head>
<title>In Arbeit</title>
</head>
<body>
<p>Die Videos des Wettkampfes <?php echo($wkName);?> sind momentan noch in Vorbereitung. Einfach später noch mal probieren.</p>
<img src="/ressourcen/graphiken/misc/staffeleiM%e4nnlein.jpg" />
</body>
</html>

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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'])

View File

@@ -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("<Right>", self.next)
masterWidget.bind("<Left>", self.previous)
masterWidget.bind("<Down>", self.rotateAktJpgClockwise)
masterWidget.bind("<space>", self.aktSelectToggle)
masterWidget.bind("<Escape>", 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()

View File

@@ -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

View File

@@ -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 += "<?php\n"
indexPhp += "\t$wkName = \"" + argv.galName + "\";\n"
indexPhp += "\t$imgList = array( "
for index, entry in enumerate(jpgList):
if entry['selected']:
indexPhp += "\"images/" + argv.galName + "-" + str(index).zfill(3) + ".jpg\", "
indexPhp += " );\n"
indexPhp += "\tinclude( $_SERVER['DOCUMENT_ROOT'].\"/ressourcen/phpLib/imgGallery/index.php.tmpl\" );\n"
indexPhp += "?>"
print(indexPhp)

View File

@@ -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)

View File

@@ -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 += "<?php\n"
indexPhp += "\t$wkName = \"" + argv.galName + "\";\n"
indexPhp += "\t$imgList = array( "
for index, entry in enumerate(jpgList):
if entry['selected']:
indexPhp += "\"images/" + argv.galName + "-" + str(index).zfill(3) + ".jpg\", "
indexPhp += " );\n"
indexPhp += "\tinclude( $_SERVER['DOCUMENT_ROOT'].\"/ressourcen/phpLib/imgGallery/view.php.tmpl\" );\n"
indexPhp += "?>"
print(indexPhp)

View File

@@ -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))

View File

@@ -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)