From a95594607d120d211822464b91be0c4864936fbf Mon Sep 17 00:00:00 2001
From: winscripter <142818255+winscripter@users.noreply.github.com>
Date: Mon, 31 Aug 2026 21:11:16 +0400
Subject: [PATCH] Add JPEG data constants
---
.../Processing/Jpeg/Data/JpegDataConstants.cs | 85 +++++++++++++++++++
.../Formats/Jxl/Processing/Jpeg/README.md | 2 +
2 files changed, 87 insertions(+)
diff --git a/src/ImageSharp/Formats/Jxl/Processing/Jpeg/Data/JpegDataConstants.cs b/src/ImageSharp/Formats/Jxl/Processing/Jpeg/Data/JpegDataConstants.cs
index 525d3f4c0..7dd73a50c 100644
--- a/src/ImageSharp/Formats/Jxl/Processing/Jpeg/Data/JpegDataConstants.cs
+++ b/src/ImageSharp/Formats/Jxl/Processing/Jpeg/Data/JpegDataConstants.cs
@@ -17,4 +17,89 @@ internal static class JpegDataConstants
/// Maximum number of quantizer tables.
///
public const int MaximumQuantizationTables = 4;
+
+ ///
+ /// Maximum number of Huffman code tables.
+ ///
+ public const int MaxHuffmanTables = 4;
+
+ ///
+ /// Maximum number of bits for a Huffman code.
+ ///
+ public const int JpegHuffmanMaxBitLength = 16;
+
+ ///
+ /// Alphabet size for Huffman tables used in the JPEG format.
+ ///
+ public const int JpegHuffmanAlphabetSize = 256;
+
+ ///
+ /// Alphabet size for Huffman tables used in the JPEG format.
+ ///
+ ///
+ /// This is specific to the DC coefficients of the Discrete
+ /// Cosine Transform.
+ ///
+ public const int JpegDcAlphabetSize = 12;
+
+ ///
+ /// Maximum number of DHT "Define Huffman Tables" markers.
+ ///
+ public const int MaxDhtMarkers = 512;
+
+ ///
+ /// Largest value for width OR height.
+ ///
+ public const int MaxDimPixels = 65535;
+
+ ///
+ /// Marker that specifies APP1.
+ ///
+ public const int App1 = 0xE1;
+
+ ///
+ /// Marker that specifies APP2.
+ ///
+ public const int App2 = 0xE2;
+
+ ///
+ /// Gets the tag bytes specifying the ICC profile.
+ ///
+ public static ReadOnlySpan IccProfileTag => "ICC_PROFILE\0"u8;
+
+ ///
+ /// Gets the tag bytes specifying the EXIF profile.
+ ///
+ public static ReadOnlySpan ExifTag => "Exif\0\0"u8;
+
+ ///
+ /// Gets the tag bytes specifying the XMP profile.
+ ///
+ public static ReadOnlySpan XmpTag => "http://ns.adobe.com/xap/1.0/\0"u8;
+
+ public static ReadOnlySpan JpegNaturalOrder =>
+ [
+ 0, 1, 8, 16, 9, 2, 3, 10,
+ 17, 24, 32, 25, 18, 11, 4, 5,
+ 12, 19, 26, 33, 40, 48, 41, 34,
+ 27, 20, 13, 6, 7, 14, 21, 28,
+ 35, 42, 49, 56, 57, 50, 43, 36,
+ 29, 22, 15, 23, 30, 37, 44, 51,
+ 58, 59, 52, 45, 38, 31, 39, 46,
+ 53, 60, 61, 54, 47, 55, 62, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63
+ ];
+
+ public static ReadOnlySpan JpegZigZagOrder =>
+ [
+ 0, 1, 5, 6, 14, 15, 27, 28,
+ 2, 4, 7, 13, 16, 26, 29, 42,
+ 3, 8, 12, 17, 25, 30, 41, 43,
+ 9, 11, 18, 24, 31, 40, 44, 53,
+ 10, 19, 23, 32, 39, 45, 52, 54,
+ 20, 22, 33, 38, 46, 51, 55, 60,
+ 21, 34, 37, 47, 50, 56, 59, 61,
+ 35, 36, 48, 49, 57, 58, 62, 63
+ ];
}
diff --git a/src/ImageSharp/Formats/Jxl/Processing/Jpeg/README.md b/src/ImageSharp/Formats/Jxl/Processing/Jpeg/README.md
index 4b98e0aff..bde5de389 100644
--- a/src/ImageSharp/Formats/Jxl/Processing/Jpeg/README.md
+++ b/src/ImageSharp/Formats/Jxl/Processing/Jpeg/README.md
@@ -7,3 +7,5 @@ This folder contains logic to:
- JXL to JPEG
This does not contain a JPEG codec.
+
+Logic in this folder is used for JPEG<->JXL lossless compression.