用于Python的Numba感知的BlurHash编解码器实现

blurhash-numba的Python项目详细描述


blurhash numba:最快的python3blurhash实现,由numba提供支持

Build Status

什么是BlurHash?在

BlurHash是图像占位符的紧凑表示。在

BlurHash编码器使用图像,并提供短字符串(仅20-30个字符!)表示图像占位符的。您可以在服务的后端执行此操作,并将字符串与图像一起存储。当您向任何客户机发送数据时,您同时发送指向图像的URL和BlurHash字符串。然后,您的客户机接收字符串,并将其解码为一个图像,该图像在通过网络加载时显示。字符串足够短,可以轻松地适应您使用的任何数据格式。例如,可以很容易地将其添加为JSON对象中的字段。在

总而言之:

阅读更多关于算法here。在

安装

您可以使用pip3安装blurhash-numba

$ pip3 install blurhash-numba

如果还没有安装,Pillow(PIL)和{}一起安装,也可以选择安装

^{pr2}$

使用

编码

Asblurhash_numba.encode接受numpy数组形式的图像。您可以使用Pillowpython库转换图像文件。在

fromblurhash_numbaimportencodefromPILimportImageimportnumpyasnpimage=Image.open("256.jpg")

image

image_array=np.array(image.convert("RGB"),dtype=np.float)blurhash_code=encode(image_array,x_components=4,y_components=3)

blurhash_code
'LtL#LZR*x]jG.TRkoeayIUofM{R*'

y_componentsx_components参数调整 哈希图像中的垂直和水平AC分量。两个参数必须 是>= 1和{}。在

解码

fromblurhash_numbaimportdecodefromPILimportImageimportnumpyasnpblur_img=Image.fromarray(np.array(decode(blur_hash,256,256)).astype('uint8'))

blur_img

测试

在虚拟环境中使用pytest运行测试套件

$ pytest

常见问题解答

我为什么要用blurhash numba?在

这是目前Python中BlurHash算法(编码和解码)的最快实现,因为它使用numba直接将Python+NumPy代码转换为快速机器代码。它比halcy/blurhash-python快30-70倍,比woltapp/blurhash快2-4倍。在

如何选择X和Y分量的数量?在

这有点取决于口味。选择的组件越多,占位符中保留的信息就越多,但是BlurHash字符串的长度就越长。而且,它并不总是有太多的组件好看。我们通常是4乘3,这似乎达到了一个很好的平衡。在

但是,您应该根据图像的纵横比调整组件的数量。例如,非常宽的图像应该有更多的X分量和更少的Y分量。在

这个实现中的punch参数是什么?在

它是一个调整解码图像对比度的参数。1表示正常,较小的值将使效果更微妙,而较大的值将使效果更强。这基本上是一个设计参数,可以用来调整外观。在

从技术上讲,它的作用是放大或缩小交流元件的比例。在

学分

此项目基于halcy/blurhash-python的纯python BlurHash实现。
另外,由woltapp/blurhash提供的原始实现也是值得赞扬的。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java iText字体显示不正确   java使用ApacheFTPClient通过代理连接到FTP服务器   java是在类常量池、字符串池还是年轻一代中为字符串文本分配的空间?GC何时可以访问字符串文字?   java如何读取excel文件并将值设置为null   验证。包含在Java中不用于验证电子邮件格式的(“@”)   两个服务器实例上的java Hibernate主键冲突   java我无法在For循环(JavaFX)中设置按钮文本   单独SocketChannels的java并发读取()对于大型字节缓冲区速度较慢   OpenPDF java分组元素以保持在同一页面上   java将组件放置在任意(x,y)坐标处   java Jackson不会序列化hibernate惰性抓取字段   从Eclipse将带有库的java项目导出到可运行jar   java为什么会出现{错误?   java如何将线性布局(作为子布局)动态添加到约束布局(父布局)?