跳转到主要内容

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过滤器(SHUFFLEBITSHUFFLEBYTEDELTA等)结合使用时,此插件效果不佳,也不能与分割模式一起使用,因为它们会完全改变图像;因此,必须重置这些选项。

有了这些,我们通常定义压缩和解压缩参数如下

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 (160.3 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

blosc2_openhtj2k-0.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.8 kB 查看哈希值)

上传时间 CPython 3.11 manylinux: glibc 2.17+ x86-64

blosc2_openhtj2k-0.1.2-cp311-cp311-macosx_10_9_x86_64.whl (1.0 MB 查看哈希值)

上传时间 CPython 3.11 macOS 10.9+ x86-64

blosc2_openhtj2k-0.1.2-cp310-cp310-win_amd64.whl (160.3 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

blosc2_openhtj2k-0.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.8 kB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

blosc2_openhtj2k-0.1.2-cp310-cp310-macosx_10_9_x86_64.whl (1.0 MB 查看哈希值)

上传时间 CPython 3.10 macOS 10.9+ x86-64

blosc2_openhtj2k-0.1.2-cp39-cp39-win_amd64.whl (160.3 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

blosc2_openhtj2k-0.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.8 kB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

blosc2_openhtj2k-0.1.2-cp39-cp39-macosx_10_9_x86_64.whl (1.0 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.9+ x86-64

blosc2_openhtj2k-0.1.2-cp38-cp38-win_amd64.whl (160.3 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

blosc2_openhtj2k-0.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (358.8 kB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

blosc2_openhtj2k-0.1.2-cp38-cp38-macosx_10_9_x86_64.whl (1.0 MB 查看哈希值)

上传时间 CPython 3.8 macOS 10.9+ x86-64

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面