summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-pylibjpeg-rle.spec426
-rw-r--r--sources1
3 files changed, 428 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..ad85f08 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pylibjpeg-rle-1.3.0.tar.gz
diff --git a/python-pylibjpeg-rle.spec b/python-pylibjpeg-rle.spec
new file mode 100644
index 0000000..82daf16
--- /dev/null
+++ b/python-pylibjpeg-rle.spec
@@ -0,0 +1,426 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pylibjpeg-rle
+Version: 1.3.0
+Release: 1
+Summary: Python bindings for a fast RLE decoder/encoder, with a focus on use as a plugin for pylibjpeg
+License: MIT
+URL: https://github.com/pydicom/pylibjpeg-rle
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/83/6b/1cb32f6d8f2ae1e7b2b700f4adc9737aa2a40fc90db374c2a060a09c8917/pylibjpeg-rle-1.3.0.tar.gz
+
+Requires: python3-numpy
+Requires: python3-pydicom
+Requires: python3-numpy
+Requires: python3-asv
+Requires: python3-pytest
+Requires: python3-pydicom
+Requires: python3-numpy
+
+%description
+[![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests)
+[![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle)
+[![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle)
+[![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)
+
+## pylibjpeg-rle
+
+A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper.
+
+Linux, MacOS and Windows are all supported.
+
+### Installation
+#### Installing the current release
+```bash
+pip install pylibjpeg-rle
+```
+#### Installing the development version
+
+Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and
+[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install
+[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16).
+```bash
+git clone https://github.com/pydicom/pylibjpeg-rle
+cd pylibjpeg-rle
+python -m pip install .
+```
+
+### Supported Transfer Syntaxes
+
+| UID | Description | Decoding | Encoding |
+| --- | --- | --- | --- |
+| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes |
+
+### Usage
+#### Decoding
+##### With pylibjpeg
+
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+
+ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm"))
+arr = ds.pixel_array
+```
+
+##### Standalone with pydicom
+Alternatively you can use the included functions to decode a given dataset:
+```python
+from rle import pixel_array, generate_frames
+
+# Return the entire Pixel Data as an ndarray
+arr = pixel_array(ds)
+
+# Generator function that only processes 1 frame at a time,
+# may help reduce memory usage when dealing with large Pixel Data
+for arr in generate_frames(ds):
+ print(arr.shape)
+```
+
+#### Encoding
+##### Standalone with pydicom
+
+Convert uncompressed pixel data to RLE encoding and save:
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+from pydicom.uid import RLELossless
+
+from rle import pixel_data
+
+# Get the uncompressed pixel data
+ds = dcmread(get_testdata_file("OBXXXX1A.dcm"))
+arr = ds.pixel_array
+
+# RLE encode and encapsulate `arr`
+ds.PixelData = pixel_data(arr, ds)
+# Set the correct *Transfer Syntax UID*
+ds.file_meta.TransferSyntaxUID = RLELossless
+ds.save_as('as_rle.dcm')
+```
+
+### Benchmarks
+#### Decoding
+
+Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s |
+| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s |
+| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s |
+| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s |
+| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s |
+| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s |
+| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s |
+| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s |
+| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s |
+| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s |
+| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s |
+| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s |
+
+#### Encoding
+
+Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s |
+| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s |
+| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s |
+| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s |
+| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s |
+| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s |
+
+
+
+
+%package -n python3-pylibjpeg-rle
+Summary: Python bindings for a fast RLE decoder/encoder, with a focus on use as a plugin for pylibjpeg
+Provides: python-pylibjpeg-rle
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+BuildRequires: python3-cffi
+BuildRequires: gcc
+BuildRequires: gdb
+%description -n python3-pylibjpeg-rle
+[![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests)
+[![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle)
+[![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle)
+[![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)
+
+## pylibjpeg-rle
+
+A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper.
+
+Linux, MacOS and Windows are all supported.
+
+### Installation
+#### Installing the current release
+```bash
+pip install pylibjpeg-rle
+```
+#### Installing the development version
+
+Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and
+[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install
+[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16).
+```bash
+git clone https://github.com/pydicom/pylibjpeg-rle
+cd pylibjpeg-rle
+python -m pip install .
+```
+
+### Supported Transfer Syntaxes
+
+| UID | Description | Decoding | Encoding |
+| --- | --- | --- | --- |
+| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes |
+
+### Usage
+#### Decoding
+##### With pylibjpeg
+
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+
+ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm"))
+arr = ds.pixel_array
+```
+
+##### Standalone with pydicom
+Alternatively you can use the included functions to decode a given dataset:
+```python
+from rle import pixel_array, generate_frames
+
+# Return the entire Pixel Data as an ndarray
+arr = pixel_array(ds)
+
+# Generator function that only processes 1 frame at a time,
+# may help reduce memory usage when dealing with large Pixel Data
+for arr in generate_frames(ds):
+ print(arr.shape)
+```
+
+#### Encoding
+##### Standalone with pydicom
+
+Convert uncompressed pixel data to RLE encoding and save:
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+from pydicom.uid import RLELossless
+
+from rle import pixel_data
+
+# Get the uncompressed pixel data
+ds = dcmread(get_testdata_file("OBXXXX1A.dcm"))
+arr = ds.pixel_array
+
+# RLE encode and encapsulate `arr`
+ds.PixelData = pixel_data(arr, ds)
+# Set the correct *Transfer Syntax UID*
+ds.file_meta.TransferSyntaxUID = RLELossless
+ds.save_as('as_rle.dcm')
+```
+
+### Benchmarks
+#### Decoding
+
+Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s |
+| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s |
+| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s |
+| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s |
+| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s |
+| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s |
+| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s |
+| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s |
+| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s |
+| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s |
+| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s |
+| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s |
+
+#### Encoding
+
+Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s |
+| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s |
+| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s |
+| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s |
+| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s |
+| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s |
+
+
+
+
+%package help
+Summary: Development documents and examples for pylibjpeg-rle
+Provides: python3-pylibjpeg-rle-doc
+%description help
+[![Build Status](https://github.com/pydicom/pylibjpeg-rle/workflows/unit-tests/badge.svg)](https://github.com/pydicom/pylibjpeg-rle/actions?query=workflow%3Aunit-tests)
+[![codecov](https://codecov.io/gh/pydicom/pylibjpeg-rle/branch/master/graph/badge.svg)](https://codecov.io/gh/pydicom/pylibjpeg-rle)
+[![PyPI version](https://badge.fury.io/py/pylibjpeg-rle.svg)](https://badge.fury.io/py/pylibjpeg-rle)
+[![Python versions](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)](https://img.shields.io/pypi/pyversions/pylibjpeg-rle.svg)
+
+## pylibjpeg-rle
+
+A fast DICOM ([PackBits](https://en.wikipedia.org/wiki/PackBits)) RLE plugin for [pylibjpeg](https://github.com/pydicom/pylibjpeg), written in Rust with a Python 3.7+ wrapper.
+
+Linux, MacOS and Windows are all supported.
+
+### Installation
+#### Installing the current release
+```bash
+pip install pylibjpeg-rle
+```
+#### Installing the development version
+
+Make sure [Python](https://www.python.org/), [Git](https://git-scm.com/) and
+[Rust](https://www.rust-lang.org/) are installed. For Windows, you also need to install
+[Microsoft's C++ Build Tools](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16).
+```bash
+git clone https://github.com/pydicom/pylibjpeg-rle
+cd pylibjpeg-rle
+python -m pip install .
+```
+
+### Supported Transfer Syntaxes
+
+| UID | Description | Decoding | Encoding |
+| --- | --- | --- | --- |
+| 1.2.840.10008.1.2.5 | RLE Lossless | Yes | Yes |
+
+### Usage
+#### Decoding
+##### With pylibjpeg
+
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+
+ds = dcmread(get_testdata_file("OBXXXX1A_rle.dcm"))
+arr = ds.pixel_array
+```
+
+##### Standalone with pydicom
+Alternatively you can use the included functions to decode a given dataset:
+```python
+from rle import pixel_array, generate_frames
+
+# Return the entire Pixel Data as an ndarray
+arr = pixel_array(ds)
+
+# Generator function that only processes 1 frame at a time,
+# may help reduce memory usage when dealing with large Pixel Data
+for arr in generate_frames(ds):
+ print(arr.shape)
+```
+
+#### Encoding
+##### Standalone with pydicom
+
+Convert uncompressed pixel data to RLE encoding and save:
+```python
+from pydicom import dcmread
+from pydicom.data import get_testdata_file
+from pydicom.uid import RLELossless
+
+from rle import pixel_data
+
+# Get the uncompressed pixel data
+ds = dcmread(get_testdata_file("OBXXXX1A.dcm"))
+arr = ds.pixel_array
+
+# RLE encode and encapsulate `arr`
+ds.PixelData = pixel_data(arr, ds)
+# Set the correct *Transfer Syntax UID*
+ds.file_meta.TransferSyntaxUID = RLELossless
+ds.save_as('as_rle.dcm')
+```
+
+### Benchmarks
+#### Decoding
+
+Time per 1000 decodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A_rle.dcm | 480,000 | 480,000 | 4.89 s | 0.79 s |
+| OBXXXX1A_rle_2frame.dcm | 960,000 | 960,000 | 9.89 s | 1.65 s |
+| SC_rgb_rle.dcm | 10,000 | 30,000 | 0.20 s | 0.15 s |
+| SC_rgb_rle_2frame.dcm | 20,000 | 60,000 | 0.32 s | 0.18 s |
+| MR_small_RLE.dcm | 4,096 | 8,192 | 0.35 s | 0.13 s |
+| emri_small_RLE.dcm | 40,960 | 81,920 | 1.13 s | 0.28 s |
+| SC_rgb_rle_16bit.dcm | 10,000 | 60,000 | 0.33 s | 0.17 s |
+| SC_rgb_rle_16bit_2frame.dcm | 20,000 | 120,000 | 0.56 s | 0.21 s |
+| rtdose_rle_1frame.dcm | 100 | 400 | 0.12 s | 0.13 s |
+| rtdose_rle.dcm | 1,500 | 6,000 | 0.53 s | 0.26 s |
+| SC_rgb_rle_32bit.dcm | 10,000 | 120,000 | 0.56 s | 0.19 s |
+| SC_rgb_rle_32bit_2frame.dcm | 20,000 | 240,000 | 1.03 s | 0.28 s |
+
+#### Encoding
+
+Time per 1000 encodes, pydicom's default RLE handler vs. pylibjpeg-rle
+
+| Dataset | Pixels | Bytes | pydicom | pylibjpeg-rle |
+| --- | --- | --- | --- | --- |
+| OBXXXX1A.dcm | 480,000 | 480,000 | 30.7 s | 1.36 s |
+| SC_rgb.dcm | 10,000 | 30,000 | 1.80 s | 0.09 s |
+| MR_small.dcm | 4,096 | 8,192 | 2.29 s | 0.04 s |
+| SC_rgb_16bit.dcm | 10,000 | 60,000 | 3.57 s | 0.17 s |
+| rtdose_1frame.dcm | 100 | 400 | 0.19 s | 0.003 s |
+| SC_rgb_32bit.dcm | 10,000 | 120,000 | 7.20 s | 0.33 s |
+
+
+
+
+%prep
+%autosetup -n pylibjpeg-rle-1.3.0
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-pylibjpeg-rle -f filelist.lst
+%dir %{python3_sitearch}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed Apr 12 2023 Python_Bot <Python_Bot@openeuler.org> - 1.3.0-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..425ae05
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+44bff9f71a7f0e969f2b5a24afbc48c7 pylibjpeg-rle-1.3.0.tar.gz