diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs index e6c7ec2473..398e06ee54 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifConstants.cs @@ -4,6 +4,7 @@ using System; using System.Buffers.Binary; using System.Text; +using static SixLabors.ImageSharp.Metadata.Profiles.Exif.EncodedString; namespace SixLabors.ImageSharp.Metadata.Profiles.Exif { @@ -45,7 +46,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif private static ReadOnlySpan UndefinedCodeBytes => new byte[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - public static bool TryDetect(ReadOnlySpan buffer, out EncodedStringCode code) + public static bool TryDetect(ReadOnlySpan buffer, out CharacterCode code) { if (buffer.Length >= CharacterCodeBytesLength) { @@ -53,16 +54,16 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif switch (test) { case AsciiCode: - code = EncodedStringCode.ASCII; + code = CharacterCode.ASCII; return true; case JISCode: - code = EncodedStringCode.JIS; + code = CharacterCode.JIS; return true; case UnicodeCode: - code = EncodedStringCode.Unicode; + code = CharacterCode.Unicode; return true; case UndefinedCode: - code = EncodedStringCode.Undefined; + code = CharacterCode.Undefined; return true; default: break; @@ -73,21 +74,21 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif return false; } - public static ReadOnlySpan GetCodeBytes(EncodedStringCode code) => code switch + public static ReadOnlySpan GetCodeBytes(CharacterCode code) => code switch { - EncodedStringCode.ASCII => AsciiCodeBytes, - EncodedStringCode.JIS => JISCodeBytes, - EncodedStringCode.Unicode => UnicodeCodeBytes, - EncodedStringCode.Undefined => UndefinedCodeBytes, + CharacterCode.ASCII => AsciiCodeBytes, + CharacterCode.JIS => JISCodeBytes, + CharacterCode.Unicode => UnicodeCodeBytes, + CharacterCode.Undefined => UndefinedCodeBytes, _ => UndefinedCodeBytes }; - public static Encoding GetEncoding(EncodedStringCode code) => code switch + public static Encoding GetEncoding(CharacterCode code) => code switch { - EncodedStringCode.ASCII => Encoding.ASCII, - EncodedStringCode.JIS => JIS0208Encoding, - EncodedStringCode.Unicode => Encoding.Unicode, - EncodedStringCode.Undefined => Encoding.UTF8, + CharacterCode.ASCII => Encoding.ASCII, + CharacterCode.JIS => JIS0208Encoding, + CharacterCode.Unicode => Encoding.Unicode, + CharacterCode.Undefined => Encoding.UTF8, _ => Encoding.UTF8 }; } diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs index 4aff835a9c..eb7bb0675d 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifReader.cs @@ -361,7 +361,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif } // ext processing - if (ExifConstants.TryDetect(buffer, out EncodedStringCode code)) + if (ExifConstants.TryDetect(buffer, out EncodedString.CharacterCode code)) { string text = ExifConstants.GetEncoding(code).GetString(buffer.Slice(ExifConstants.CharacterCodeBytesLength)); return new EncodedString(code, text); diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs index 9e2e2aa14f..08181fc1f8 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedString.cs @@ -15,7 +15,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif /// /// The text value. public EncodedString(string text) - : this(EncodedStringCode.Unicode, text) + : this(CharacterCode.Unicode, text) { } @@ -24,16 +24,42 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif /// /// The character code. /// The text value. - public EncodedString(EncodedStringCode code, string text) + public EncodedString(CharacterCode code, string text) { this.Text = text; this.Code = code; } + /// + /// The 8-byte character code enum. + /// + public enum CharacterCode + { + /// + /// The ASCII (ITU-T T.50 IA5) character code. + /// + ASCII, + + /// + /// The JIS (X208-1990) character code. + /// + JIS, + + /// + /// The Unicode character code. + /// + Unicode, + + /// + /// The undefined character code. + /// + Undefined + } + /// /// Gets the character ode. /// - public EncodedStringCode Code { get; } + public CharacterCode Code { get; } /// /// Gets the text. @@ -44,14 +70,10 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif public override bool Equals(object obj) => obj is EncodedString other && this.Equals(other); /// - public bool Equals(EncodedString other) - { - return this.Text == other.Text && this.Code == other.Code; - } + public bool Equals(EncodedString other) => this.Text == other.Text && this.Code == other.Code; /// - public override int GetHashCode() => - HashCode.Combine(this.Text, this.Code); + public override int GetHashCode() => HashCode.Combine(this.Text, this.Code); /// public override string ToString() => this.Text; diff --git a/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedStringCode.cs b/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedStringCode.cs deleted file mode 100644 index ce812de84b..0000000000 --- a/src/ImageSharp/Metadata/Profiles/Exif/Values/EncodedStringCode.cs +++ /dev/null @@ -1,31 +0,0 @@ -// Copyright (c) Six Labors. -// Licensed under the Apache License, Version 2.0. - -namespace SixLabors.ImageSharp.Metadata.Profiles.Exif -{ - /// - /// The 8-byte character code enum. - /// - public enum EncodedStringCode - { - /// - /// The ASCII (ITU-T T.50 IA5) character code. - /// - ASCII, - - /// - /// The JIS (X208-1990) character code. - /// - JIS, - - /// - /// The Unicode character code. - /// - Unicode, - - /// - /// The undefined character code. - /// - Undefined - } -} diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs index 247dd6441d..f7d3f5a65b 100644 --- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs +++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.Metadata.cs @@ -301,7 +301,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg exif.SetValue(ExifTag.XPAuthor, Encoding.GetEncoding("UCS-2").GetBytes("Dan Petitt")); exif.SetValue(ExifTag.XPTitle, Encoding.GetEncoding("UCS-2").GetBytes("A bit of test metadata for image title")); - exif.SetValue(ExifTag.UserComment, new EncodedString(EncodedStringCode.ASCII, "A bit of normal comment text")); + exif.SetValue(ExifTag.UserComment, new EncodedString(EncodedString.CharacterCode.ASCII, "A bit of normal comment text")); exif.SetValue(ExifTag.GPSDateStamp, "2022-01-06"); exif.SetValue(ExifTag.XPKeywords, new byte[] { 0x41, 0x53, 0x43, 0x49, 0x49, 00, 00, 00, 0x41, 0x41, 0x41 }); diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs index 9cab56c5c3..a121941e53 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/Exif/Values/ExifValuesTests.cs @@ -602,7 +602,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.Exif.Values [MemberData(nameof(EncodedStringTags))] public void ExifEncodedStringTests(ExifTag tag) { - var expected = new EncodedString(EncodedStringCode.JIS, "test string"); + var expected = new EncodedString(EncodedString.CharacterCode.JIS, "test string"); ExifValue value = ExifValues.Create(tag); Assert.False(value.TrySetValue(123));