69 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
import dicomParser from "dicom-parser";
 | 
						|
import dcmjs from 'dcmjs'
 | 
						|
import {encoder} from "./encoder";
 | 
						|
 | 
						|
export const anonymization = function (file, config) {
 | 
						|
  return new Promise(async (resolve, reject) => {
 | 
						|
    try {
 | 
						|
      const reader = new FileReader()
 | 
						|
      let AnonymizeFixedList = config.AnonymizeFixedList
 | 
						|
      let AnonymizeNotFixedList = config.AnonymizeNotFixedList
 | 
						|
      let DicomStoreInfo = config.DicomStoreInfo
 | 
						|
      reader.onload = async (event) => {
 | 
						|
        let buffer = event.target.result
 | 
						|
        let data = dicomParser.parseDicom(new Uint8Array(buffer))
 | 
						|
        let pixelDataElement = data.elements.x7fe00010
 | 
						|
        let dataset = dcmjs.data.DicomMessage.readFile(buffer)
 | 
						|
        for (var i = 0; i < AnonymizeFixedList.length; i++) {
 | 
						|
          let AnonymizeFixed = AnonymizeFixedList[i]
 | 
						|
          if (dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element]) {
 | 
						|
            dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element].Value[0] = AnonymizeFixed.ReplaceValue
 | 
						|
          } else {
 | 
						|
            dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element] = {
 | 
						|
              vr: AnonymizeFixed.ValueRepresentation,
 | 
						|
              Value: [
 | 
						|
                AnonymizeFixed.ReplaceValue
 | 
						|
              ]
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
        for (var i = 0; i < AnonymizeNotFixedList.length; i++) {
 | 
						|
          let AnonymizeNotFixed = AnonymizeNotFixedList[i]
 | 
						|
          if (AnonymizeNotFixed.Group + AnonymizeNotFixed.Element === '00100020') {
 | 
						|
            console.log(`${DicomStoreInfo.TrialCode}_${DicomStoreInfo.SubjectCode}`)
 | 
						|
            if (dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element]) {
 | 
						|
              dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element].Value[0] =  `${DicomStoreInfo.TrialCode}-${DicomStoreInfo.SubjectCode}`
 | 
						|
            } else {
 | 
						|
              dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element] = {
 | 
						|
                vr: AnonymizeNotFixed.ValueRepresentation,
 | 
						|
                Value: [
 | 
						|
                  `${DicomStoreInfo.TrialCode}_${DicomStoreInfo.SubjectCode}`
 | 
						|
                ]
 | 
						|
              }
 | 
						|
            }
 | 
						|
          } else {
 | 
						|
            if (dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element]) {
 | 
						|
              dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element].Value[0] = DicomStoreInfo[AnonymizeNotFixed.ReplaceValue] ? DicomStoreInfo[AnonymizeNotFixed.ReplaceValue].toString() : ''
 | 
						|
            } else {
 | 
						|
              dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element] = {
 | 
						|
                vr: AnonymizeNotFixed.ValueRepresentation,
 | 
						|
                Value: [
 | 
						|
                  DicomStoreInfo[AnonymizeNotFixed.ReplaceValue]
 | 
						|
                ]
 | 
						|
              }
 | 
						|
            }
 | 
						|
          }
 | 
						|
        }
 | 
						|
        let newDicomFile = dataset.write()
 | 
						|
        const bufferArray = new Uint8Array(newDicomFile)
 | 
						|
        const blob = new Blob([bufferArray], { type: 'application/octet-stream' })
 | 
						|
        resolve({blob, pixelDataElement})
 | 
						|
      };
 | 
						|
      reader.readAsArrayBuffer(file);
 | 
						|
    } catch (e) {
 | 
						|
      console.log(e)
 | 
						|
      reject(e)
 | 
						|
    }
 | 
						|
  })
 | 
						|
}
 |