view Database/Lua/Jpeg2000Conversion.lua @ 327:33ba5b1a0dd9

note
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 18 Aug 2020 17:00:10 +0200
parents b6b207b1de0d
children
line wrap: on
line source

-- https://groups.google.com/d/msg/orthanc-users/Rc-Beb42xc8/JUgdzrmCAgAJ

function OnStoredInstance(instanceId, tags, metadata, origin)
   -- Do not compress twice the same file
   if origin['RequestOrigin'] ~= 'Lua' then

      -- Retrieve the incoming DICOM instance from Orthanc
      local dicom = RestApiGet('/instances/' .. instanceId .. '/file')

      -- Write the DICOM content to some temporary file
      local uncompressed = '/tmp/uncompressed-' .. instanceId .. '.dcm'
      local target = assert(io.open(uncompressed, 'wb'))
      target:write(dicom)
      target:close()

      -- Compress to JPEG2000 using gdcm
      local compressed = '/tmp/compressed-' .. instanceId .. '.dcm'
      os.execute('gdcmconv -U --j2k ' .. uncompressed .. ' ' .. compressed)

      -- Generate a new SOPInstanceUID for the JPEG2000 file, as
      -- gdcmconv does not do this by itself
      os.execute('dcmodify --no-backup -m "SOPInstanceUID=' ..
                    tags['SOPInstanceUID'] .. '" ' .. compressed)

      local source = assert(io.open(compressed, 'rb'))
      local jpeg2k = source:read("*all")
      source:close()

      -- Upload the JPEG2000 file and remove the uncompressed file
      RestApiDelete('/instances/' .. instanceId)
      RestApiPost('/instances', jpeg2k)
      
      -- Remove the temporary DICOM files
      os.remove(uncompressed)
      os.remove(compressed)
   end
end