Browse Source

Final API improvements

pull/1706/head
Dmitry Pentin 5 years ago
parent
commit
404639ff8c
  1. 5
      src/ImageSharp/Formats/Jpeg/Components/Quantization.cs
  2. 2
      src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs
  3. 28
      src/ImageSharp/Formats/Jpeg/JpegMetadata.cs

5
src/ImageSharp/Formats/Jpeg/Components/Quantization.cs

@ -23,6 +23,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// </summary> /// </summary>
public const int MinQualityFactor = 1; public const int MinQualityFactor = 1;
/// <summary>
/// Default JPEG quality for both luminance and chominance tables.
/// </summary>
public const int DefaultQualityFactor = 75;
/// <summary> /// <summary>
/// Represents lowest quality setting which can be estimated with enough confidence. /// Represents lowest quality setting which can be estimated with enough confidence.
/// Any quality below it results in a highly compressed jpeg image /// Any quality below it results in a highly compressed jpeg image

2
src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs

@ -675,7 +675,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
} }
else else
{ {
chromaQuality = Numerics.Clamp(metadata.ChrominanceQuality, 1, 100); chromaQuality = Numerics.Clamp(metadata.ChrominanceQuality ?? Quantization.DefaultQualityFactor, 1, 100);
chrominanceQuantTable = metadata.ChromaQuantizationTable; chrominanceQuantTable = metadata.ChromaQuantizationTable;
} }

28
src/ImageSharp/Formats/Jpeg/JpegMetadata.cs

@ -11,17 +11,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// </summary> /// </summary>
public class JpegMetadata : IDeepCloneable public class JpegMetadata : IDeepCloneable
{ {
/// <summary>
/// Default JPEG quality for both luminance and chominance tables.
/// </summary>
private const int DefaultQualityValue = 75;
private Block8x8F? lumaQuantTable; private Block8x8F? lumaQuantTable;
private Block8x8F? chromaQuantTable; private Block8x8F? chromaQuantTable;
private int? lumaQuality;
private int? chromaQuality;
/// <summary> /// <summary>
/// Initializes a new instance of the <see cref="JpegMetadata"/> class. /// Initializes a new instance of the <see cref="JpegMetadata"/> class.
/// </summary> /// </summary>
@ -55,7 +47,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
return this.lumaQuantTable.Value; return this.lumaQuantTable.Value;
} }
return Quantization.ScaleLuminanceTable(this.LuminanceQuality); return Quantization.ScaleLuminanceTable(this.LuminanceQuality ?? Quantization.DefaultQualityFactor);
} }
set => this.lumaQuantTable = value; set => this.lumaQuantTable = value;
@ -73,7 +65,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
return this.chromaQuantTable.Value; return this.chromaQuantTable.Value;
} }
return Quantization.ScaleChrominanceTable(this.ChrominanceQuality); return Quantization.ScaleChrominanceTable(this.ChrominanceQuality ?? Quantization.DefaultQualityFactor);
} }
set => this.chromaQuantTable = value; set => this.chromaQuantTable = value;
@ -86,11 +78,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// This value might not be accurate if it was calculated during jpeg decoding /// This value might not be accurate if it was calculated during jpeg decoding
/// with non-complient ITU quantization tables. /// with non-complient ITU quantization tables.
/// </remarks> /// </remarks>
public int LuminanceQuality public int? LuminanceQuality { get; set; }
{
get => this.lumaQuality ?? DefaultQualityValue;
set => this.lumaQuality = value;
}
/// <summary> /// <summary>
/// Gets or sets the jpeg chrominance quality. /// Gets or sets the jpeg chrominance quality.
@ -99,11 +87,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
/// This value might not be accurate if it was calculated during jpeg decoding /// This value might not be accurate if it was calculated during jpeg decoding
/// with non-complient ITU quantization tables. /// with non-complient ITU quantization tables.
/// </remarks> /// </remarks>
public int ChrominanceQuality public int? ChrominanceQuality { get; set; }
{
get => this.chromaQuality ?? DefaultQualityValue;
set => this.chromaQuality = value;
}
/// <summary> /// <summary>
/// Gets or sets the encoded quality. /// Gets or sets the encoded quality.
@ -116,8 +100,8 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
{ {
get get
{ {
int lumaQuality = this.lumaQuality ?? DefaultQualityValue; int lumaQuality = this.LuminanceQuality ?? Quantization.DefaultQualityFactor;
int chromaQuality = this.chromaQuality ?? lumaQuality; int chromaQuality = this.ChrominanceQuality ?? lumaQuality;
return (int)Math.Round((lumaQuality + chromaQuality) / 2f); return (int)Math.Round((lumaQuality + chromaQuality) / 2f);
} }

Loading…
Cancel
Save