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
Requires
- php: ^8.3
Requires (Dev)
- phpunit/phpunit: ^12
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
- Original class_dicom.php by Dean Vaughan
- DCMTK by OFFIS