fnp
/
audio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix
[audio.git]
/
src
/
youtube
/
thumbnail.py
diff --git
a/src/youtube/thumbnail.py
b/src/youtube/thumbnail.py
index
42e8070
..
c64e5b5
100644
(file)
--- a/
src/youtube/thumbnail.py
+++ b/
src/youtube/thumbnail.py
@@
-2,12
+2,6
@@
import yaml
from PIL import Image, ImageDraw, ImageFont
from PIL import Image, ImageDraw, ImageFont
-def drawbox(img, d, context, get_font_path):
- for version in d['versions']:
- if draw_version(img, version, context, get_font_path):
- break
-
-
def split_to_lines(text, draw, font, max_width):
words = text.split()
current = ''
def split_to_lines(text, draw, font, max_width):
words = text.split()
current = ''
@@
-28,8
+22,7
@@
def split_to_lines(text, draw, font, max_width):
yield current
yield current
-def draw_version(img, d, context, get_font_path):
- # todo: do this in a subimg
+def draw_box(img, d, context, get_font_path, scale):
newimg = Image.new(
'RGBA',
(
newimg = Image.new(
'RGBA',
(
@@
-42,13
+35,17
@@
def draw_version(img, d, context, get_font_path):
cursor = 0
for item in d['items']:
if item.get('vskip'):
cursor = 0
for item in d['items']:
if item.get('vskip'):
- cursor += i
tem['vskip']
+ cursor += i
nt(round(item['vskip'] * scale))
text = item['text'].format(**context)
if not text:
continue
if item.get('uppercase'):
text = text.upper()
text = item['text'].format(**context)
if not text:
continue
if item.get('uppercase'):
text = text.upper()
- font = ImageFont.truetype(get_font_path(item['font-family']), item['font-size'])
+ font = ImageFont.truetype(
+ get_font_path(item['font-family']),
+ int(round(item['font-size'] * scale)),
+ layout_engine=ImageFont.LAYOUT_BASIC
+ )
max_width = item.get('max-width', newimg.size[0])
for line in split_to_lines(text, draw, font, max_width):
max_width = item.get('max-width', newimg.size[0])
for line in split_to_lines(text, draw, font, max_width):
@@
-56,15
+53,25
@@
def draw_version(img, d, context, get_font_path):
if cursor + realheight > newimg.size[1]:
return False
draw.text((0, cursor), line, font=font, fill=item.get('color'))
if cursor + realheight > newimg.size[1]:
return False
draw.text((0, cursor), line, font=font, fill=item.get('color'))
- cursor += i
tem['line-height']
+ cursor += i
nt(round(item['line-height'] * scale))
img.paste(newimg, (d.get('x', 0), d.get('y', 0)), newimg)
return True
img.paste(newimg, (d.get('x', 0), d.get('y', 0)), newimg)
return True
+def draw_box_with_scaling(img, d, context, get_font_path):
+ scale = 1.0
+ while scale > 0:
+ if draw_box(img, d, context, get_font_path, scale):
+ return True
+ scale -= 0.05
+
+
+
def create_thumbnail(background_path, defn, context, get_font_path):
img = Image.open(background_path)
def create_thumbnail(background_path, defn, context, get_font_path):
img = Image.open(background_path)
- d = yaml.load(defn)
+ d = yaml.
safe_
load(defn)
for boxdef in d['boxes']:
for boxdef in d['boxes']:
- drawbox(img, boxdef, context, get_font_path)
+ if not draw_box_with_scaling(img, boxdef, context, get_font_path):
+ raise ValueError()
return img
return img