Skip to main content

A Python framework for decoding JPEG files, with a focus on supporting pydicom

Project description

codecov Build Status PyPI version Python versions

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

pylibjpeg-1.1.0.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

pylibjpeg-1.1.0-py3-none-any.whl (29.7 kB view details)

Uploaded Python 3

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

Hashes for pylibjpeg-1.1.0.tar.gz
Algorithm Hash digest
SHA256 32f0719d7ae0339dbd25954eea1aa1d40f6d17b5dc5926b3cd8663d69b99b125
MD5 d65ff80c4616149246c93feec3a21df0
BLAKE2b-256 8a9e047d6890b5830455702239eb9627809b6b80538442b7cfe9a411ed9b86b1

See more details on using hashes here.

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

Hashes for pylibjpeg-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c0bbc684f469f92033b1322fed9d8fc5cbffda612ec3030910e806671fff0610
MD5 c0360c4c163f442355e9921e2ae126bc
BLAKE2b-256 e7201952f99ae3e7561b16473fe08d19c60d307ce78a59135ff31017cb1c1b0c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page