Source for file example.php

Documentation is available at example.php

  1. <?php
  2. ini_set('display_errors''On');
  3. error_reporting(E_ALL E_STRICT);
  4.  
  5. require 'nanodicom.php';
  6.  
  7. $dir realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR.'samples'.DIRECTORY_SEPARATOR;
  8.  
  9. $files array();
  10. if ($handle opendir($dir)) {
  11.     while (false !== ($file readdir($handle))) 
  12.     {
  13.         if ($file != "." && $file != ".." && is_file($dir.$file)) 
  14.         {
  15.             $files[$file;
  16.         }
  17.     }
  18.     closedir($handle);
  19. }
  20.  
  21. foreach ($files as $file)
  22. {
  23.     $filename $dir.$file;
  24.     // 1) Most basic example. Fast!
  25.     try
  26.     {
  27.         echo "1) Most basic example. Fast!\n";
  28.         $dicom Nanodicom::factory($filename);
  29.         // Only a small subset of the dictionary entries were loaded
  30.         echo $dicom->parse()->profiler_diff('parse')."\n"
  31.         unset($dicom);
  32.     }
  33.     catch (Nanodicom_Exception $e)
  34.     {
  35.         echo 'File failed. '.$e->getMessage()."\n";
  36.     }
  37.  
  38.     // 2) Load only given tags. It will stop once all given tags are found. Fastest!
  39.     try
  40.     {
  41.         echo "2) Load only given tags. It will stop once all given tags are found. Fastest!\n";
  42.         $dicom Nanodicom::factory($filename'simple');
  43.         $dicom->parse(array(array(0x00100x0010)));
  44.         // Only a small subset of the dictionary entries were loaded
  45.         echo $dicom->profiler_diff('parse')."\n"
  46.         echo 'Patient name if exists: '.$dicom->value(0x00100x0010)."\n"// Patient Name if exists
  47.         // This will return nothing because dictionaries were not loaded
  48.         echo 'Patient name should be empty here: '.$dicom->PatientName."\n";
  49.         unset($dicom);
  50.     }
  51.     catch (Nanodicom_Exception $e)
  52.     {
  53.         echo 'File failed. '.$e->getMessage()."\n";
  54.     }
  55.     
  56.     // 3) Load only given tags by name. Stops once all tags are found. Not so fast.
  57.     try
  58.     {
  59.         echo "3) Load only given tags by name. Stops once all tags are found. Not so fast.\n";
  60.         $dicom Nanodicom::factory($filename'simple');
  61.         $dicom->parse(array('PatientName'));
  62.         echo $dicom->profiler_diff('parse')."\n";
  63.         echo 'Patient name if exists: '.$dicom->value(0x00100x0010)."\n"// Patient Name if exists
  64.         // Or
  65.         echo 'Patient name if exists: '.$dicom->PatientName."\n"// Patient Name if exists
  66.         unset($dicom);
  67.     }
  68.     catch (Nanodicom_Exception $e)
  69.     {
  70.         echo 'File failed. '.$e->getMessage()."\n";
  71.     }
  72.  
  73.     // 4) Load only given tags. Dump it and print certain tags. Load 'dumper' directly.
  74.     try
  75.     {
  76.         echo "4) Load only given tags. Dump it and print certain tags. Load 'dumper' directly.\n";
  77.         $dicom Nanodicom::factory($filename'dumper');
  78.         $dicom->parse(array(array(0x00100x0010)));
  79.         echo $dicom->dump();
  80.         echo $dicom->profiler_diff('parse')."\n";
  81.         // Patient Name if exists
  82.         echo 'Something should show if element exists.'.$dicom->value(0x00100x0010)."\n";
  83.         // This will return the value because 'dumper' was used and loaded the dictionaries
  84.         echo 'This should be empty, no dictionaries loaded.'.$dicom->PatientName."\n";
  85.         unset($dicom);
  86.     }
  87.     catch (Nanodicom_Exception $e)
  88.     {
  89.         echo 'File failed. '.$e->getMessage()."\n";
  90.     }
  91.  
  92.     // 5) Load simple and print certain value
  93.     try
  94.     {
  95.         echo "5) Load simple and print certain value\n";
  96.         $dicom Nanodicom::factory($filename);
  97.         $dicom->parse();
  98.         echo $dicom->profiler_diff('parse')."\n";
  99.         echo 'Patient Name: '.$dicom->value(0x00100x0010)."\n"// Patient Name if exists
  100.         unset($dicom);
  101.     }
  102.     catch (Nanodicom_Exception $e)
  103.     {
  104.         echo 'File failed. '.$e->getMessage()."\n";
  105.     }
  106.  
  107.     // 6) Load simple and extend it to 'dumper'
  108.     try
  109.     {
  110.         echo "6) Load simple and extend it to 'dumper'\n";
  111.         $dicom Nanodicom::factory($filename);
  112.         echo $dicom->parse()->extend('dumper')->dump();
  113.         echo $dicom->profiler_diff('parse').' '.$dicom->profiler_diff('dump')."\n";
  114.         unset($dicom);
  115.     }
  116.     catch (Nanodicom_Exception $e)
  117.     {
  118.         echo 'File failed. '.$e->getMessage()."\n";
  119.     }
  120.  
  121.     // 7) Load simple and extend it to 'dumper'. No need to parse, dump() does it. Parsing is done only once.
  122.     try
  123.     {
  124.         echo "7) Load simple and extend it to 'dumper'. No need to parse, dump() does it. Parsing is done only once.\n";
  125.         $dicom Nanodicom::factory($filename);
  126.         echo $dicom->extend('dumper')->dump();
  127.         echo $dicom->profiler_diff('parse').' '.$dicom->profiler_diff('dump')."\n";
  128.         unset($dicom);
  129.     }
  130.     catch (Nanodicom_Exception $e)
  131.     {
  132.         echo 'File failed. '.$e->getMessage()."\n";
  133.     }
  134.  
  135.     // 8) Load 'dumper' directly. Dump output is in html format.
  136.     try
  137.     {
  138.         echo "8) Load 'dumper' directly. Dump output is in html format.\n";
  139.         $dicom Nanodicom::factory($filename'dumper');
  140.         echo $dicom->parse()->dump('html');
  141.         echo $dicom->profiler_diff('parse').' '.$dicom->profiler_diff('dump')."\n";
  142.         unset($dicom);
  143.     }
  144.     catch (Nanodicom_Exception $e)
  145.     {
  146.         echo 'File failed. '.$e->getMessage()."\n";
  147.     }
  148.  
  149.     // 9) Load 'anonymizer' directly.
  150.     try
  151.     {
  152.         echo "9) Load 'anonymizer' directly.\n";
  153.         $dicom Nanodicom::factory($filename'anonymizer');
  154.         file_put_contents($filename.'.ex9'$dicom->anonymize());
  155.         unset($dicom);
  156.     }
  157.     catch (Nanodicom_Exception $e)
  158.     {
  159.         echo 'File failed. '.$e->getMessage()."\n";
  160.     }
  161.  
  162.     // 10) Extend 'anonymizer'. No need to call parse(), anonymize() will do it.
  163.     try
  164.     {
  165.         echo "10) Extend 'anonymizer'. No need to call parse(), anonymize() will do it.\n";
  166.         $dicom Nanodicom::factory($filename);
  167.         file_put_contents($filename.'.ex10'$dicom->extend('anonymizer')->anonymize());
  168.         unset($dicom);
  169.     }
  170.     catch (Nanodicom_Exception $e)
  171.     {
  172.         echo 'File failed. '.$e->getMessage()."\n";
  173.     }
  174.  
  175.     // 11) Double extension (and probably you can go on and on)
  176.     try
  177.     {
  178.         echo "11) Double extension (and probably you can go on and on)\n";
  179.         $dicom Nanodicom::factory($filename);
  180.         echo $dicom->extend('dumper')->dump();
  181.         file_put_contents($filename.'.ex11'$dicom->extend('anonymizer')->anonymize());
  182.         unset($dicom);
  183.     }
  184.     catch (Nanodicom_Exception $e)
  185.     {
  186.         echo 'File failed. '.$e->getMessage()."\n";
  187.     }
  188.  
  189.     // 12) Save file as Explicit VR Little Endian
  190.     try
  191.     {
  192.         echo "12) Save file as Explicit VR Little Endian\n";
  193.         $dicom Nanodicom::factory($filename);
  194.         echo $dicom->parse()->profiler_diff('parse')."\n";
  195.         // Setting values takes care of even length
  196.         // If set to '1.2.840.10008.1.2.1.99' it will use deflate
  197.         $dicom->value(0x00020x0010Nanodicom::EXPLICIT_VR_LITTLE_ENDIAN);
  198.         echo $dicom->write_file($filename.'.ex12')->profiler_diff('write')."\n";
  199.         unset($dicom);
  200.     }
  201.     catch (Nanodicom_Exception $e)
  202.     {
  203.         echo 'File failed. '.$e->getMessage()."\n";
  204.     }
  205.  
  206.     // 13) Pass file contents instead of filename
  207.     try
  208.     {
  209.         echo "13) Pass file contents instead of filename\n";
  210.         $contents file_get_contents($filename);
  211.         $dicom Nanodicom::factory($contents'dumper''blob');
  212.         echo $dicom->dump();
  213.         unset($dicom);
  214.     }
  215.     catch (Nanodicom_Exception $e)
  216.     {
  217.         echo 'File failed. '.$e->getMessage()."\n";
  218.     }
  219.  
  220.     // 14) Check if file has preamble and DICM
  221.     try
  222.     {
  223.         echo "14) Check if file has preamble and DICM\n";
  224.         $dicom Nanodicom::factory($filename);
  225.         echo 'Is DICOM? '.$dicom->is_dicom()."\n";
  226.         unset($dicom);
  227.     }
  228.     catch (Nanodicom_Exception $e)
  229.     {
  230.         echo 'File failed. '.$e->getMessage()."\n";
  231.     }
  232.  
  233.     // 15) Anonymize and save file as Explicit VR Little Endian
  234.     try
  235.     {
  236.         echo "15) Anonymize and save file as Explicit VR Little Endian\n";
  237.         $dicom Nanodicom::factory($filename);
  238.         echo $dicom->parse()->profiler_diff('parse')."\n";
  239.         // Setting values takes care of even length
  240.         // If set to '1.2.840.10008.1.2.1.99' it will use deflate
  241.         $dicom->value(0x00020x0010Nanodicom::EXPLICIT_VR_LITTLE_ENDIAN);
  242.         file_put_contents($filename.'.ex15'$dicom->extend('anonymizer')->anonymize());
  243.         unset($dicom);
  244.     }
  245.     catch (Nanodicom_Exception $e)
  246.     {
  247.         echo 'File failed. '.$e->getMessage()."\n";
  248.     }
  249.  
  250.     // 16) Provide your own dumper formatting
  251.     try
  252.     {
  253.         echo "16) Provide your own dumper formatting\n";
  254.         $formatting array(
  255.             'dataset_begin'    => '',
  256.             'dataset_end'    => "\n",
  257.             'item_begin'    => 'BEGIN',
  258.             'item_end'        => 'END',
  259.             'spacer'        => ' ',
  260.             'text_begin'    => 'TEXTBEGIN',
  261.             'text_end'        => 'TEXTEND',
  262.             'columns'        => array(
  263.                 'off'        => array('%04X'' '),
  264.                 'g'            => array('%04X'':'),
  265.                 'e'            => array('%04X'' '),
  266.                 'name'        => array('%-10.10s'' '),
  267.                 'vr'        => array('%2s'' '),
  268.                 'len'        => array('%-3d'' '),
  269.                 'val'        => array('[%s]'''),
  270.             ),
  271.         );
  272.         $dicom Nanodicom::factory($filename'dumper');
  273.         echo $dicom->dump($formatting);
  274.         unset($dicom);
  275.     }
  276.     catch (Nanodicom_Exception $e)
  277.     {
  278.         echo 'File failed. '.$e->getMessage()."\n";
  279.     }
  280.  
  281.     // 17) Anonymize on the fly and dump the contents, don't save to a file
  282.     try
  283.     {
  284.         echo "17) Anonymize on the fly and dump the contents, don't save to a file\n";
  285.         $dicom  Nanodicom::factory($filename'anonymizer');
  286.         $dicom1 Nanodicom::factory($dicom->anonymize()'dumper''blob');
  287.         echo $dicom1->dump();
  288.         unset($dicom);
  289.         unset($dicom1);
  290.     }
  291.     catch (Nanodicom_Exception $e)
  292.     {
  293.         echo 'File failed. '.$e->getMessage()."\n";
  294.     }
  295.  
  296.     // 18) Pass your own list of elements to anonymizer
  297.     try
  298.     {
  299.         echo "18) Pass your own list of elements to anonymizer\n";
  300.         // Own tag elements for anonymizing
  301.         $tags array(
  302.             array(0x00080x0020'{date|Ymd}'),            // Study Date
  303.             array(0x00080x0021'{date|Ymd}'),            // Series Date
  304.             array(0x00080x0090'physician{random}'),        // Referring Physician
  305.             array(0x00100x0010'patient{consecutive}'),  // Patient Name
  306.             array(0x00100x0020'id{consecutive}'),         // Patient ID
  307.             array(0x00100x0030'{date|Ymd}'),             // Patient Date of Birth
  308.         );
  309.         $dicom  Nanodicom::factory($filename'anonymizer');
  310.         $dicom1 Nanodicom::factory($dicom->anonymize($tags)'dumper''blob');
  311.         echo $dicom1->dump();
  312.         unset($dicom);
  313.         unset($dicom1);
  314.     }
  315.     catch (Nanodicom_Exception $e)
  316.     {
  317.         echo 'File failed. '.$e->getMessage()."\n";
  318.     }
  319.  
  320.     // 19) Pass your own list of mappings to anonymizer. Patient Name should be replace to
  321.     // 'Mapped' if 'Anonymized' is found. Case sensitive
  322.     try
  323.     {
  324.         echo "19) Pass your own list of mappings to anonymizer\n";
  325.         // Own tag elements for anonymizing
  326.         $tags array(
  327.             array(0x00080x0020'{date|Ymd}'),            // Study Date
  328.             array(0x00080x0021'{date|Ymd}'),            // Series Date
  329.             array(0x00080x0090'physician{random}'),        // Referring Physician
  330.             array(0x00100x0010'patient{consecutive}'),  // Patient Name
  331.             array(0x00100x0020'id{consecutive}'),         // Patient ID
  332.             array(0x00100x0030'{date|Ymd}'),             // Patient Date of Birth
  333.         );
  334.         $replacements array(
  335.             array(0x00100x0010'anonymized''Mapped'),
  336.         );
  337.         $dicom  Nanodicom::factory($filename'anonymizer');
  338.         $dicom1 Nanodicom::factory($dicom->anonymize($tags$replacements)'dumper''blob');
  339.         echo $dicom1->dump();
  340.         file_put_contents($filename.'.ex19'$dicom1->write());
  341.         unset($dicom);
  342.         unset($dicom1);
  343.     }
  344.     catch (Nanodicom_Exception $e)
  345.     {
  346.         echo 'File failed. '.$e->getMessage()."\n";
  347.     }
  348.  
  349.     // 20) Gets the images from the dicom object if they exist. This example is for gd
  350.     try
  351.     {
  352.         echo "20) Gets the images from the dicom object if they exist. This example is for gd\n";
  353.         $dicom  Nanodicom::factory($filename'pixeler');
  354.         if file_exists($filename.'.0.jpg'))
  355.         {
  356.             
  357.             $images $dicom->get_images();
  358.             // If using another library, for example, imagemagick, the following should be done:
  359.             // $images = $dicom->set_driver('imagick')->get_images();
  360.  
  361.             if ($images !== FALSE)
  362.             {
  363.                 foreach ($images as $index => $image)
  364.                 {
  365.                     // Defaults to jpg
  366.                     $test->write_image($image$dir.$file.'.'.$index);
  367.                     // To write another format, pass the format in second parameter.
  368.                     // This will write a png image instead
  369.                     // $test->write_image($image, $dir.$file.'.'.$index, 'png');
  370.                 }
  371.             }
  372.             else
  373.             {
  374.                 echo "There are no DICOM images or transfer syntax not supported yet.\n";
  375.             }
  376.             $images NULL;
  377.         }
  378.         else
  379.         {
  380.             echo "Image already exists\n";
  381.         }
  382.         unset($dicom);
  383.     }
  384.     catch (Nanodicom_Exception $e)
  385.     {
  386.         echo 'File failed. '.$e->getMessage()."\n";
  387.     }
  388.     
  389.     // 21) Prints summary report
  390.     try
  391.     {
  392.         echo "21) Prints summary report\n";
  393.         $dicom  Nanodicom::factory($filename);
  394.         echo $dicom->summary();
  395.         unset($dicom);
  396.     }
  397.     catch (Nanodicom_Exception $e)
  398.     {
  399.         echo 'File failed. '.$e->getMessage()."\n";
  400.     }
  401. }

Documentation generated on Thu, 08 Sep 2011 17:22:19 -0700 by phpDocumentor 1.4.3