OpenHTJ2K编解码器的C-Blosc2库插件
项目描述
Blosc2 OpenHTJ2K
这是一个Blosc2的动态编解码器插件,允许使用高吞吐量JPEG 2000标准压缩和解压缩图像。与传统的JPEG 2000相比,HT版本提高了性能。有关详细信息,请参阅HTJ2K白皮书。
为了提供此功能,此插件使用了OpenHTJ2K库。
安装
Blosc2 OpenHTJ2K插件作为Python wheel分发
pip install blosc2-openhtj2k
有适用于Linux、macOS和Windows的wheel。目前,仅支持x86-64架构。
从Python使用
示例未包含在wheel中,但您可以克隆项目
git clone https://github.com/Blosc/blosc2_openhtj2k.git
cd blosc2_openhtj2k
在示例文件夹中有压缩和解压缩脚本,两个脚本都接受两个必需的参数,分别是输入文件和输出文件
-
compress.py
将第一个参数视为图像的路径,第二个参数视为输出文件的路径,该输出文件应以.b2nd
扩展名结尾。 -
decompress.py
将第一个参数视为由compress.py
生成的Blosc2文件的路径,第二个参数视为输出图像的路径。
要尝试这些脚本,首先安装所需的软件
pip install blosc2-openhtj2k
pip install Pillow
然后您可以从示例文件夹中运行脚本,例如
cd examples
python compress.py kodim23.png /tmp/kodim23.b2nd
python decompress.py /tmp/kodim23.b2nd /tmp/kodim23.png
请注意,示例不能从项目的根目录中运行,因为它将无法导入blosc2_openhtj2k
,因为有一个同名目录。
有关这些命令接受的参数的详细信息,请使用--help
选项调用它们。
以下是关于如何完成压缩和解压缩的更详细文档。
压缩
加载图像
要压缩图像,首先需要加载它,然后将其转换为Numpy数组,然后Blosc2将压缩该数组。
为了加载图像并获得Numpy数组,我们将使用Pillow库
from PIL import Image
im = Image.open(args.inputfile)
np_array = np.asarray(im)
转换Numpy数组
在将此数组馈送到Blosc2之前,我们需要对其进行一些处理,因为其结构与OpenHTJ2K插件期望的结构不同。如compress.py
脚本所示,这些是所需的转换,带有注释
# Transpose the array so the channel (color) comes first
# Change from (height, width, channel) to (channel, width, height)
np_array = np.transpose(np_array, (2, 1, 0))
# Make the array C-contiguous
np_array = np_array.copy()
# The library expects 4 bytes per color (xx 00 00 00), so change the type
np_array = np_array.astype('uint32')
插件选项
可以配置OpenHTJ2K插件以多种选项,此步骤是可选的。例如
import blosc2_openhtj2k
blosc2_openhtj2k.set_params_defaults(
transformation=0, # 0:lossy 1:lossless (default is 1)
)
设置上述选项后,这些选项将保留,直到再次更改。
Blosc2参数
注意
-
必须告诉Blosc2使用OpenHTJ2K编解码器,传递其对应的id
BLOSC_CODEC_OPENHTJ2K
。 -
此时插件不支持多线程,因此必须显式地将线程数定义为1。
-
OpenHTJ2K期望与图像一起工作,因此当与常规Blosc2过滤器(
SHUFFLE
、BITSHUFFLE
、BYTEDELTA
等)结合使用时,此插件效果不佳,也不能与分割模式一起使用,因为它们会完全改变图像;因此,必须重置这些选项。
有了这些,我们通常定义压缩和解压缩参数如下
nthreads = 1
cparams = {
'codec': blosc2.Codec.OPENHTJ2K,
'nthreads': nthreads,
'filters': [],
'splitmode': blosc2.SplitMode.NEVER_SPLIT,
}
dparams = {'nthreads': nthreads}
实际的OpenHTJ2K压缩
现在我们可以调用使用Blosc2和OpenHTJ2K插件压缩图像的命令
bl_array = blosc2.asarray(
np_array,
chunks=np_array.shape,
blocks=np_array.shape,
cparams=cparams,
dparams=dparams,
)
注意
-
我们将块和块形状设置为与图像大小匹配,因为这经过了良好的测试。
-
如果传递了
urlpath
,Blosc2数组将被保存到指定的路径,例如`urlpath=/tmp/image.b2nd`。
解压缩
如果Blosc2数组是用不同的程序保存到文件的,我们需要先读取它
array = blosc2.open(args.inputfile)
现在解压缩它很容易,我们将得到一个Numpy数组
np_array = array[:]
但在获得图像之前,我们必须撤销压缩时所做的转换
# Get back 1 byte per color, change dtype from uint32 to uint8
np_array = np_array.astype('uint8')
# Get back the original shape: height, width, channel
np_array = np.transpose(np_array, (2, 1, 0))
现在我们可以从Numpy数组中获取Pillow图像
im = Image.fromarray(np_array)
它可以保存或显示
im.save(...)
im.show()
项目详情
blosc2_openhtj2k-0.1.2-cp311-cp311-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | c00adf23b6c21f01925f0d067ccf13666a651eeced9ba2af47cb28f2f903869f |
|
MD5 | b992d94e9b8fa4449dde08608b8aaa5f |
|
BLAKE2b-256 | 37118994b719bedad791297681f4b5ed7c2a1b0daea11809ad9fd260a2bb721b |
blosc2_openhtj2k-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d5a5271258518cb3b4ca4371a5ac2631c1114cefe02536f5adb41b4b72f365c6 |
|
MD5 | aaa0075dd44d5bd3dd5fc3bfcb938f1d |
|
BLAKE2b-256 | cd32f0f60b86aa01bd8543dd0ac00ae271090433b46bd09281b9d3d3a44deed0 |
哈希值用于blosc2_openhtj2k-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 46f1f8a01a2d85e07ef658a183a80f42308004f40630c21a5941c68cc7af03c3 |
|
MD5 | c4258f8748bede9d979db5c8a639a0a7 |
|
BLAKE2b-256 | d6d155d63043753ca350c9e9ec5cd7ec231ea6d07a8bb46446334ef366835749 |
哈希值用于blosc2_openhtj2k-0.1.2-cp310-cp310-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5e7ce77e8766f363884713b50d829d55517c75332cb9d1c9b17edc92f88d7e75 |
|
MD5 | 01aba6870ca545333f0a424503814b0a |
|
BLAKE2b-256 | d6564790bc1b58de1b3ba5c0120953cf98b893a6f388e87e82b76dac0bcd1603 |
哈希值用于blosc2_openhtj2k-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d61a403e3dc114a9378366664003adfe9cb867ce451ad2a8d3dd0540d7b41fe9 |
|
MD5 | 667651735d99411ec6b452f563ac44f1 |
|
BLAKE2b-256 | eadf2f59c31700292f4d7d3c5a8825ccd648937cf1081d9233ebdb694e8a09bd |
哈希值用于blosc2_openhtj2k-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f3e47a0349b2ab566dc74dbe930d2c9cdad1def29cbdff27faa61b9aedfe69c3 |
|
MD5 | 31be749ef5e22720ca9cdb29bd649e01 |
|
BLAKE2b-256 | c8d2095fa01285d3411d075ae337119ee5e74eb5a398b406a3f1cbf63799e9c3 |
哈希值用于blosc2_openhtj2k-0.1.2-cp39-cp39-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 237321c0d49e10d644698446d110ae28b5ca97c50bd873f277ee27354e82f72b |
|
MD5 | 3c3da8a70dc27c0f1ccdc09378ac5138 |
|
BLAKE2b-256 | 099b6f13e861db21f4336495055592b9cb52a6099faf04e22f8cba27a05b6afb |
哈希值用于blosc2_openhtj2k-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 900a6e5617a0100db8885f492ecc17b0e3130c0e02120f63066c274a8f441448 |
|
MD5 | 567b52e05234eb8fcd7d5b2f9a6e3dfb |
|
BLAKE2b-256 | bd293f5b02463003059afa304a6d3a3cb5bf443e8f3c64fa3ed9b74eba58cf9b |
哈希值用于blosc2_openhtj2k-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8ba21a577ca83a84f74840346b82582b42f5558aea08428bc2f71c7c8aa1c22d |
|
MD5 | 21659698ed830ff20b688026e1b81b40 |
|
BLAKE2b-256 | bae23888cd0b28111e52b3f83073862c9aa8c8244b12ac80d41986ea821338da |
哈希值用于blosc2_openhtj2k-0.1.2-cp38-cp38-win_amd64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | dd16ab1c474b192b2aab36556ff7ddf4c57a6e9bea948262699bdb260894187d |
|
MD5 | a34080b145fbe3ca1f0d72bb8b729e06 |
|
BLAKE2b-256 | e8eadc85a2f6041eaebcc9a72cdad27fec8742ff04cceea179ceca178e0ded15 |
哈希值用于blosc2_openhtj2k-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 92bdce204c3fa37da8c2011cb3a6cc729c3bd9a66ab9adb2b2ad90fe1b177e6b |
|
MD5 | a95b454deb177618b53e9635d3d5a443 |
|
BLAKE2b-256 | 99d13b68260100ea96d6bf53e15765b773507bd7ffa349f39c19fbdfb255e2d0 |
哈希值用于blosc2_openhtj2k-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e335a5c20cb7a945f681cf89bb65515280b10809498b1b8ab99abeacf4041fd4 |
|
MD5 | 44d6624ad45217910993e6d0c8ee19f5 |
|
BLAKE2b-256 | bab34fdced4b90e414b9ffd9854ee02f282ef55225a215f89acf80b684c9ba43 |