A Python framework for decoding JPEG files, with a focus on supporting pydicom
Project description
pylibjpeg
A Python 3.6+ framework for decoding JPEG images, with a focus on providing JPEG support for pydicom.
Installation
Installing the current release
pip install pylibjpeg
Installing the development version
Make sure Git is installed, then
git clone https://github.com/pydicom/pylibjpeg
python -m pip install pylibjpeg
Plugins
One or more plugins are required before pylibjpeg is able to decode JPEG images. To decode a given JPEG format or DICOM Transfer Syntax you first have to install the corresponding package:
JPEG Format
Format | Decode? | Encode? | Plugin | Based on |
---|---|---|---|---|
JPEG, JPEG-LS and JPEG XT | Yes | No | pylibjpeg-libjpeg | libjpeg |
JPEG 2000 | Yes | No | pylibjpeg-openjpeg | openjpeg |
DICOM Transfer Syntax
UID | Description | Plugin |
---|---|---|
1.2.840.10008.1.2.4.50 | JPEG Baseline (Process 1) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.51 | JPEG Extended (Process 2 and 4) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.57 | JPEG Lossless, Non-Hierarchical (Process 14) | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.70 | JPEG Lossless, Non-Hierarchical, First-Order Prediction (Process 14, Selection Value 1) |
pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.80 | JPEG-LS Lossless | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.81 | JPEG-LS Lossy (Near-Lossless) Image Compression | pylibjpeg-libjpeg |
1.2.840.10008.1.2.4.90 | JPEG 2000 Image Compression (Lossless Only) | pylibjpeg-openjpeg |
1.2.840.10008.1.2.4.91 | JPEG 2000 Image Compression | pylibjpeg-openjpeg |
1.2.840.10008.1.2.5 | RLE Lossless | Not yet supported |
If you're not sure what the dataset's Transfer Syntax UID is, it can be determined with:
>>> from pydicom import dcmread
>>> ds = dcmread('path/to/dicom_file')
>>> ds.file_meta.TransferSyntaxUID.name
Usage
With pydicom
Assuming you already have pydicom v1.4+ and suitable plugins installed:
from pydicom import dcmread
from pydicom.data import get_testdata_file
# Importing the package adds the pixel data handler to pydicom
import pylibjpeg
# With the pylibjpeg-libjpeg plugin
ds = dcmread(get_testdata_file('JPEG-LL.dcm'))
jpg_arr = ds.pixel_array
# With the pylibjpeg-openjpeg plugin
ds = dcmread(get_testdata_file('JPEG2000.dcm'))
j2k_arr = ds.pixel_array
For datasets with multiple frames you can reduce your memory usage by
processing each frame separately using the generate_frames()
generator
function:
from pydicom import dcmread
from pydicom.data import get_testdata_file
from pylibjpeg import generate_frames
ds = dcmread(get_testdata_file('color3d_jpeg_baseline.dcm'))
frames = generate_frames(ds)
arr = next(frames)
Standalone JPEG decoding
You can also just use pylibjpeg to decode JPEG images to a numpy ndarray, provided you have a suitable plugin installed:
from pylibjpeg import decode
# Can decode using the path to a JPG file as str or path-like
arr = decode('filename.jpg')
# Or a file-like...
with open('filename.jpg', 'rb') as f:
arr = decode(f)
# Or bytes...
with open('filename.jpg', 'rb') as f:
arr = decode(f.read())
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pylibjpeg-1.1.0.tar.gz
.
File metadata
- Download URL: pylibjpeg-1.1.0.tar.gz
- Upload date:
- Size: 25.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32f0719d7ae0339dbd25954eea1aa1d40f6d17b5dc5926b3cd8663d69b99b125 |
|
MD5 | d65ff80c4616149246c93feec3a21df0 |
|
BLAKE2b-256 | 8a9e047d6890b5830455702239eb9627809b6b80538442b7cfe9a411ed9b86b1 |
File details
Details for the file pylibjpeg-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: pylibjpeg-1.1.0-py3-none-any.whl
- Upload date:
- Size: 29.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.8.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c0bbc684f469f92033b1322fed9d8fc5cbffda612ec3030910e806671fff0610 |
|
MD5 | c0360c4c163f442355e9921e2ae126bc |
|
BLAKE2b-256 | e7201952f99ae3e7561b16473fe08d19c60d307ce78a59135ff31017cb1c1b0c |