aurabx/dcmtk-php

DCMTK support for PHP

Installs: 0

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 1

Forks: 0

Open Issues: 0

pkg:composer/aurabx/dcmtk-php

2.0.0 2025-12-15 13:05 UTC

This package is auto-updated.

Last update: 2025-12-15 13:08:36 UTC


README

A PHP wrapper for DCMTK (DICOM Toolkit), providing utilities for working with DICOM medical imaging files.

This is a modernized fork of class_dicom.php by Dean Vaughan, updated for PHP 8.3+ and maintained by Aurabox.

Requirements

  • PHP 8.3 or higher
  • DCMTK binaries installed and accessible
  • (Optional) ffmpeg for video conversion

Installation

1. Install DCMTK

macOS (Homebrew):

brew install dcmtk

Ubuntu/Debian:

sudo apt-get install dcmtk

Windows: Download from DCMTK releases and add to PATH.

2. Install via Composer

composer require aurabx/dcmtk-php

Configuration

The library auto-detects DCMTK binaries in common locations (/opt/homebrew/bin, /usr/local/bin). To specify a custom path:

Environment variable:

export DCMTK_PATH=/path/to/dcmtk/bin

Or in PHP:

use Aurabx\Dcmtkphp\Config;

Config::set('dcmtk-path', '/custom/path/to/dcmtk');

Usage

Reading DICOM Tags

use Aurabx\Dcmtkphp\Tag;

$tag = new Tag();
$tag->setFilePath('/path/to/image.dcm');

// Get specific tags
$patientName = $tag->getTag('0010', '0010');  // Patient Name
$modality = $tag->getTag('0008', '0060');     // Modality
$studyDate = $tag->getTag('0008', '0020');    // Study Date

// Access all tags
$allTags = $tag->tags;

Writing DICOM Tags

use Aurabx\Dcmtkphp\Tag;

$tag = new Tag();
$tag->setFilePath('/path/to/image.dcm');

$tag->writeTags([
    '0010,0010' => 'DOE^JOHN',      // Patient Name
    '0010,0020' => '12345',          // Patient ID
    '0008,0080' => 'Hospital Name',  // Institution Name
]);

Converting DICOM to JPEG

use Aurabx\Dcmtkphp\Convert;

$convert = new Convert();
$convert->file = '/path/to/image.dcm';
$convert->jpg_quality = 90;  // 0-100

$jpegPath = $convert->dcmToJpg();

Creating Thumbnails

use Aurabx\Dcmtkphp\Convert;

$convert = new Convert();
$convert->file = '/path/to/image.dcm';
$convert->tn_size = 150;  // Width in pixels

$thumbnailPath = $convert->dcmToThumbnail();

Compression/Decompression

use Aurabx\Dcmtkphp\Convert;

$convert = new Convert();
$convert->file = '/path/to/image.dcm';

// Decompress JPEG-compressed DICOM
$convert->uncompress();

// Compress to JPEG lossless
$convert->compressToJpeg();

DICOM Network Operations

C-ECHO (DICOM Ping)

use Aurabx\Dcmtkphp\Net;

$net = new Net();
$result = $net->echoscu('pacs.hospital.com', 104, 'MY_AE_TITLE', 'REMOTE_AE');

C-STORE (Send DICOM)

use Aurabx\Dcmtkphp\Net;

$net = new Net();
$net->setFilePath('/path/to/image.dcm');

// Send single file
$net->sendDcm('pacs.hospital.com', 104, 'MY_AE', 'REMOTE_AE');

// Send all files in directory
$net->sendDcm('pacs.hospital.com', 104, 'MY_AE', 'REMOTE_AE', true);

Store SCP (Receive DICOM)

use Aurabx\Dcmtkphp\Net;

$net = new Net();
$net->storeServer(
    dcm_dir: '/path/to/storage',
    ae_name: 'MY_PACS',
    port: 104
);

Validating DICOM Files

use Aurabx\Dcmtkphp\DcmtkPhp;

$dcmtk = new DcmtkPhp();
$isDicom = $dcmtk->isDicom('/path/to/file');

API Reference

Tag Class

Method Description
setFilePath(string $file) Set the DICOM file to work with
loadTags(bool $uidNames = true) Load all tags from the file
getTag(string $group, string $element) Get a specific tag value
writeTags(array $tags) Write tags to the file

Convert Class

Method Description
dcmToJpg() Convert DICOM to JPEG
dcmToThumbnail() Create a thumbnail
uncompress(string $newFile = '') Decompress JPEG DICOM
compressToJpeg(string $newFile = '') Compress to JPEG lossless
multiFrameToVideo(string $format, int $framerate) Convert multi-frame to video

Net Class

Method Description
echoscu(string $host, int $port, ...) DICOM echo (ping)
sendDcm(string $host, int $port, ...) Send DICOM file(s)
storeServer(string $dcmDir, ...) Start a DICOM storage server

Testing

composer install
vendor/bin/phpunit

Tests use mocked command execution and don't require DCMTK binaries.

License

MIT License - see licence.txt

Credits