Add blurhash code

This commit is contained in:
Lorenz Diener 2019-05-11 00:55:40 +02:00
pare 35c43562dd
commit bf61d4881e
S'han modificat 3 arxius amb 40 adicions i 3 eliminacions

Veure arxiu

@ -25,6 +25,7 @@ from cryptography.hazmat.primitives.asymmetric import ec
import http_ece
import base64
import json
import blurhash
try:
from urllib.parse import urlparse
@ -2315,7 +2316,42 @@ class Mastodon:
)
return json.loads(decrypted.decode('utf-8'), object_hook = Mastodon.__json_hooks)
###
# Blurhash utilities
###
def decode_blurhash(self, media_dict, out_size = (16, 16), size_per_component = True, return_linear = True):
"""
Basic media-dict blurhash decoding.
out_size is the desired result size in pixels, either absolute or per blurhash
component (this is the default).
By default, this function will return the image as linear RGB, ready for further
scaling operations. If you want to display the image directly, set return_linear
to False.
Returns the decoded blurhash image as a three-dimensional list: [height][width][3],
with the last dimension being RGB colours.
For further info and tips for advanced usage, refer to the documentation for the
blurhash module: https://github.com/halcy/blurhash-python
"""
# Figure out what size to decode to
decode_components_x, decode_components_y = blurhash.components(media_dict["blurhash"])
if size_per_component == False:
decode_size_x = out_size[0]
decode_size_y = out_size[1]
else:
decode_size_x = decode_components_x * out_size[0]
decode_size_y = decode_components_y * out_size[1]
# Decode
decoded_image = blurhash.decode(media_dict["blurhash"], decode_size_x, decode_size_y, linear = return_linear)
# And that's pretty much it.
return decoded_image
###
# Pagination
###

Veure arxiu

@ -17,7 +17,8 @@ setup(name='Mastodon.py',
'python-magic',
'decorator>=4.0.0',
'http_ece>=1.0.5',
'cryptography>=1.6.0'
'cryptography>=1.6.0',
'blurhash>=1.1.0',
],
tests_require=test_deps,
extras_require=extras,

Veure arxiu

@ -66,4 +66,4 @@ def test_push_delete(api):
api.push_subscription_delete()
with pytest.raises(MastodonNotFoundError):
api.push_subscription()
api.push_subscription()