diff --git a/api/dicom/controller/wado.js b/api/dicom/controller/wado.js index 1b78952..93efff1 100644 --- a/api/dicom/controller/wado.js +++ b/api/dicom/controller/wado.js @@ -155,27 +155,37 @@ async function handleFrameNumber (param , res , dicomFile) { let images = path.join(process.env.DICOM_STORE_ROOTPATH, imageRelativePath); let jpegFile = images.replace(/\.dcm\b/gi , `.${param.frameNumber-1}.jpg`); let finalJpegFile = ""; - if(fs.existsSync(jpegFile)) { - finalJpegFile = jpegFile; - } else { - let dicomJson = await getDICOMJson(param); - let transferSyntax = _.get(dicomJson ,"00020010.Value.0"); - if (!dcmtkSupportTransferSyntax.includes(transferSyntax)) { - let pythonDICOM2JPEGStatus = await getJpeg[process.env.ENV]['getJpegByPydicom'](images); - if (pythonDICOM2JPEGStatus) { - return fs.createReadStream(jpegFile).pipe(res); - } - res.set('content-type' , 'application/json'); - return dicomWebHandleError.sendServerWrongMessage(res , `can't not convert dicom to jpeg with transfer syntax: ${transferSyntax}`); - } - let frame = await getFrameImage(imageRelativePath, param.frameNumber); - if (frame.status) { - finalJpegFile = frame.imagePath; - } else { - res.set('content-type' , 'application/json'); - return dicomWebHandleError.sendServerWrongMessage(res , `dcmtk Convert frame error ${frame.imageStream}`); + + let dicomJson = await getDICOMJson(param); + let transferSyntax = _.get(dicomJson ,"00020010.Value.0"); + if (!dcmtkSupportTransferSyntax.includes(transferSyntax)) { + let pythonDICOM2JPEGStatus = await getJpeg[process.env.ENV]['getJpegByPydicom'](images); + if (pythonDICOM2JPEGStatus) { + return fs.createReadStream(jpegFile).pipe(res); } + res.set('content-type' , 'application/json'); + return dicomWebHandleError.sendServerWrongMessage(res , `can't not convert dicom to jpeg with transfer syntax: ${transferSyntax}`); + } + + let windowCenter = _.get(dicomJson, "00281050.Value.0"); + let windowWidth = _.get(dicomJson, "00281051.Value.0"); + let frame; + if (windowCenter && windowWidth) { + frame = await getFrameImage(imageRelativePath, param.frameNumber, [ + "+Ww", + windowCenter, + windowWidth + ]); + } else { + frame = await getFrameImage(imageRelativePath, param.frameNumber); + } + if (frame.status) { + finalJpegFile = frame.imagePath; + } else { + res.set('content-type' , 'application/json'); + return dicomWebHandleError.sendServerWrongMessage(res , `dcmtk Convert frame error ${frame.imageStream}`); } + let imageSharp = sharp(finalJpegFile); let magick = new Magick(finalJpegFile); handleImageQuality(param, magick); diff --git a/models/dcmtk/index.js b/models/dcmtk/index.js index 43f6991..c9e5e44 100644 --- a/models/dcmtk/index.js +++ b/models/dcmtk/index.js @@ -239,7 +239,7 @@ async function getFrameImage(imagesPath, frameNumber, otherOptions = []) { let execCmd = ""; let images = path.join(process.env.DICOM_STORE_ROOTPATH, imagesPath); let jpegFile = images.replace(/\.dcm\b/gi, `.${frameNumber - 1}.jpg`); - if (fs.existsSync(jpegFile)) { + if (fs.existsSync(jpegFile) && otherOptions.length == 0) { let rs = fs.createReadStream(jpegFile); return { status: true,