__init__.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. def loadFontSize(text, imagesize, fontpath):
  4. from PIL import ImageFont
  5. fontsize = 1 # starting font size
  6. font = ImageFont.truetype(fontpath, fontsize)
  7. splittext = text.splitlines()
  8. while True:
  9. fontsize += 1
  10. font = ImageFont.truetype(fontpath, fontsize)
  11. # fsize = draw.textsize(text, font=font)
  12. fsize = getFontSize(font, splittext)
  13. print("Fontsize:", font.size, fsize, imagesize)
  14. if ((fsize[0] >= imagesize[0]) or (fsize[1] >= imagesize[1])):
  15. break
  16. fontsize -= 1
  17. font = ImageFont.truetype(fontpath, fontsize)
  18. fsize = getFontSize(font, splittext)
  19. print("Fontsize:", font.size, fsize, imagesize)
  20. return font
  21. def getFontSize(font,splittext):
  22. fsize = [0,0]
  23. for l in splittext:
  24. fs = font.getsize(l)
  25. if fsize[0] < fs[0]:
  26. fsize[0] = fs[0]
  27. fsize[1] += fs[1]
  28. print("Fs:", fsize,fs)
  29. return fsize
  30. def wrapText(text, aspect_ratio, font_factor=3):
  31. import textwrap
  32. text = " ".join(text.split())
  33. iter_width = len(text)
  34. splittext = [text]
  35. longestline = getLongestLine(splittext)
  36. while len(longestline) > font_factor * aspect_ratio * len(splittext):
  37. iter_width -= 1
  38. splittext = textwrap.wrap(text, width=iter_width)
  39. longestline = getLongestLine(splittext)
  40. print("Wrap:", iter_width, "Rows:",len(splittext))
  41. return "\n".join(splittext)
  42. def fitText(isize, fontpath, text):
  43. text = wrapText(text, (isize[0]/isize[1]))
  44. font = loadFontSize(text, isize, fontpath)
  45. return text, font
  46. def getLongestLine(split):
  47. longline = ""
  48. for l in split:
  49. if len(l) > len(longline):
  50. longline = l
  51. return longline
  52. def convert_qr(quote):
  53. import qrcode
  54. qr = qrcode.QRCode(version=1, box_size=3, border=1)
  55. qr.add_data("https://css.tsimnet.eu")
  56. qr.make()
  57. return qr.make_image().get_image()
  58. def getQuote( maxLength=100 ):
  59. try:
  60. import requests
  61. # r = requests.get('https://type.fit/api/quotes')
  62. r = requests.get('http://api.quotable.io/random?maxLength='+str(maxLength))
  63. r = r.json()
  64. text = r
  65. except Exception as ex:
  66. return
  67. return text
  68. def getRedditJson(reddit,res,interval):
  69. import requests
  70. from urllib.parse import urlencode
  71. base_url = f"https://www.reddit.com/r/{reddit}/{res}.json"
  72. headers = {
  73. 'User-agent': 'raspi-zero-waveshare'
  74. }
  75. params = urlencode({
  76. "t": interval,
  77. })
  78. url = base_url + '?' + str(params)
  79. print(url)
  80. r = requests.get(url, headers=headers)
  81. return r.json()
  82. def short_url(text):
  83. import requests
  84. from urllib.parse import urlencode
  85. try:
  86. params = urlencode({
  87. "url": text,
  88. })
  89. r = requests.get('https://tinyurl.com/api-create.php?'+str(params))
  90. t = r.text
  91. except Exception as ex:
  92. t = str(ex)[:100]
  93. return t