changeset 788:b739a6b6da46

lossy-quality
author Alain Mazy <am@orthanc.team>
date Tue, 25 Feb 2025 19:26:27 +0100
parents fbff56dc871e
children 36486b8031bb
files Tests/Tests.py
diffstat 1 files changed, 127 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/Tests/Tests.py	Thu Feb 20 17:55:02 2025 +0100
+++ b/Tests/Tests.py	Tue Feb 25 19:26:27 2025 +0100
@@ -6738,6 +6738,21 @@
             else:
                 self.assertEqual(a, b)
 
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            ratio40 = ExtractDicomTags(transcoded, [ 'LossyImageCompressionRatio' ]) [0]
+
+            transcoded = DoPost(_REMOTE, '/instances/%s/modify' % i, {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+            ratio80 = ExtractDicomTags(transcoded, [ 'LossyImageCompressionRatio' ]) [0]
+            self.assertGreater(ratio40, ratio80)
+
+
     def test_archive_transcode(self):
         info = UploadInstance(_REMOTE, 'KarstenHilbertRF.dcm')
 
@@ -6757,6 +6772,14 @@
         z, resp = GetArchive(_REMOTE, '/series/%s/media?transcode=1.2.840.10008.1.2.4.57' % info['ParentSeries'])
         self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
 
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            z40, resp40 = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50&lossy-quality=40' % info['ParentPatient'])
+            z80, resp80 = GetArchive(_REMOTE, '/patients/%s/media?transcode=1.2.840.10008.1.2.4.50&lossy-quality=80' % info['ParentPatient'])
+
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
 
         # POST on "/media"
         self.assertRaises(Exception, lambda: PostArchive(
@@ -6777,6 +6800,20 @@
             })
         self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read('IMAGES/IM0')))
 
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            z40 = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            z80 = PostArchive(_REMOTE, '/series/%s/media' % info['ParentSeries'], {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
         
         # GET on "/archive"
         z, resp = GetArchive(_REMOTE, '/patients/%s/archive' % info['ParentPatient'])
@@ -6794,6 +6831,14 @@
         z, resp = GetArchive(_REMOTE, '/series/%s/archive?transcode=1.2.840.10008.1.2.4.70' % info['ParentSeries'])
         self.assertEqual('1.2.840.10008.1.2.4.70', GetTransferSyntax(z.read(z.namelist()[0])))
 
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            z40, resp40 = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2.4.50&lossy-quality=40' % info['ParentPatient'])
+            z80, resp80 = GetArchive(_REMOTE, '/patients/%s/archive?transcode=1.2.840.10008.1.2.4.50&lossy-quality=80' % info['ParentPatient'])
+
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
 
         # POST on "/archive"
         self.assertRaises(Exception, lambda: PostArchive(
@@ -6814,6 +6859,20 @@
             })
         self.assertEqual('1.2.840.10008.1.2.4.57', GetTransferSyntax(z.read(z.namelist()[0])))
         
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            z40 = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            z80 = PostArchive(_REMOTE, '/series/%s/archive' % info['ParentSeries'], {
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
 
         # "/tools/create-*"
         z = PostArchive(_REMOTE, '/tools/create-archive', {
@@ -6852,28 +6911,82 @@
             if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
                 self.assertEqual('filename="toto.zip"', resp['content-disposition'])
 
-
+        if IsOrthancVersionAbove(_REMOTE, 1, 12, 7) and HasExtendedFind(_REMOTE):
+            z40 = PostArchive(_REMOTE, '/tools/create-archive', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            z80 = PostArchive(_REMOTE, '/tools/create-archive', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+                
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
+            z40 = PostArchive(_REMOTE, '/tools/create-media', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            z80 = PostArchive(_REMOTE, '/tools/create-media', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+                
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
+            z40 = PostArchive(_REMOTE, '/tools/create-media-extended', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 40
+                })
+            z80 = PostArchive(_REMOTE, '/tools/create-media-extended', {
+                'Resources' : [ info['ParentStudy'] ],
+                'Transcode' : '1.2.840.10008.1.2.4.50',
+                'LossyQuality': 80
+                })
+                
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
+
+            z40, resp = GetArchive(_REMOTE, '/tools/create-archive?resources=%s&transcode=1.2.840.10008.1.2.4.50&lossy-quality=40' % info['ParentStudy'])
+            z80, resp = GetArchive(_REMOTE, '/tools/create-archive?resources=%s&transcode=1.2.840.10008.1.2.4.50&lossy-quality=80' % info['ParentStudy'])
+            size40 = sum([zinfo.file_size for zinfo in z40.filelist])
+            size80 = sum([zinfo.file_size for zinfo in z80.filelist])
+            self.assertLess(size40, size80)
 
 
     def test_download_file_transcode(self):
         if IsOrthancVersionAbove(_REMOTE, 1, 12, 2):
 
             info = UploadInstance(_REMOTE, 'TransferSyntaxes/1.2.840.10008.1.2.1.dcm')
-            self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
-                DoGet(_REMOTE, '/instances/%s/file' % info['ID'])))
-
-            self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(
-                DoGet(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50' % info['ID'])))
+            # self.assertEqual('1.2.840.10008.1.2.1', GetTransferSyntax(
+            #     DoGet(_REMOTE, '/instances/%s/file' % info['ID'])))
+
+            # self.assertEqual('1.2.840.10008.1.2.4.50', GetTransferSyntax(
+            #     DoGet(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50' % info['ID'])))
 
             if IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
-                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename=toto.dcm' % info['ID'])
-                self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
-
-                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50&filename=toto.dcm' % info['ID'])
-                self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
-
-                resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename="toto".dcm' % info['ID'])
-                self.assertEqual('filename="\"toto\".dcm"', resp['content-disposition'])
+                # resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename=toto.dcm' % info['ID'])
+                # self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
+
+                # resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50&filename=toto.dcm' % info['ID'])
+                # self.assertEqual('filename="toto.dcm"', resp['content-disposition'])
+
+                # resp, content = DoGetRaw(_REMOTE, '/instances/%s/file?filename="toto".dcm' % info['ID'])
+                # self.assertEqual('filename="\"toto\".dcm"', resp['content-disposition'])
+
+                resp, content40 = DoGetRaw(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50&lossy-quality=40' % info['ID'])
+                resp, content80 = DoGetRaw(_REMOTE, '/instances/%s/file?transcode=1.2.840.10008.1.2.4.50&lossy-quality=80' % info['ID'])
+                self.assertLess(len(content40), len(content80))
 
 
     def test_modify_keep_source(self):