irc_web/.svn/pristine/26/26d3902a73a32f95acbda79ca91...

140 lines
4.9 KiB
Plaintext

<template>
<div>
<el-button plain @click="open">上传视频文件</el-button>
<el-button plain @click="$refs.file.click()">选择dicom文件</el-button>
<input
ref="file"
type="file"
name="file"
webkitdirectory
multiple
@change="beginScanFiles($event)"
/>
<div>
<canvas id="img"></canvas>
</div>
<el-dialog title="上传视频" :close-on-click-modal="false" :visible.sync="IsOpen" width="450px" append-to-body>
<my-videos @uploadOver="uploadOver" />
</el-dialog>
</div>
</template>
<script>
import MyVideos from '@/components/videos'
import * as cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'
// import charLS from '@cornerstonejs/codec-charls';
import * as cornerstone from 'cornerstone-core'
import dicomParser from "dicom-parser";
import { Anonymizer } from "dicomedit";
console.log(Anonymizer)
const script = `version "6.3"
temp := "chany"
(0008,0008) := "test"
(0010,0010) := temp
`;
const CharLs = require('@cornerstonejs/codec-charls')
const codecWrapper = {
codec: undefined,
Decoder: undefined,
Encoder: undefined,
encoderName: "JpegLSEncoder",
decoderName: "JpegLSDecoder",
};
function setCodec(codecConfig, encoderName, decoderName, codec = {}) {
codecConfig.Encoder = codec[encoderName];
codecConfig.Decoder = codec[decoderName];
codecConfig.codec = codec;
}
CharLs().then(res => {
setCodec(codecWrapper, codecWrapper.encoderName, codecWrapper.decoderName, res);
})
export default {
components: { MyVideos },
data() {
return {
IsOpen: false,
videoUrl: null,
videoName: null
}
},
methods: {
async upload(name, file) {
let res = await this.OSSclient.put(name, file)
return res
},
beginScanFiles(e) {
var files = e.target.files
console.log(e.target.files)
if (files.length > 0) {
files.forEach(async (item, index) => {
const reader = new FileReader();
reader.onload = async (event) => {
let buffer = event.target.result;
const anonymizer = new Anonymizer(script, { test: 'hello' });
anonymizer.loadDcm(new Uint8Array(buffer))
await anonymizer.applyRules();
let buffer1 = anonymizer.write()
let data1 = dicomParser.parseDicom(new Uint8Array(buffer1))
let data = dicomParser.parseDicom(new Uint8Array(buffer))
// 传输语法 0002 0010
// if(1.2.840.10008.1.2.1) 才压缩 => 1.2.840.10008.1.2.4.80
let height = data.uint16('x00280011')
let width = data.uint16('x00280010')
let bitsPerSample = data.uint16('x00280100')
let componentCount = data.string('x00280004')
let transportSyntax = data.string('x00020010')
// let pixel = data.byteArrayParser.readUint16('x7fe0x0010')
let pixelDataElement = data.elements.x7fe00010;
let pixelDataOffset = pixelDataElement.dataOffset;
let pixelDataLength = pixelDataElement.length;
let pixelDataBytes = data.byteArray.subarray(pixelDataOffset, pixelDataOffset + pixelDataLength)
if (transportSyntax === '1.2.840.10008.1.2.1' && ~componentCount.indexOf('MONOCHROME')) {
let encoder = new codecWrapper.Encoder();
let decodedBytes = encoder.getDecodedBuffer({width: width, height: height, bitsPerSample: bitsPerSample, componentCount: 1})
encoder.setNearLossless(0);
// 像素数据 7fe0 0010
decodedBytes.set(pixelDataBytes);
let startTime = performance.now()
encoder.encode()
let endTime = performance.now();
// dicom替换压缩像素 组装
let encodeDurationInSeconds = endTime - startTime
let encodedBytes = encoder.getEncodedBuffer();
data.elements['x00020010'].value = '1.2.840.10008.1.2.4.80'
console.log(data.elements['x7fe00010'].length)
data.elements['x7fe00010'].length = encodedBytes.length
console.log(data.elements['x7fe00010'].length)
let mateDataBytes = data.byteArray.subarray(0, pixelDataOffset)
let modifiedByteArray = new Uint8Array([...mateDataBytes, ...encodedBytes])
let newData = new dicomParser.ByteStream(data.byteArrayParser, modifiedByteArray, 0)
console.log(data)
console.log(newData)
console.log(dicomParser.parseDicom(new Uint8Array(newData.byteArray)))
await this.upload(`test/${index}`, newData)
encoder.delete();
return
}
};
reader.readAsArrayBuffer(item);
})
}
},
open() {
this.IsOpen = true
},
uploadOver(isSuccess, res) {
if (isSuccess) {
this.IsOpen = false
this.videoUrl = res.url
this.videoName = res.name
}
}
}
}
</script>
<style scoped>
</style>