- Skalierung gemacht

This commit is contained in:
Michael Stangl
2012-08-17 03:04:15 +02:00
parent 730e2d2361
commit a2ddd04936
5 changed files with 132 additions and 50 deletions
+1 -8
View File
@@ -39,7 +39,6 @@ function checkqueue {
do do
if [ ! -d /proc/$PID ] ; then if [ ! -d /proc/$PID ] ; then
regeneratequeue # at least one PID has finished regeneratequeue # at least one PID has finished
echo $PID
break break
fi fi
done done
@@ -47,10 +46,7 @@ function checkqueue {
function cfg_parser { function cfg_parser {
INI_FILE=$1 INI_FILE=$1
SECTION=$2 SECTION=$2
echo $1
echo $2
eval `sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}" < $INI_FILE`>> trr.txt eval `sed -n -e "/^\[$SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}" < $INI_FILE`>> trr.txt
echo 'helololo'
} }
function get_filepath { function get_filepath {
# probiere alle möglichen Kombinationen wo das file stehen könnte je # probiere alle möglichen Kombinationen wo das file stehen könnte je
@@ -139,19 +135,16 @@ check_params
echo $INPUT_FILE echo $INPUT_FILE
for i in `ls $INPUT_FILE| grep .svg ` for i in `ls $INPUT_FILE| grep .svg `
do do
echo $i
echo $CHECKFILE
ID=`echo "$i" | sed -e 's/;.*//g'` ID=`echo "$i" | sed -e 's/;.*//g'`
PIC_NAME=`echo "$i" | sed -e 's/.svg/.jpg/g'` PIC_NAME=`echo "$i" | sed -e 's/.svg/.jpg/g'`
FILE_PATH=$INPUT_FILE/$PIC_NAME FILE_PATH=$INPUT_FILE/$PIC_NAME
if [ -s $FILE_PATH ] && [ $CHECKFILE -eq 1 ] if [ -s $FILE_PATH ] && [ $CHECKFILE -eq 1 ]
then then
echo $PIC_NAME exists! echo $PIC_NAME exists
else else
RESIZE="${width}x${height}" RESIZE="${width}x${height}"
SWITCHES="-density $density $INPUT_FILE/$ID -resize $RESIZE $INPUT_FILE/$PIC_NAME" SWITCHES="-density $density $INPUT_FILE/$ID -resize $RESIZE $INPUT_FILE/$PIC_NAME"
CMDLINE="$CMD $SWITCHES" CMDLINE="$CMD $SWITCHES"
echo $CMDLINE
(echo $ID; $CMDLINE) & (echo $ID; $CMDLINE) &
PID=$! PID=$!
+7 -4
View File
@@ -31,16 +31,19 @@ content=${name}
# Ab dem Punkt wird zu schreiben begonnen # Ab dem Punkt wird zu schreiben begonnen
x=0 x=0
y=0 y=0
length=200 height=850
width=2700
# Fontname und Fonttyp # Fontname und Fonttyp
fontname=ausgangsschrift fontname=ausgangsschrift
glyph_space=20 glyph_space=20
counter_replace=True counter_replace=True
#align=center,left,right #align=center,left,right
align=left align=center
yalign=center
autoscale=True
[jpgs] [jpgs]
width=1900 width=2776
height=700 height=898
format=jpg format=jpg
density=300 density=300
+1 -1
View File
@@ -76,7 +76,7 @@ z;z
Z;Z Z;Z
plus;+ plus;+
scharfs;ß scharfs;ß
slash; slash;/
space; space;
minus;- minus;-
komma;, komma;,
1 Kennummer Name
76 Z Z
77 plus +
78 scharfs ß
79 slash /
80 space
81 minus -
82 komma ,
+5 -8
View File
@@ -1,9 +1,6 @@
Kennummer;Name Kennummer;Name
a-z;mnopqrstuvwxyzabcdefghijkl 001;Au
A-Z;ABCDEFGHIJKLMNOPQRSTUVWXYZ 002;Rau
ü;:.:.:.:...---++!!&& 003;Lux
001;Michael 004;May
yxelbüxel;Eva 005;Johnson-Kronh-Wattenberg
063453;Nicola Jane
333;&
12;ä Ä é è ëïóöÖß/-,:!'a&b+úüÜ
1 Kennummer Name
2 a-z 001 mnopqrstuvwxyzabcdefghijkl Au
3 A-Z 002 ABCDEFGHIJKLMNOPQRSTUVWXYZ Rau
4 ü 003 :.:.:.:...---++!!&& Lux
5 001 004 Michael May
6 yxelbüxel 005 Eva Johnson-Kronh-Wattenberg
063453 Nicola Jane
333 &
12 ä Ä é è ëïóöÖß/-,:!'a&b+úüÜ
+108 -19
View File
@@ -21,6 +21,7 @@ def create_picture_frame( config ):
params = dict() params = dict()
params['width'] = config.get('globals', 'width') params['width'] = config.get('globals', 'width')
params['height'] = config.get('globals', 'height') params['height'] = config.get('globals', 'height')
params['background'] = config.get('globals', 'background')
#echo '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">' #echo '<svg xmlns="http://www.w3.org/2000/svg" version="1.1">'
begintpl = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?> begintpl = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>
@@ -32,8 +33,22 @@ def create_picture_frame( config ):
width="${width}" width="${width}"
height="${height}" height="${height}"
> >
'''
imagetpl = ''' <image width="${width}" height="${height}"
xlink:href="file://${background}">
</image>
''' '''
svgbegin = Template( begintpl ).substitute(params) svgbegin = Template( begintpl ).substitute(params)
# falls ein Hintergrundbild verwendet werden soll, dann das genauso gross
# machen...
try:
background = config.get('globals', 'background')
font_path = os.path.expandvars(os.path.join('$PICCREATE_BACKGROUNDS', background ))
params['background'] = os.path.normpath(font_path)
svgbegin = svgbegin + Template( imagetpl ).substitute(params)
except ConfigParser.NoOptionError:
# dann eben kein Hintergrundbild
pass
svgend = '</svg>' svgend = '</svg>'
return svgbegin, svgend return svgbegin, svgend
@@ -41,13 +56,76 @@ def write_font_line( content, font, params ):
''' erzeugt den SVG Teil des Bildes aus Einzelkomponenten ''' erzeugt den SVG Teil des Bildes aus Einzelkomponenten
''' '''
w = Word(content, font, params) w = Word(content, font, params)
return w.GetSVG() wordsvg = w.GetSVG()
# falls das Wort nun skaliert werden soll
if params.has_key('scale'):
params['xscale'] = params['scale']
params['yscale'] = params['scale']
if not params.has_key('xscale'):
params['xscale'] = 1.0
if not params.has_key('yscale'):
params['yscale'] = 1.0
pic_width = float(params['width'])
pic_height = float(params['height'])
if params.has_key('autoscale'):
wordlength = w.calc_length()
wordheight = w.calc_height()
#print wordlength, wordheight
#print pic_width, pic_height
fw = pic_width / wordlength
fh = pic_height / wordheight
#print fw, fh
if fw < fh: scale_faktor = fw
else: scale_faktor = fh
params['xscale'] = scale_faktor
params['yscale'] = scale_faktor
else:
scale_faktor = 1.0
# berechne immer den richtigen Startpunkt, je nach Bündigkeit
if params.has_key('align'):
xstart = float(params['x'])
if params['align'] == 'left':
x = xstart
elif params['align'] == 'center':
word_length = w.calc_length()
x = xstart * scale_faktor + (pic_width - word_length * scale_faktor)/2.0
else:
word_length = w.calc_length()
x = xstart * scale_faktor + pic_width - word_length * scale_faktor
params['xstart'] = x
else:
params['xstart'] = params['x']
if params.has_key('yalign'):
ystart = float(params['y'])
if params['yalign'] == 'top':
y = 0.0
elif params['yalign'] == 'center':
word_height = w.calc_height()
y = ystart * scale_faktor + (pic_height - word_height * scale_faktor)/2.0
elif params['yalign'] == 'bottom':
y = ystart * scale_faktor + pic_height - word_height * scale_faktor
else:
y = ystart
params['ystart'] = y
else:
params['ystart'] = params['y']
scalebegin = '''<g transform="translate($xstart,$ystart) scale(${xscale},${yscale})">
'''
scaleend = ''' </g>'''
svg = Template( scalebegin ).substitute(params) + wordsvg + scaleend
return svg
def write_random_font_line( config, fontinfos, data ): def write_random_font_line( config, fontinfos, data ):
''' erzeugt den SVG Teil des Bildes aus einem Hintergrundbild und ''' erzeugt den SVG Teil des Bildes aus einem Hintergrundbild und
mehreren in Einzelbereichen zufällig platzierten Einzelbildern ''' mehreren in Einzelbereichen zufällig platzierten Einzelbildern '''
# TODO Bild aus Zufallspositionen von Einzelkomponenten # TODO Bild aus Zufallspositionen von Einzelkomponenten
pass return
class Word: class Word:
"""Berechnet die x/y Daten jedes Buchstabn zu einem Wort bzw. mehreren """Berechnet die x/y Daten jedes Buchstabn zu einem Wort bzw. mehreren
@@ -59,22 +137,23 @@ class Word:
def __repr__(self): def __repr__(self):
return self.line return self.line
def calc_length(self): def calc_length(self):
glyph_space = float(self.params['glyph_space'])
deltax = 0.0 deltax = 0.0
for c in self.line: for c in self.line:
g = self.font.GlyphGet(c) g = self.font.GlyphGet(c)
deltax = g.GetLength() + deltax deltax = g.GetLength() + deltax + glyph_space
return deltax return deltax
def calc_height(self):
max_y = 0.0
for c in self.line:
g = self.font.GlyphGet(c)
new_y = g.GetHeight()
if new_y > max_y:
max_y = new_y
return max_y
def GetSVG(self): def GetSVG(self):
params = self.params params = self.params
# berechne immer den richtigen Startpunkt, je nach Bündigkeit
if params['align'] == 'left':
x = float(params['x']) x = float(params['x'])
elif params['align'] == 'center':
word_length = self.calc_length()
x = float(params['x'] + (params['length'] - word_length)/2.0)
else:
word_length = self.calc_length()
x = float(params['x'] + word_length - params['length'])
y = params['y'] y = params['y']
glyph_space = float(params['glyph_space']) glyph_space = float(params['glyph_space'])
@@ -110,7 +189,7 @@ class Glyph:
def GetLength(self): def GetLength(self):
return float(self.GetAttribute('xstep')) return float(self.GetAttribute('xstep'))
def GetHeight(self): def GetHeight(self):
return float(self.GetAttribute('ystep')) return float(self.GetAttribute('ymax'))
def GetSVG(self, content): def GetSVG(self, content):
t = Template(self.template) t = Template(self.template)
svg = t.substitute(content) svg = t.substitute(content)
@@ -177,8 +256,8 @@ def create_picture(config, fontinfos, data, pic_path):
svgstr = '' svgstr = ''
begin, end = create_picture_frame( config ) picbegin, picend = create_picture_frame( config )
svgstr = svgstr + begin svgstr = svgstr + picbegin
# gehe alle Zeilen die im Bild enthalten sein müssen durch # gehe alle Zeilen die im Bild enthalten sein müssen durch
lines = config.get('globals', 'lines').split(',') lines = config.get('globals', 'lines').split(',')
@@ -201,16 +280,26 @@ def create_picture(config, fontinfos, data, pic_path):
font = fontinfos[fontname] font = fontinfos[fontname]
# hol dir die Eckdaten für die Zeile # hol dir die Eckdaten für die Zeile
# x, y, align, length # x, y, align, width, height
params = dict(config.items(linename)) lineparams = dict(config.items(linename))
picstr = write_font_line( content, font, params ) # falls nix angegeben, dann aus hol defaults aus globalen daten
if not lineparams.has_key('width'):
lineparams['width'] = config.get('globals', 'width')
if not lineparams.has_key('height'):
lineparams['height'] = config.get('globals', 'height')
if not lineparams.has_key('x'):
lineparams['x'] = 0.0
if not lineparams.has_key('y'):
lineparams['y'] = 0.0
picstr = write_font_line( content, font, lineparams )
if picstr: svgstr = svgstr + picstr if picstr: svgstr = svgstr + picstr
randstr = write_random_font_line( content, font, params) randstr = write_random_font_line( content, font, lineparams)
if randstr: svgstr = svgstr + randstr if randstr: svgstr = svgstr + randstr
svgstr = svgstr + end svgstr = svgstr + picend
if options.dry: if options.dry:
print svgstr print svgstr