changeset 803:521bb9305efb

added test_embed_jpeg
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 04 Apr 2025 15:30:16 +0200
parents ba2b2ae60828
children 2c0d596764d7
files Tests/Tests.py
diffstat 1 files changed, 76 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Tests/Tests.py	Mon Mar 24 12:04:01 2025 +0100
+++ b/Tests/Tests.py	Fri Apr 04 15:30:16 2025 +0200
@@ -11982,3 +11982,79 @@
             attachments = DoGet(_REMOTE, '/instances/' + instanceId + '/attachments/dicom/info/')
             self.assertLessEqual(181071, int(attachments['UncompressedSize']))
             self.assertGreaterEqual(181073, int(attachments['UncompressedSize']))  # there might be some padding added
+
+    def test_embed_jpeg(self):
+        if not IsOrthancVersionAbove(_REMOTE, 1, 12, 7):
+            return
+
+        with open(GetDatabasePath('Lena.jpg'), 'rb') as f:
+            jpeg = f.read()
+
+        i = DoPost(_REMOTE, '/tools/create-dicom', json.dumps({
+            'Content' : 'data:image/jpeg;base64,%s' % base64.b64encode(jpeg).decode(),
+            'Encapsulate' : True,
+            'Tags' : {
+                'SOPClassUID' : '1.2.840.10008.5.1.4.1.1.7',
+            }
+        })) ['ID']
+
+        tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
+        self.assertEqual(tags['BitsAllocated'], '8')
+        self.assertEqual(tags['BitsStored'], '8')
+        self.assertEqual(tags['Columns'], '512')
+        self.assertEqual(tags['HighBit'], '7')
+        self.assertEqual(tags['PhotometricInterpretation'], 'YBR_FULL_422')
+        self.assertEqual(tags['PixelData'], None)
+        self.assertEqual(tags['PixelRepresentation'], '0')
+        self.assertEqual(tags['PlanarConfiguration'], '0')
+        self.assertEqual(tags['Rows'], '512')
+        self.assertEqual(tags['SOPClassUID'], '1.2.840.10008.5.1.4.1.1.7')
+        self.assertEqual(tags['SamplesPerPixel'], '3')
+        self.assertEqual(tags['SpecificCharacterSet'], 'ISO_IR 100')
+        pixelData = DoGet(_REMOTE, '/instances/%s/content/7fe0,0010' % i)
+        self.assertEqual(len(pixelData), 2)
+        self.assertEqual(pixelData[0], '0')
+        self.assertEqual(pixelData[1], '1')
+        resp, embedded = DoGetRaw(_REMOTE, '/instances/%s/content/7fe0,0010/1' % i)
+        self.assertEqual('200', resp['status'])
+        self.assertEqual(len(embedded), len(jpeg))
+        self.assertEqual(embedded, jpeg)
+
+        b = io.BytesIO()
+        UncompressImage(jpeg).convert('L').save(b, format = 'jpeg')
+
+        b.seek(0)
+        grayscale = b.read()
+
+        if len(grayscale) % 2 != 0:
+            grayscale = grayscale + '\0'   # Add padding to OW boundaries (2 bytes)
+
+        i = DoPost(_REMOTE, '/tools/create-dicom', json.dumps({
+            'Content' : 'data:image/jpeg;base64,%s' % base64.b64encode(grayscale).decode(),
+            'Encapsulate' : True,
+            'Tags' : {
+                'SOPClassUID' : '1.2.840.10008.5.1.4.1.1.7',
+            }
+        })) ['ID']
+
+        tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
+        self.assertEqual(tags['BitsAllocated'], '8')
+        self.assertEqual(tags['BitsStored'], '8')
+        self.assertEqual(tags['Columns'], '512')
+        self.assertEqual(tags['HighBit'], '7')
+        self.assertEqual(tags['PhotometricInterpretation'], 'MONOCHROME2')
+        self.assertEqual(tags['PixelData'], None)
+        self.assertEqual(tags['PixelRepresentation'], '0')
+        self.assertFalse('PlanarConfiguration' in tags)
+        self.assertEqual(tags['Rows'], '512')
+        self.assertEqual(tags['SOPClassUID'], '1.2.840.10008.5.1.4.1.1.7')
+        self.assertEqual(tags['SamplesPerPixel'], '1')
+        self.assertEqual(tags['SpecificCharacterSet'], 'ISO_IR 100')
+        pixelData = DoGet(_REMOTE, '/instances/%s/content/7fe0,0010' % i)
+        self.assertEqual(len(pixelData), 2)
+        self.assertEqual(pixelData[0], '0')
+        self.assertEqual(pixelData[1], '1')
+        resp, embedded = DoGetRaw(_REMOTE, '/instances/%s/content/7fe0,0010/1' % i)
+        self.assertEqual('200', resp['status'])
+        self.assertEqual(len(embedded), len(grayscale))
+        self.assertEqual(embedded, grayscale)