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:
@@ -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*** \
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
$wkName = "Little-Otto-Goshi-Liga 2018-3";
|
||||
$wkDatum = "2018-08-18";
|
||||
?>
|
||||
@@ -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" );
|
||||
?>
|
||||
@@ -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" );
|
||||
?>
|
||||
@@ -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>
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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'])
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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))
|
||||
@@ -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)
|
||||
Reference in New Issue
Block a user