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.
- PHP 8.3 or higher
- DCMTK binaries installed and accessible
- (Optional) ffmpeg for video conversion
macOS (Homebrew):
brew install dcmtkUbuntu/Debian:
sudo apt-get install dcmtkWindows: Download from DCMTK releases and add to PATH.
composer require aurabx/dcmtk-phpThe 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/binOr in PHP:
use Aurabx\Dcmtkphp\Config;
Config::set('dcmtk-path', '/custom/path/to/dcmtk');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;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
]);use Aurabx\Dcmtkphp\Convert;
$convert = new Convert();
$convert->file = '/path/to/image.dcm';
$convert->jpg_quality = 90; // 0-100
$jpegPath = $convert->dcmToJpg();use Aurabx\Dcmtkphp\Convert;
$convert = new Convert();
$convert->file = '/path/to/image.dcm';
$convert->tn_size = 150; // Width in pixels
$thumbnailPath = $convert->dcmToThumbnail();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();use Aurabx\Dcmtkphp\Net;
$net = new Net();
$result = $net->echoscu('pacs.hospital.com', 104, 'MY_AE_TITLE', 'REMOTE_AE');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);use Aurabx\Dcmtkphp\Net;
$net = new Net();
$net->storeServer(
dcm_dir: '/path/to/storage',
ae_name: 'MY_PACS',
port: 104
);use Aurabx\Dcmtkphp\DcmtkPhp;
$dcmtk = new DcmtkPhp();
$isDicom = $dcmtk->isDicom('/path/to/file');| 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 |
| 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 |
| 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 |
composer install
vendor/bin/phpunitTests use mocked command execution and don't require DCMTK binaries.
MIT License - see licence.txt
- Original class_dicom.php by Dean Vaughan
- DCMTK by OFFIS