From 1c7c491472170cc3f38382431190103673036b77 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 2 Apr 2020 21:40:49 +0100 Subject: [PATCH 01/21] Remove GC, add MethodImpl, use Buffer --- Directory.Build.props | 24 +++++++++---------- .../Common/Helpers/InliningOptions.cs | 10 ++++++-- src/ImageSharp/Formats/Png/Zlib/Deflater.cs | 2 -- .../Formats/Png/Zlib/DeflaterEngine.cs | 5 ++-- .../Formats/Png/Zlib/DeflaterHuffman.cs | 5 +--- .../Formats/Png/Zlib/DeflaterPendingBuffer.cs | 2 -- 6 files changed, 23 insertions(+), 25 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index 12a4a5c2a..50c09fbb3 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -31,21 +31,21 @@ - $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE + $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_RUNTIME_INTRINSICS;SUPPORTS_CODECOVERAGE;SUPPORTS_HOTPATH $(DefineConstants);SUPPORTS_MATHF;SUPPORTS_HASHCODE;SUPPORTS_EXTENDED_INTRINSICS;SUPPORTS_SPAN_STREAM;SUPPORTS_ENCODING_STRING;SUPPORTS_CODECOVERAGE diff --git a/src/ImageSharp/Common/Helpers/InliningOptions.cs b/src/ImageSharp/Common/Helpers/InliningOptions.cs index 069a426d7..895b6250f 100644 --- a/src/ImageSharp/Common/Helpers/InliningOptions.cs +++ b/src/ImageSharp/Common/Helpers/InliningOptions.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. // Uncomment this for verbose profiler results. DO NOT PUSH TO MAIN! @@ -13,10 +13,16 @@ namespace SixLabors.ImageSharp internal static class InliningOptions { #if PROFILING + public const MethodImplOptions HotPath = MethodImplOptions.NoInlining; public const MethodImplOptions ShortMethod = MethodImplOptions.NoInlining; #else +#if SUPPORTS_HOTPATH + public const MethodImplOptions HotPath = MethodImplOptions.AggressiveOptimization; +#else + public const MethodImplOptions HotPath = MethodImplOptions.AggressiveInlining; +#endif public const MethodImplOptions ShortMethod = MethodImplOptions.AggressiveInlining; #endif public const MethodImplOptions ColdPath = MethodImplOptions.NoInlining; } -} \ No newline at end of file +} diff --git a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs index 7398b089b..2083edab1 100644 --- a/src/ImageSharp/Formats/Png/Zlib/Deflater.cs +++ b/src/ImageSharp/Formats/Png/Zlib/Deflater.cs @@ -288,8 +288,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.engine = null; this.isDisposed = true; } - - GC.SuppressFinalize(this); } } } diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs index 1a8bb4ab0..c1c86a98b 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs @@ -362,7 +362,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib more = this.inputEnd - this.inputOff; } - Array.Copy(this.inputBuf, this.inputOff, this.window, this.strstart + this.lookahead, more); + Buffer.BlockCopy(this.inputBuf, this.inputOff, this.window, this.strstart + this.lookahead, more); this.inputOff += more; this.lookahead += more; @@ -397,8 +397,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.isDisposed = true; } - - GC.SuppressFinalize(this); } [MethodImpl(InliningOptions.ShortMethod)] @@ -464,6 +462,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib /// /// The current match. /// True if a match greater than the minimum length is found + [MethodImpl(InliningOptions.HotPath)] private bool FindLongestMatch(int curMatch) { int match; diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs index 543a1fe30..8380f7d5b 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs @@ -413,8 +413,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.distTree = null; this.isDisposed = true; } - - GC.SuppressFinalize(this); } [MethodImpl(InliningOptions.ShortMethod)] @@ -553,6 +551,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib } } + [MethodImpl(InliningOptions.HotPath)] public void BuildTree() { int numSymbols = this.elementCount; @@ -964,8 +963,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.isDisposed = true; } - - GC.SuppressFinalize(this); } } } diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs index 731c9e80f..0414ca2f8 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterPendingBuffer.cs @@ -172,8 +172,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.bufferMemoryOwner = null; this.isDisposed = true; } - - GC.SuppressFinalize(this); } } } From 88f3bd0c33d1448a5c9cfe6b66bd60e1a2b4672c Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 6 Apr 2020 20:51:45 +0100 Subject: [PATCH 02/21] Minor performance improvements. --- Directory.Build.targets | 6 ++-- src/ImageSharp/Formats/Png/PngDecoderCore.cs | 7 ++++- src/ImageSharp/Formats/Png/PngEncoderCore.cs | 29 +++++++++++++------ .../Formats/Png/Zlib/DeflaterEngine.cs | 16 ++++++---- 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index e5c44f776..83322cabf 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -23,12 +23,12 @@ - + - - + + diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs index 4d7de4161..bc7b9d815 100644 --- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs @@ -380,7 +380,12 @@ namespace SixLabors.ImageSharp.Formats.Png private void InitializeImage(ImageMetadata metadata, out Image image) where TPixel : unmanaged, IPixel { - image = new Image(this.configuration, this.header.Width, this.header.Height, metadata); + image = Image.CreateUninitialized( + this.configuration, + this.header.Width, + this.header.Height, + metadata); + this.bytesPerPixel = this.CalculateBytesPerPixel(); this.bytesPerScanline = this.CalculateScanlineLength(this.header.Width) + 1; this.bytesPerSample = 1; diff --git a/src/ImageSharp/Formats/Png/PngEncoderCore.cs b/src/ImageSharp/Formats/Png/PngEncoderCore.cs index 45e1ffd2d..fcbbc6697 100644 --- a/src/ImageSharp/Formats/Png/PngEncoderCore.cs +++ b/src/ImageSharp/Formats/Png/PngEncoderCore.cs @@ -5,10 +5,8 @@ using System; using System.Buffers; using System.Buffers.Binary; using System.IO; -using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; - using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Formats.Png.Chunks; using SixLabors.ImageSharp.Formats.Png.Filters; @@ -16,7 +14,6 @@ using SixLabors.ImageSharp.Formats.Png.Zlib; using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.PixelFormats; -using SixLabors.ImageSharp.Processing.Processors.Quantization; namespace SixLabors.ImageSharp.Formats.Png { @@ -633,10 +630,21 @@ namespace SixLabors.ImageSharp.Formats.Png private void WriteTextChunks(Stream stream, PngMetadata meta) { const int MaxLatinCode = 255; - foreach (PngTextData textData in meta.TextData) + for (int i = 0; i < meta.TextData.Count; i++) { - bool hasUnicodeCharacters = textData.Value.Any(c => c > MaxLatinCode); - if (hasUnicodeCharacters || (!string.IsNullOrWhiteSpace(textData.LanguageTag) || !string.IsNullOrWhiteSpace(textData.TranslatedKeyword))) + PngTextData textData = meta.TextData[i]; + bool hasUnicodeCharacters = false; + foreach (var c in textData.Value) + { + if (c > MaxLatinCode) + { + hasUnicodeCharacters = true; + break; + } + } + + if (hasUnicodeCharacters || (!string.IsNullOrWhiteSpace(textData.LanguageTag) || + !string.IsNullOrWhiteSpace(textData.TranslatedKeyword))) { // Write iTXt chunk. byte[] keywordBytes = PngConstants.Encoding.GetBytes(textData.Keyword); @@ -647,7 +655,8 @@ namespace SixLabors.ImageSharp.Formats.Png byte[] translatedKeyword = PngConstants.TranslatedEncoding.GetBytes(textData.TranslatedKeyword); byte[] languageTag = PngConstants.LanguageEncoding.GetBytes(textData.LanguageTag); - Span outputBytes = new byte[keywordBytes.Length + textBytes.Length + translatedKeyword.Length + languageTag.Length + 5]; + Span outputBytes = new byte[keywordBytes.Length + textBytes.Length + + translatedKeyword.Length + languageTag.Length + 5]; keywordBytes.CopyTo(outputBytes); if (textData.Value.Length > this.options.TextCompressionThreshold) { @@ -667,7 +676,8 @@ namespace SixLabors.ImageSharp.Formats.Png if (textData.Value.Length > this.options.TextCompressionThreshold) { // Write zTXt chunk. - byte[] compressedData = this.GetCompressedTextBytes(PngConstants.Encoding.GetBytes(textData.Value)); + byte[] compressedData = + this.GetCompressedTextBytes(PngConstants.Encoding.GetBytes(textData.Value)); Span outputBytes = new byte[textData.Keyword.Length + compressedData.Length + 2]; PngConstants.Encoding.GetBytes(textData.Keyword).CopyTo(outputBytes); compressedData.CopyTo(outputBytes.Slice(textData.Keyword.Length + 2)); @@ -678,7 +688,8 @@ namespace SixLabors.ImageSharp.Formats.Png // Write tEXt chunk. Span outputBytes = new byte[textData.Keyword.Length + textData.Value.Length + 1]; PngConstants.Encoding.GetBytes(textData.Keyword).CopyTo(outputBytes); - PngConstants.Encoding.GetBytes(textData.Value).CopyTo(outputBytes.Slice(textData.Keyword.Length + 1)); + PngConstants.Encoding.GetBytes(textData.Value) + .CopyTo(outputBytes.Slice(textData.Keyword.Length + 1)); this.WriteChunk(stream, PngChunkType.Text, outputBytes.ToArray()); } } diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs index c1c86a98b..0410a7461 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs @@ -525,12 +525,15 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib break; case 2: - if (pinnedWindow[++scan] == pinnedWindow[++match] - && pinnedWindow[++scan] == pinnedWindow[++match]) + if ((short*)pinnedWindow[++scan] == (short*)pinnedWindow[++match]) { + ++scan; + ++match; break; } + ++scan; + ++match; break; case 3: @@ -544,14 +547,15 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib break; case 4: - if (pinnedWindow[++scan] == pinnedWindow[++match] - && pinnedWindow[++scan] == pinnedWindow[++match] - && pinnedWindow[++scan] == pinnedWindow[++match] - && pinnedWindow[++scan] == pinnedWindow[++match]) + if ((int*)pinnedWindow[++scan] == (int*)pinnedWindow[++match]) { + scan += 3; + match += 3; break; } + scan += 3; + match += 3; break; case 5: From 29d12f3f005ea05fb9d40c7e5c3eb4d14b739d78 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 6 Apr 2020 21:30:22 +0100 Subject: [PATCH 03/21] Revert bad optimization --- .../Formats/Png/Zlib/DeflaterEngine.cs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs index 0410a7461..c1c86a98b 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterEngine.cs @@ -525,15 +525,12 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib break; case 2: - if ((short*)pinnedWindow[++scan] == (short*)pinnedWindow[++match]) + if (pinnedWindow[++scan] == pinnedWindow[++match] + && pinnedWindow[++scan] == pinnedWindow[++match]) { - ++scan; - ++match; break; } - ++scan; - ++match; break; case 3: @@ -547,15 +544,14 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib break; case 4: - if ((int*)pinnedWindow[++scan] == (int*)pinnedWindow[++match]) + if (pinnedWindow[++scan] == pinnedWindow[++match] + && pinnedWindow[++scan] == pinnedWindow[++match] + && pinnedWindow[++scan] == pinnedWindow[++match] + && pinnedWindow[++scan] == pinnedWindow[++match]) { - scan += 3; - match += 3; break; } - scan += 3; - match += 3; break; case 5: From 6dae630dc4601f84e321fefc471f6fb2168ffcea Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 8 Apr 2020 20:47:46 +0100 Subject: [PATCH 04/21] Predefine Codes and Lengths, use ReadOnlySpan where possible. --- .../Formats/Png/Zlib/DeflaterHuffman.cs | 117 ++++++++++-------- 1 file changed, 67 insertions(+), 50 deletions(-) diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs index 8380f7d5b..161760602 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs @@ -36,11 +36,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib private const int EofSymbol = 256; - private static readonly short[] StaticLCodes; - private static readonly byte[] StaticLLength; - private static readonly short[] StaticDCodes; - private static readonly byte[] StaticDLength; - private Tree literalTree; private Tree distTree; private Tree blTree; @@ -58,49 +53,6 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib private int extraBits; private bool isDisposed; - // TODO: These should be pre-generated array/readonlyspans. - static DeflaterHuffman() - { - // See RFC 1951 3.2.6 - // Literal codes - StaticLCodes = new short[LiteralNumber]; - StaticLLength = new byte[LiteralNumber]; - - int i = 0; - while (i < 144) - { - StaticLCodes[i] = BitReverse((0x030 + i) << 8); - StaticLLength[i++] = 8; - } - - while (i < 256) - { - StaticLCodes[i] = BitReverse((0x190 - 144 + i) << 7); - StaticLLength[i++] = 9; - } - - while (i < 280) - { - StaticLCodes[i] = BitReverse((0x000 - 256 + i) << 9); - StaticLLength[i++] = 7; - } - - while (i < LiteralNumber) - { - StaticLCodes[i] = BitReverse((0x0c0 - 280 + i) << 8); - StaticLLength[i++] = 8; - } - - // Distance codes - StaticDCodes = new short[DistanceNumber]; - StaticDLength = new byte[DistanceNumber]; - for (i = 0; i < DistanceNumber; i++) - { - StaticDCodes[i] = BitReverse(i << 11); - StaticDLength[i] = 5; - } - } - /// /// Initializes a new instance of the class. /// @@ -122,12 +74,77 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.pinnedLiteralBuffer = (short*)this.literalBufferHandle.Pointer; } + // See RFC 1951 3.2.6 + // Literal codes + private static short[] StaticLCodes => new short[] + { + 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, + 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, + 10, 138, 74, 202, 42, 170, 106, 234, 26, 154, 90, 218, 58, 186, 122, 250, + 6, 134, 70, 198, 38, 166, 102, 230, 22, 150, 86, 214, 54, 182, 118, 246, + 14, 142, 78, 206, 46, 174, 110, 238, 30, 158, 94, 222, 62, 190, 126, 254, + 1, 129, 65, 193, 33, 161, 97, 225, 17, 145, 81, 209, 49, 177, 113, 241, 9, + 137, 73, 201, 41, 169, 105, 233, 25, 153, 89, 217, 57, 185, 121, 249, 5, + 133, 69, 197, 37, 165, 101, 229, 21, 149, 85, 213, 53, 181, 117, 245, 13, + 141, 77, 205, 45, 173, 109, 237, 29, 157, 93, 221, 61, 189, 125, 253, 19, + 275, 147, 403, 83, 339, 211, 467, 51, 307, 179, 435, 115, 371, 243, 499, + 11, 267, 139, 395, 75, 331, 203, 459, 43, 299, 171, 427, 107, 363, 235, 491, + 27, 283, 155, 411, 91, 347, 219, 475, 59, 315, 187, 443, 123, 379, 251, 507, + 7, 263, 135, 391, 71, 327, 199, 455, 39, 295, 167, 423, 103, 359, 231, 487, + 23, 279, 151, 407, 87, 343, 215, 471, 55, 311, 183, 439, 119, 375, 247, 503, + 15, 271, 143, 399, 79, 335, 207, 463, 47, 303, 175, 431, 111, 367, 239, 495, + 31, 287, 159, 415, 95, 351, 223, 479, 63, 319, 191, 447, 127, 383, 255, 511, + 0, 64, 32, 96, 16, 80, 48, 112, 8, 72, 40, 104, 24, 88, 56, 120, 4, 68, 36, + 100, 20, 84, 52, 116, 3, 131, 67, 195, 35, 163 + }; + + private static ReadOnlySpan StaticLLength => new byte[] + { + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8 + }; + + // Distance codes and lengths. + private static short[] StaticDCodes => new short[] + { + 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, + 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23 + }; + + private static ReadOnlySpan StaticDLength => new byte[] + { + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 + }; + /// /// Gets the lengths of the bit length codes are sent in order of decreasing probability, to avoid transmitting the lengths for unused bit length codes. /// - private static ReadOnlySpan BitLengthOrder => new byte[] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + private static ReadOnlySpan BitLengthOrder => new byte[] + { + 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + }; - private static ReadOnlySpan Bit4Reverse => new byte[] { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; + private static ReadOnlySpan Bit4Reverse => new byte[] + { + 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 + }; /// /// Gets the pending buffer to use. From 43b77b9036b44e24f9b9f90c09810a02ae9faa10 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Wed, 8 Apr 2020 22:51:32 +0100 Subject: [PATCH 05/21] Use static fields. See if dll version fix CI 472 build --- Directory.Build.targets | 6 +++--- src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Directory.Build.targets b/Directory.Build.targets index 83322cabf..e5c44f776 100644 --- a/Directory.Build.targets +++ b/Directory.Build.targets @@ -23,12 +23,12 @@ - + - - + + diff --git a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs index 161760602..022d3d4d0 100644 --- a/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs +++ b/src/ImageSharp/Formats/Png/Zlib/DeflaterHuffman.cs @@ -74,9 +74,11 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib this.pinnedLiteralBuffer = (short*)this.literalBufferHandle.Pointer; } +#pragma warning disable SA1201 // Elements should appear in the correct order + // See RFC 1951 3.2.6 // Literal codes - private static short[] StaticLCodes => new short[] + private static readonly short[] StaticLCodes = new short[] { 12, 140, 76, 204, 44, 172, 108, 236, 28, 156, 92, 220, 60, 188, 124, 252, 2, 130, 66, 194, 34, 162, 98, 226, 18, 146, 82, 210, 50, 178, 114, 242, @@ -121,7 +123,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib }; // Distance codes and lengths. - private static short[] StaticDCodes => new short[] + private static readonly short[] StaticDCodes = new short[] { 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23 @@ -132,6 +134,7 @@ namespace SixLabors.ImageSharp.Formats.Png.Zlib 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; +#pragma warning restore SA1201 // Elements should appear in the correct order /// /// Gets the lengths of the bit length codes are sent in order of decreasing probability, to avoid transmitting the lengths for unused bit length codes. From ee96011669a4a7848bcb1f4a58927015bdb6cf6d Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 14 Apr 2020 11:04:04 +0200 Subject: [PATCH 06/21] Add support for reading IPTC metadata --- .../Components/Decoder/ProfileResolver.cs | 24 ++ .../Formats/Jpeg/JpegDecoderCore.cs | 120 +++++- src/ImageSharp/Metadata/ImageMetadata.cs | 6 + .../Metadata/Profiles/IPTC/IptcProfile.cs | 204 ++++++++++ .../Metadata/Profiles/IPTC/IptcTag.cs | 351 ++++++++++++++++++ .../Metadata/Profiles/IPTC/IptcValue.cs | 167 +++++++++ .../Metadata/Profiles/IPTC/README.md | 9 + 7 files changed, 872 insertions(+), 9 deletions(-) create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/README.md diff --git a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs index 87b486ea6..325d7780a 100644 --- a/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs +++ b/src/ImageSharp/Formats/Jpeg/Components/Decoder/ProfileResolver.cs @@ -28,6 +28,30 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder (byte)'I', (byte)'L', (byte)'E', (byte)'\0' }; + /// + /// Gets the adobe photoshop APP13 marker which can contain IPTC meta data. + /// + public static ReadOnlySpan AdobePhotoshopApp13Marker => new[] + { + (byte)'P', (byte)'h', (byte)'o', (byte)'t', (byte)'o', (byte)'s', (byte)'h', (byte)'o', (byte)'p', (byte)' ', (byte)'3', (byte)'.', (byte)'0', (byte)'\0' + }; + + /// + /// Gets the 8BIM marker, which signals the start of a adobe specific image resource block. + /// + public static ReadOnlySpan AdobeImageResourceBlockMarker => new[] + { + (byte)'8', (byte)'B', (byte)'I', (byte)'M' + }; + + /// + /// Gets a IPTC Image resource ID. + /// + public static ReadOnlySpan AdobeIptcMarker => new[] + { + (byte)4, (byte)4 + }; + /// /// Gets the EXIF specific markers. /// diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 951fec1d4..46f0e694e 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -14,6 +14,7 @@ using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Icc; +using SixLabors.ImageSharp.Metadata.Profiles.Iptc; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats.Jpeg @@ -46,7 +47,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg private readonly byte[] markerBuffer = new byte[2]; /// - /// The DC Huffman tables + /// The DC Huffman tables. /// private HuffmanTable[] dcHuffmanTables; @@ -56,37 +57,47 @@ namespace SixLabors.ImageSharp.Formats.Jpeg private HuffmanTable[] acHuffmanTables; /// - /// The reset interval determined by RST markers + /// The reset interval determined by RST markers. /// private ushort resetInterval; /// - /// Whether the image has an EXIF marker + /// Whether the image has an EXIF marker. /// private bool isExif; /// - /// Contains exif data + /// Contains exif data. /// private byte[] exifData; /// - /// Whether the image has an ICC marker + /// Whether the image has an ICC marker. /// private bool isIcc; /// - /// Contains ICC data + /// Contains ICC data. /// private byte[] iccData; /// - /// Contains information about the JFIF marker + /// Whether the image has a IPTC data. + /// + private bool isIptc; + + /// + /// Contains IPTC data. + /// + private byte[] iptcData; + + /// + /// Contains information about the JFIF marker. /// private JFifMarker jFif; /// - /// Contains information about the Adobe marker + /// Contains information about the Adobe marker. /// private AdobeMarker adobe; @@ -213,6 +224,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg this.ParseStream(stream); this.InitExifProfile(); this.InitIccProfile(); + this.InitIptcProfile(); this.InitDerivedMetadataProperties(); return this.PostProcessIntoImage(); } @@ -226,6 +238,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg this.ParseStream(stream, true); this.InitExifProfile(); this.InitIccProfile(); + this.InitIptcProfile(); this.InitDerivedMetadataProperties(); return new ImageInfo(new PixelTypeInfo(this.BitsPerPixel), this.ImageWidth, this.ImageHeight, this.Metadata); @@ -344,10 +357,13 @@ namespace SixLabors.ImageSharp.Formats.Jpeg case JpegConstants.Markers.APP10: case JpegConstants.Markers.APP11: case JpegConstants.Markers.APP12: - case JpegConstants.Markers.APP13: this.InputStream.Skip(remaining); break; + case JpegConstants.Markers.APP13: + this.ProcessApp13Marker(remaining); + break; + case JpegConstants.Markers.APP14: this.ProcessApp14Marker(remaining); break; @@ -437,6 +453,18 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } } + /// + /// Initializes the IPTC profile. + /// + private void InitIptcProfile() + { + if (this.isIptc) + { + var profile = new IptcProfile(this.iptcData); + this.Metadata.IptcProfile = profile; + } + } + /// /// Assigns derived metadata properties to , eg. horizontal and vertical resolution if it has a JFIF header. /// @@ -582,6 +610,80 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } } + /// + /// Processes a App13 marker, which contains IPTC data stored with Adobe Photoshop. + /// The content of an APP13 segment is formed by an identifier string followed by a sequence of resource data blocks. + /// + /// The remaining bytes in the segment block. + private void ProcessApp13Marker(int remaining) + { + if (remaining < ProfileResolver.AdobePhotoshopApp13Marker.Length || this.IgnoreMetadata) + { + this.InputStream.Skip(remaining); + return; + } + + var identifier = new byte[ProfileResolver.AdobePhotoshopApp13Marker.Length]; + this.InputStream.Read(identifier, 0, identifier.Length); + remaining -= identifier.Length; + if (ProfileResolver.IsProfile(identifier, ProfileResolver.AdobePhotoshopApp13Marker)) + { + var resourceBlockData = new byte[remaining]; + this.InputStream.Read(resourceBlockData, 0, remaining); + Span blockDataSpan = resourceBlockData.AsSpan(); + + while (blockDataSpan.Length > 10) + { + if (!ProfileResolver.IsProfile(blockDataSpan.Slice(0, 4), ProfileResolver.AdobeImageResourceBlockMarker)) + { + return; + } + + blockDataSpan = blockDataSpan.Slice(4); + Span imageResourceBlockId = blockDataSpan.Slice(0, 2); + if (ProfileResolver.IsProfile(imageResourceBlockId, ProfileResolver.AdobeIptcMarker)) + { + var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); + var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); + this.isIptc = true; + this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); + break; + } + else + { + var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); + var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); + blockDataSpan = blockDataSpan.Slice(2 + resourceBlockNameLength + 4 + resourceDataSize); + } + } + } + } + + /// + /// Reads the adobe image resource block name: a Pascal string (padded to make size even). + /// + /// The span holding the block resource data. + /// The length of the name. + [MethodImpl(InliningOptions.ShortMethod)] + private static int ReadImageResourceNameLength(Span blockDataSpan) + { + byte nameLength = blockDataSpan[2]; + var nameDataSize = nameLength == 0 ? 2 : nameLength; + return nameDataSize; + } + + /// + /// Reads the length of a adobe image resource data block. + /// + /// The span holding the block resource data. + /// The length of the block name. + /// The block length. + [MethodImpl(InliningOptions.ShortMethod)] + private static int ReadResourceDataLength(Span blockDataSpan, int resourceBlockNameLength) + { + return BinaryPrimitives.ReadInt32BigEndian(blockDataSpan.Slice(2 + resourceBlockNameLength, 4)); + } + /// /// Processes the application header containing the Adobe identifier /// which stores image encoding information for DCT filters. diff --git a/src/ImageSharp/Metadata/ImageMetadata.cs b/src/ImageSharp/Metadata/ImageMetadata.cs index b3751bfbd..4fa07592e 100644 --- a/src/ImageSharp/Metadata/ImageMetadata.cs +++ b/src/ImageSharp/Metadata/ImageMetadata.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Icc; +using SixLabors.ImageSharp.Metadata.Profiles.Iptc; namespace SixLabors.ImageSharp.Metadata { @@ -122,6 +123,11 @@ namespace SixLabors.ImageSharp.Metadata /// public IccProfile IccProfile { get; set; } + /// + /// Gets or sets the iptc profile. + /// + public IptcProfile IptcProfile { get; set; } + /// /// Gets the metadata value associated with the specified key. /// diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs new file mode 100644 index 000000000..2b0281b3b --- /dev/null +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -0,0 +1,204 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; +using System.Buffers.Binary; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Text; + +namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc +{ + /// + /// Class that can be used to access an Iptc profile. + /// + /// This source code is from the Magick.Net project: + /// https://github.com/dlemstra/Magick.NET/tree/master/src/Magick.NET/Shared/Profiles/Iptc/IptcProfile.cs + /// + public sealed class IptcProfile + { + private Collection values; + + private byte[] data; + + /// + /// Initializes a new instance of the class. + /// + public IptcProfile() + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The byte array to read the iptc profile from. + public IptcProfile(byte[] data) + { + this.data = data; + } + + /// + /// Gets the values of this iptc profile. + /// + public IEnumerable Values + { + get + { + this.Initialize(); + return this.values; + } + } + + /// + /// Returns the value with the specified tag. + /// + /// The tag of the iptc value. + /// The value with the specified tag. + public IptcValue GetValue(IptcTag tag) + { + foreach (IptcValue iptcValue in this.Values) + { + if (iptcValue.Tag == tag) + { + return iptcValue; + } + } + + return null; + } + + /// + /// Removes the value with the specified tag. + /// + /// The tag of the iptc value. + /// True when the value was fount and removed. + public bool RemoveValue(IptcTag tag) + { + this.Initialize(); + + for (int i = 0; i < this.values.Count; i++) + { + if (this.values[i].Tag == tag) + { + this.values.RemoveAt(i); + return true; + } + } + + return false; + } + + /// + /// Changes the encoding for all the values. + /// + /// The encoding to use when storing the bytes. + public void SetEncoding(Encoding encoding) + { + Guard.NotNull(encoding, nameof(encoding)); + + foreach (IptcValue value in this.Values) + { + value.Encoding = encoding; + } + } + + /// + /// Sets the value of the specified tag. + /// + /// The tag of the iptc value. + /// The encoding to use when storing the bytes. + /// The value. + public void SetValue(IptcTag tag, Encoding encoding, string value) + { + Guard.NotNull(encoding, nameof(encoding)); + + foreach (IptcValue iptcValue in this.Values) + { + if (iptcValue.Tag == tag) + { + iptcValue.Encoding = encoding; + iptcValue.Value = value; + return; + } + } + + this.values.Add(new IptcValue(tag, encoding, value)); + } + + /// + /// Sets the value of the specified tag. + /// + /// The tag of the iptc value. + /// The value. + public void SetValue(IptcTag tag, string value) => this.SetValue(tag, Encoding.UTF8, value); + + /// + /// Updates the data of the profile. + /// + public void UpdateData() + { + var length = 0; + foreach (IptcValue value in this.Values) + { + length += value.Length + 5; + } + + this.data = new byte[length]; + + int i = 0; + foreach (IptcValue value in this.Values) + { + this.data[i++] = 28; + this.data[i++] = 2; + this.data[i++] = (byte)value.Tag; + this.data[i++] = (byte)(value.Length >> 8); + this.data[i++] = (byte)value.Length; + if (value.Length > 0) + { + Buffer.BlockCopy(value.ToByteArray(), 0, this.data, i, value.Length); + i += value.Length; + } + } + } + + private void Initialize() + { + if (this.values != null) + { + return; + } + + this.values = new Collection(); + + if (this.data == null || this.data[0] != 0x1c) + { + return; + } + + int i = 0; + while (i + 4 < this.data.Length) + { + if (this.data[i++] != 28) + { + continue; + } + + i++; + + var tag = (IptcTag)this.data[i++]; + + int count = BinaryPrimitives.ReadInt16BigEndian(this.data.AsSpan(i, 2)); + i += 2; + + var iptcData = new byte[count]; + if ((count > 0) && (i + count <= this.data.Length)) + { + Buffer.BlockCopy(this.data, i, iptcData, 0, count); + this.values.Add(new IptcValue(tag, iptcData)); + } + + i += count; + } + } + } +} diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs new file mode 100644 index 000000000..3e6da0e09 --- /dev/null +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -0,0 +1,351 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc +{ + /// + /// All iptc tags. + /// + public enum IptcTag + { + /// + /// Unknown + /// + Unknown = -1, + + /// + /// Record version + /// + RecordVersion = 0, + + /// + /// Object type + /// + ObjectType = 3, + + /// + /// Object attribute + /// + ObjectAttribute = 4, + + /// + /// Title + /// + Title = 5, + + /// + /// Edit status + /// + EditStatus = 7, + + /// + /// Editorial update + /// + EditorialUpdate = 8, + + /// + /// Priority + /// + Priority = 10, + + /// + /// Category + /// + Category = 15, + + /// + /// Supplemental categories + /// + SupplementalCategories = 20, + + /// + /// Fixture identifier + /// + FixtureIdentifier = 22, + + /// + /// Keyword + /// + Keyword = 25, + + /// + /// Location code + /// + LocationCode = 26, + + /// + /// Location name + /// + LocationName = 27, + + /// + /// Release date + /// + ReleaseDate = 30, + + /// + /// Release time + /// + ReleaseTime = 35, + + /// + /// Expiration date + /// + ExpirationDate = 37, + + /// + /// Expiration time + /// + ExpirationTime = 38, + + /// + /// Special instructions + /// + SpecialInstructions = 40, + + /// + /// Action advised + /// + ActionAdvised = 42, + + /// + /// Reference service + /// + ReferenceService = 45, + + /// + /// Reference date + /// + ReferenceDate = 47, + + /// + /// ReferenceNumber + /// + ReferenceNumber = 50, + + /// + /// Created date + /// + CreatedDate = 55, + + /// + /// Created time + /// + CreatedTime = 60, + + /// + /// Digital creation date + /// + DigitalCreationDate = 62, + + /// + /// Digital creation time + /// + DigitalCreationTime = 63, + + /// + /// Originating program + /// + OriginatingProgram = 65, + + /// + /// Program version + /// + ProgramVersion = 70, + + /// + /// Object cycle + /// + ObjectCycle = 75, + + /// + /// Byline + /// + Byline = 80, + + /// + /// Byline title + /// + BylineTitle = 85, + + /// + /// City + /// + City = 90, + + /// + /// Sub location + /// + SubLocation = 92, + + /// + /// Province/State + /// + ProvinceState = 95, + + /// + /// Country code + /// + CountryCode = 100, + + /// + /// Country + /// + Country = 101, + + /// + /// Original transmission reference + /// + OriginalTransmissionReference = 103, + + /// + /// Headline + /// + Headline = 105, + + /// + /// Credit + /// + Credit = 110, + + /// + /// Source + /// + Source = 115, + + /// + /// Copyright notice + /// + CopyrightNotice = 116, + + /// + /// Contact + /// + Contact = 118, + + /// + /// Caption + /// + Caption = 120, + + /// + /// Local caption + /// + LocalCaption = 121, + + /// + /// Caption writer + /// + CaptionWriter = 122, + + /// + /// Image type + /// + ImageType = 130, + + /// + /// Image orientation + /// + ImageOrientation = 131, + + /// + /// Custom field 1 + /// + CustomField1 = 200, + + /// + /// Custom field 2 + /// + CustomField2 = 201, + + /// + /// Custom field 3 + /// + CustomField3 = 202, + + /// + /// Custom field 4 + /// + CustomField4 = 203, + + /// + /// Custom field 5 + /// + CustomField5 = 204, + + /// + /// Custom field 6 + /// + CustomField6 = 205, + + /// + /// Custom field 7 + /// + CustomField7 = 206, + + /// + /// Custom field 8 + /// + CustomField8 = 207, + + /// + /// Custom field 9 + /// + CustomField9 = 208, + + /// + /// Custom field 10 + /// + CustomField10 = 209, + + /// + /// Custom field 11 + /// + CustomField11 = 210, + + /// + /// Custom field 12 + /// + CustomField12 = 211, + + /// + /// Custom field 13 + /// + CustomField13 = 212, + + /// + /// Custom field 14 + /// + CustomField14 = 213, + + /// + /// Custom field 15 + /// + CustomField15 = 214, + + /// + /// Custom field 16 + /// + CustomField16 = 215, + + /// + /// Custom field 17 + /// + CustomField17 = 216, + + /// + /// Custom field 18 + /// + CustomField18 = 217, + + /// + /// Custom field 19 + /// + CustomField19 = 218, + + /// + /// Custom field 20 + /// + CustomField20 = 219, + } +} diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs new file mode 100644 index 000000000..c23a7793e --- /dev/null +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -0,0 +1,167 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System; +using System.Text; + +namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc +{ + /// + /// A value of the iptc profile. + /// + public sealed class IptcValue + { + private byte[] data; + private Encoding encoding; + + internal IptcValue(IptcTag tag, byte[] value) + { + Guard.NotNull(value, nameof(value)); + + this.Tag = tag; + this.data = value; + this.encoding = Encoding.UTF8; + } + + internal IptcValue(IptcTag tag, Encoding encoding, string value) + { + this.Tag = tag; + this.encoding = encoding; + this.Value = value; + } + + /// + /// Gets or sets the encoding to use for the Value. + /// + public Encoding Encoding + { + get => this.encoding; + set + { + if (value != null) + { + this.encoding = value; + } + } + } + + /// + /// Gets the tag of the iptc value. + /// + public IptcTag Tag { get; } + + /// + /// Gets or sets the value. + /// + public string Value + { + get => this.encoding.GetString(this.data); + set + { + if (string.IsNullOrEmpty(value)) + { + this.data = new byte[0]; + } + else + { + this.data = this.encoding.GetBytes(value); + } + } + } + + /// + /// Gets the length of the value. + /// + public int Length => this.data.Length; + + /// + /// Determines whether the specified object is equal to the current . + /// + /// The object to compare this with. + /// True when the specified object is equal to the current . + public override bool Equals(object obj) + { + if (ReferenceEquals(this, obj)) + { + return true; + } + + return this.Equals(obj as IptcValue); + } + + /// + /// Determines whether the specified iptc value is equal to the current . + /// + /// The iptc value to compare this with. + /// True when the specified iptc value is equal to the current . + public bool Equals(IptcValue other) + { + if (other is null) + { + return false; + } + + if (ReferenceEquals(this, other)) + { + return true; + } + + if (this.Tag != other.Tag) + { + return false; + } + + byte[] data = other.ToByteArray(); + + if (this.data.Length != data.Length) + { + return false; + } + + for (int i = 0; i < this.data.Length; i++) + { + if (this.data[i] != data[i]) + { + return false; + } + } + + return true; + } + + /// + /// Serves as a hash of this type. + /// + /// A hash code for the current instance. + public override int GetHashCode() => HashCode.Combine(this.data, this.Tag); + + /// + /// Converts this instance to a byte array. + /// + /// A array. + public byte[] ToByteArray() + { + var result = new byte[this.data.Length]; + this.data.CopyTo(result, 0); + return result; + } + + /// + /// Returns a string that represents the current value. + /// + /// A string that represents the current value. + public override string ToString() => this.Value; + + /// + /// Returns a string that represents the current value with the specified encoding. + /// + /// The encoding to use. + /// A string that represents the current value with the specified encoding. + public string ToString(Encoding enc) + { + Guard.NotNull(enc, nameof(enc)); + + return enc.GetString(this.data); + } + } +} diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/README.md b/src/ImageSharp/Metadata/Profiles/IPTC/README.md new file mode 100644 index 000000000..0b0efc967 --- /dev/null +++ b/src/ImageSharp/Metadata/Profiles/IPTC/README.md @@ -0,0 +1,9 @@ +IPTC source code is from [Magick.NET](https://github.com/dlemstra/Magick.NET) + +Information about IPTC can be found here in the folowing sources: + +- [metacpan.org, APP13-segment](https://metacpan.org/pod/Image::MetaData::JPEG::Structures#Structure-of-a-Photoshop-style-APP13-segment) + +- [iptc.org](https://www.iptc.org/std/photometadata/documentation/userguide/) + +- [Adobe File Formats Specification](http://oldschoolprg.x10.mx/downloads/ps6ffspecsv2.pdf) \ No newline at end of file From 14312962b264b4c517c6f460f377db0ed7623035 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 14 Apr 2020 16:23:14 +0200 Subject: [PATCH 07/21] Add unit tests for reading IPTC profile --- src/ImageSharp/Metadata/ImageMetadata.cs | 1 + .../Metadata/Profiles/Exif/ExifProfile.cs | 3 + .../Metadata/Profiles/IPTC/IptcProfile.cs | 64 +++++++++---- .../Metadata/Profiles/IPTC/IptcValue.cs | 21 ++++- .../Profiles/IPTC/IptcProfileTests.cs | 88 ++++++++++++++++++ tests/ImageSharp.Tests/TestImages.cs | 1 + tests/Images/Input/Jpg/baseline/iptc.jpg | Bin 0 -> 18611 bytes 7 files changed, 159 insertions(+), 19 deletions(-) create mode 100644 tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs create mode 100644 tests/Images/Input/Jpg/baseline/iptc.jpg diff --git a/src/ImageSharp/Metadata/ImageMetadata.cs b/src/ImageSharp/Metadata/ImageMetadata.cs index 4fa07592e..716e89e68 100644 --- a/src/ImageSharp/Metadata/ImageMetadata.cs +++ b/src/ImageSharp/Metadata/ImageMetadata.cs @@ -66,6 +66,7 @@ namespace SixLabors.ImageSharp.Metadata this.ExifProfile = other.ExifProfile?.DeepClone(); this.IccProfile = other.IccProfile?.DeepClone(); + this.IptcProfile = other.IptcProfile?.DeepClone(); } /// diff --git a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs index 11d0bd01b..29c21d611 100644 --- a/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/Exif/ExifProfile.cs @@ -57,8 +57,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Exif /// by making a copy from another EXIF profile. /// /// The other EXIF profile, where the clone should be made from. + /// is null.> private ExifProfile(ExifProfile other) { + Guard.NotNull(other, nameof(other)); + this.Parts = other.Parts; this.thumbnailLength = other.thumbnailLength; this.thumbnailOffset = other.thumbnailOffset; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index 2b0281b3b..57704949c 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -15,16 +15,15 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// This source code is from the Magick.Net project: /// https://github.com/dlemstra/Magick.NET/tree/master/src/Magick.NET/Shared/Profiles/Iptc/IptcProfile.cs /// - public sealed class IptcProfile + public sealed class IptcProfile : IDeepCloneable { private Collection values; - private byte[] data; - /// /// Initializes a new instance of the class. /// public IptcProfile() + : this((byte[])null) { } @@ -34,9 +33,35 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// The byte array to read the iptc profile from. public IptcProfile(byte[] data) { - this.data = data; + this.Data = data; + } + + private IptcProfile(IptcProfile other) + { + Guard.NotNull(other, nameof(other)); + + if (other.values != null) + { + this.values = new Collection(); + + foreach (IptcValue value in other.Values) + { + this.values.Add(value.DeepClone()); + } + } + + if (other.Data != null) + { + this.Data = new byte[other.Data.Length]; + other.Data.AsSpan().CopyTo(this.Data); + } } + /// + /// Gets the byte data of the IPTC profile. + /// + public byte[] Data { get; private set; } + /// /// Gets the values of this iptc profile. /// @@ -49,6 +74,9 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc } } + /// + public IptcProfile DeepClone() => new IptcProfile(this); + /// /// Returns the value with the specified tag. /// @@ -143,19 +171,19 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc length += value.Length + 5; } - this.data = new byte[length]; + this.Data = new byte[length]; int i = 0; foreach (IptcValue value in this.Values) { - this.data[i++] = 28; - this.data[i++] = 2; - this.data[i++] = (byte)value.Tag; - this.data[i++] = (byte)(value.Length >> 8); - this.data[i++] = (byte)value.Length; + this.Data[i++] = 28; + this.Data[i++] = 2; + this.Data[i++] = (byte)value.Tag; + this.Data[i++] = (byte)(value.Length >> 8); + this.Data[i++] = (byte)value.Length; if (value.Length > 0) { - Buffer.BlockCopy(value.ToByteArray(), 0, this.data, i, value.Length); + Buffer.BlockCopy(value.ToByteArray(), 0, this.Data, i, value.Length); i += value.Length; } } @@ -170,30 +198,30 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc this.values = new Collection(); - if (this.data == null || this.data[0] != 0x1c) + if (this.Data == null || this.Data[0] != 0x1c) { return; } int i = 0; - while (i + 4 < this.data.Length) + while (i + 4 < this.Data.Length) { - if (this.data[i++] != 28) + if (this.Data[i++] != 28) { continue; } i++; - var tag = (IptcTag)this.data[i++]; + var tag = (IptcTag)this.Data[i++]; - int count = BinaryPrimitives.ReadInt16BigEndian(this.data.AsSpan(i, 2)); + int count = BinaryPrimitives.ReadInt16BigEndian(this.Data.AsSpan(i, 2)); i += 2; var iptcData = new byte[count]; - if ((count > 0) && (i + count <= this.data.Length)) + if ((count > 0) && (i + count <= this.Data.Length)) { - Buffer.BlockCopy(this.data, i, iptcData, 0, count); + Buffer.BlockCopy(this.Data, i, iptcData, 0, count); this.values.Add(new IptcValue(tag, iptcData)); } diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index c23a7793e..a5977fd27 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -9,11 +9,27 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// A value of the iptc profile. /// - public sealed class IptcValue + public sealed class IptcValue : IDeepCloneable { private byte[] data; private Encoding encoding; + internal IptcValue(IptcValue other) + { + if (other.data != null) + { + this.data = new byte[other.data.Length]; + other.data.AsSpan().CopyTo(this.data); + } + + if (other.Encoding != null) + { + this.Encoding = (Encoding)other.Encoding.Clone(); + } + + this.Tag = other.Tag; + } + internal IptcValue(IptcTag tag, byte[] value) { Guard.NotNull(value, nameof(value)); @@ -74,6 +90,9 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// public int Length => this.data.Length; + /// + public IptcValue DeepClone() => new IptcValue(this); + /// /// Determines whether the specified object is equal to the current . /// diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs new file mode 100644 index 000000000..045859c36 --- /dev/null +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -0,0 +1,88 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +using System.Collections.Generic; +using System.Linq; +using SixLabors.ImageSharp.Formats.Jpeg; +using SixLabors.ImageSharp.Metadata.Profiles.Iptc; +using SixLabors.ImageSharp.PixelFormats; +using Xunit; + +namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC +{ + public class IptcProfileTests + { + private static JpegDecoder JpegDecoder => new JpegDecoder() { IgnoreMetadata = false }; + + [Theory] + [WithFile(TestImages.Jpeg.Baseline.Iptc, PixelTypes.Rgba32)] + public void ReadIptcProfile(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + using (Image image = provider.GetImage(JpegDecoder)) + { + Assert.NotNull(image.Metadata.IptcProfile); + IEnumerable iptcValues = image.Metadata.IptcProfile.Values; + ContainsIptcValue(iptcValues, IptcTag.Caption, "description"); + ContainsIptcValue(iptcValues, IptcTag.CaptionWriter, "description writer"); + ContainsIptcValue(iptcValues, IptcTag.Headline, "headline"); + ContainsIptcValue(iptcValues, IptcTag.SpecialInstructions, "special instructions"); + ContainsIptcValue(iptcValues, IptcTag.Byline, "author"); + ContainsIptcValue(iptcValues, IptcTag.BylineTitle, "author title"); + ContainsIptcValue(iptcValues, IptcTag.Credit, "credits"); + ContainsIptcValue(iptcValues, IptcTag.Source, "source"); + ContainsIptcValue(iptcValues, IptcTag.Title, "title"); + ContainsIptcValue(iptcValues, IptcTag.CreatedDate, "20200414"); + ContainsIptcValue(iptcValues, IptcTag.City, "city"); + ContainsIptcValue(iptcValues, IptcTag.SubLocation, "sublocation"); + ContainsIptcValue(iptcValues, IptcTag.ProvinceState, "province-state"); + ContainsIptcValue(iptcValues, IptcTag.Country, "country"); + ContainsIptcValue(iptcValues, IptcTag.Category, "category"); + ContainsIptcValue(iptcValues, IptcTag.Priority, "1"); + ContainsIptcValue(iptcValues, IptcTag.Keyword, "keywords"); + ContainsIptcValue(iptcValues, IptcTag.CopyrightNotice, "copyright"); + } + } + + [Fact] + public void IptcProfile_CloneIsDeep() + { + // arrange + var profile = new IptcProfile(); + var captionWriter = "unittest"; + var caption = "test"; + profile.SetValue(IptcTag.CaptionWriter, captionWriter); + profile.SetValue(IptcTag.Caption, caption); + + // act + IptcProfile clone = profile.DeepClone(); + clone.SetValue(IptcTag.Caption, "changed"); + + // assert + Assert.Equal(2, clone.Values.Count()); + ContainsIptcValue(clone.Values, IptcTag.CaptionWriter, captionWriter); + ContainsIptcValue(clone.Values, IptcTag.Caption, "changed"); + ContainsIptcValue(profile.Values, IptcTag.Caption, caption); + } + + [Fact] + public void IptcValue_CloneIsDeep() + { + // arrange + var iptcValue = new IptcValue(IptcTag.Caption, System.Text.Encoding.UTF8, "test"); + + // act + IptcValue clone = iptcValue.DeepClone(); + clone.Value = "changed"; + + // assert + Assert.NotEqual(iptcValue.Value, clone.Value); + } + + private static void ContainsIptcValue(IEnumerable values, IptcTag tag, string value) + { + Assert.True(values.Any(val => val.Tag == tag), $"Missing iptc tag {tag}"); + Assert.True(values.Contains(new IptcValue(tag, System.Text.Encoding.UTF8.GetBytes(value))), $"expected iptc value '{value}' was not found for tag '{tag}'"); + } + } +} diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index 892568803..d006c6682 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -162,6 +162,7 @@ namespace SixLabors.ImageSharp.Tests public const string LowContrast = "Jpg/baseline/AsianCarvingLowContrast.jpg"; public const string Testorig12bit = "Jpg/baseline/testorig12.jpg"; public const string YcckSubsample1222 = "Jpg/baseline/ycck-subsample-1222.jpg"; + public const string Iptc = "Jpg/baseline/iptc.jpg"; public static readonly string[] All = { diff --git a/tests/Images/Input/Jpg/baseline/iptc.jpg b/tests/Images/Input/Jpg/baseline/iptc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..de30930d6b1db7b7bc7239dfd3b4145d814afefb GIT binary patch literal 18611 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


{^xg;q*`?zA!sq*a7t};Y zC8_JqMAV7v9Cfs``$5FU-%D7JSjjJtyEhN~XGqPd2@P+(!i7OziT%sADJ2)0kCm>M zE?&Be`CE%m>RQs%<}Jzb32Sao8t?X4?RhgVWZ6B8z3m6Pta8!C`KxaugSWXnro760 zrFkRt2^l_r^*~YD5L^4A{M}w(IPN{k6d%1a_{zR-wlDe;i=UPJq@q}~WhwT1Dz+iq zV?@Y|4bi!?co*0B{&1L~&fqrvGMPJP|GE={PKC|fI6ty%#ARn$)@Qj)yY$Z{*VgBw zlWGie-SaTvZuhv&_RfaY3f{3` z$GWX?f=j>4s-8+cHV=gz*o|Mrc(i>!>+B( zp7}ENYWT*Vj#hu_x7BXLvDRGI>48TJb!Q(sk9?KNh#sFZ{$vrE?0sC3t6FeDL*7(Z zp0|?rwkoIqks~p;9*$wQ4!$>(|C8tkKmYZ0B?ouDLbh$5>SK7RZm!(4NVILQ?!gzc zJNzMB;gm`xhtR25v8bK<-sX^v-0CO6x62NqiQ6s1gNXPlgO zS$)DWW%z5a1eMvjZoIjf;&&zpXie|z|G(|51JTfIy4iw{xSAk6{A3H#wg0?*~Y zaH^&Uv6h4{;%(jEa{l_v{rSz5AtUqiH%a#mf=O6WOLJWMqo8?54%F-BILw&vEM?%+ zpC_OEcw~hm=f-5njHs5&w>POgp}SU9%u~ z8j|t#vBv}HS+lQMqsEF@zxn{$=!~67b$&yq50d$3y9O*vo-q5!N1jpFw%l+iPN>>E zIn>GP<%7~1^4szM-cwsoDSlmc^jKtrVB4E|^5fWZFS1B43oFNN4Euzd$vherfX!0P zKOMUE@~|+v&fW7?Sy<|bOPdeN`+reCs(!)#s^!_Tkl-wFtG{@aKin8Qx@0EP{?Uob znuYj6IJk-0B+w+n1)DyT2rZk+g0k>^HT&9e_EI1ysJvUuvGPaT#O${t0R51%Wy zp=}v^-?^lp8|UCt^1|JohgS3RHXn)}5axO=HDaPXIJKbi%bZEGo17jC3Tlh;`u#e2 zXZk9SM-^LHuMdB}bX3;iwMPe5&ELz>_^#MF_`DlOl@YN2hR5ZI%~=0iDOzU!y|bym m>o!KjjMOaqY^3T^|IBcYH%C>Kb7|A|j}mfJHSsswYX1*+AgjFq literal 0 HcmV?d00001 From ba883d7c8ad493188b3dc514dea176cfac380e6e Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Tue, 14 Apr 2020 18:27:42 +0200 Subject: [PATCH 08/21] Add support for writing IPTC metadata --- .../Formats/Jpeg/JpegEncoderCore.cs | 54 ++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index 32f4d2287..4791a04a0 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -4,6 +4,7 @@ using System; using System.Buffers.Binary; using System.IO; +using System.Linq; using System.Runtime.CompilerServices; using SixLabors.ImageSharp.Common.Helpers; using SixLabors.ImageSharp.Formats.Jpeg.Components; @@ -13,6 +14,7 @@ using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Metadata; using SixLabors.ImageSharp.Metadata.Profiles.Exif; using SixLabors.ImageSharp.Metadata.Profiles.Icc; +using SixLabors.ImageSharp.Metadata.Profiles.Iptc; using SixLabors.ImageSharp.PixelFormats; namespace SixLabors.ImageSharp.Formats.Jpeg @@ -647,9 +649,6 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// Writes the EXIF profile. ///
/// The exif profile. - /// - /// Thrown if the EXIF profile size exceeds the limit - /// private void WriteExifProfile(ExifProfile exifProfile) { if (exifProfile is null || exifProfile.Values.Count == 0) @@ -697,16 +696,56 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } } + /// + /// Writes the IPTC metadata. + /// + /// The iptc metadata to write. + private void WriteIptcProfile(IptcProfile iptcProfile) + { + if (iptcProfile is null || !iptcProfile.Values.Any()) + { + return; + } + + iptcProfile.UpdateData(); + var data = iptcProfile.Data; + if (data.Length == 0) + { + return; + } + + var app13length = data.Length + ProfileResolver.AdobeImageResourceBlockMarker.Length + ProfileResolver.AdobeIptcMarker.Length + 2 + 4; + this.WriteAppHeader(app13length, JpegConstants.Markers.APP13); + this.outputStream.Write(this.buffer, 0, 4); + this.outputStream.Write(ProfileResolver.AdobeImageResourceBlockMarker); + this.outputStream.Write(ProfileResolver.AdobeIptcMarker); + this.outputStream.WriteByte(0); // a null name consists of two bytes of 0. + this.outputStream.WriteByte(0); + BinaryPrimitives.WriteInt32BigEndian(this.buffer, data.Length); + this.outputStream.Write(this.buffer, 0, 4); + this.outputStream.Write(data, 0, data.Length); + } + /// /// Writes the App1 header. /// - /// The length of the data the app1 marker contains + /// The length of the data the app1 marker contains. private void WriteApp1Header(int app1Length) + { + this.WriteAppHeader(app1Length, JpegConstants.Markers.APP1); + } + + /// + /// Writes a AppX header. + /// + /// The length of the data the app marker contains. + /// The app marker to write. + private void WriteAppHeader(int length, byte appMarker) { this.buffer[0] = JpegConstants.Markers.XFF; - this.buffer[1] = JpegConstants.Markers.APP1; // Application Marker - this.buffer[2] = (byte)((app1Length >> 8) & 0xFF); - this.buffer[3] = (byte)(app1Length & 0xFF); + this.buffer[1] = appMarker; + this.buffer[2] = (byte)((length >> 8) & 0xFF); + this.buffer[3] = (byte)(length & 0xFF); this.outputStream.Write(this.buffer, 0, 4); } @@ -805,6 +844,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg metadata.SyncProfiles(); this.WriteExifProfile(metadata.ExifProfile); this.WriteIccProfile(metadata.IccProfile); + this.WriteIptcProfile(metadata.IptcProfile); } /// From 0e49478f37964d7603a069597ef4319ae3c49dbb Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 15 Apr 2020 15:00:25 +0200 Subject: [PATCH 09/21] Add tests for writing IPTC --- .../Formats/Jpeg/JpegDecoderCore.cs | 11 ++-- .../Formats/Jpeg/JpegEncoderCore.cs | 15 +++-- .../Profiles/IPTC/IptcProfileTests.cs | 60 ++++++++++++++++++- 3 files changed, 72 insertions(+), 14 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 46f0e694e..023bbaac7 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -623,17 +623,16 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return; } - var identifier = new byte[ProfileResolver.AdobePhotoshopApp13Marker.Length]; - this.InputStream.Read(identifier, 0, identifier.Length); - remaining -= identifier.Length; - if (ProfileResolver.IsProfile(identifier, ProfileResolver.AdobePhotoshopApp13Marker)) + this.InputStream.Read(this.temp, 0, ProfileResolver.AdobePhotoshopApp13Marker.Length); + remaining -= ProfileResolver.AdobePhotoshopApp13Marker.Length; + if (ProfileResolver.IsProfile(this.temp, ProfileResolver.AdobePhotoshopApp13Marker)) { var resourceBlockData = new byte[remaining]; this.InputStream.Read(resourceBlockData, 0, remaining); Span blockDataSpan = resourceBlockData.AsSpan(); - while (blockDataSpan.Length > 10) - { + while (blockDataSpan.Length > 12) + { if (!ProfileResolver.IsProfile(blockDataSpan.Slice(0, 4), ProfileResolver.AdobeImageResourceBlockMarker)) { return; diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index 4791a04a0..a3786ae1c 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -233,7 +233,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg // Write the Start Of Image marker. this.WriteApplicationHeader(metadata); - // Write Exif and ICC profiles + // Write Exif, ICC and IPTC profiles this.WriteProfiles(metadata); // Write the quantization tables. @@ -708,18 +708,21 @@ namespace SixLabors.ImageSharp.Formats.Jpeg } iptcProfile.UpdateData(); - var data = iptcProfile.Data; + byte[] data = iptcProfile.Data; if (data.Length == 0) { return; } - var app13length = data.Length + ProfileResolver.AdobeImageResourceBlockMarker.Length + ProfileResolver.AdobeIptcMarker.Length + 2 + 4; - this.WriteAppHeader(app13length, JpegConstants.Markers.APP13); - this.outputStream.Write(this.buffer, 0, 4); + var app13Length = 2 + ProfileResolver.AdobePhotoshopApp13Marker.Length + + ProfileResolver.AdobeImageResourceBlockMarker.Length + + ProfileResolver.AdobeIptcMarker.Length + + 2 + 4 + data.Length; + this.WriteAppHeader(app13Length, JpegConstants.Markers.APP13); + this.outputStream.Write(ProfileResolver.AdobePhotoshopApp13Marker); this.outputStream.Write(ProfileResolver.AdobeImageResourceBlockMarker); this.outputStream.Write(ProfileResolver.AdobeIptcMarker); - this.outputStream.WriteByte(0); // a null name consists of two bytes of 0. + this.outputStream.WriteByte(0); // a empty pascal string (padded to make size even) this.outputStream.WriteByte(0); BinaryPrimitives.WriteInt32BigEndian(this.buffer, data.Length); this.outputStream.Write(this.buffer, 0, 4); diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 045859c36..40dd76836 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -2,6 +2,7 @@ // Licensed under the Apache License, Version 2.0. using System.Collections.Generic; +using System.IO; using System.Linq; using SixLabors.ImageSharp.Formats.Jpeg; using SixLabors.ImageSharp.Metadata.Profiles.Iptc; @@ -16,13 +17,13 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC [Theory] [WithFile(TestImages.Jpeg.Baseline.Iptc, PixelTypes.Rgba32)] - public void ReadIptcProfile(TestImageProvider provider) + public void ReadIptcMetadata_Works(TestImageProvider provider) where TPixel : unmanaged, IPixel { using (Image image = provider.GetImage(JpegDecoder)) { Assert.NotNull(image.Metadata.IptcProfile); - IEnumerable iptcValues = image.Metadata.IptcProfile.Values; + var iptcValues = image.Metadata.IptcProfile.Values.ToList(); ContainsIptcValue(iptcValues, IptcTag.Caption, "description"); ContainsIptcValue(iptcValues, IptcTag.CaptionWriter, "description writer"); ContainsIptcValue(iptcValues, IptcTag.Headline, "headline"); @@ -44,6 +45,27 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC } } + [Fact] + public void IptcProfile_ToAndFromByteArray_Works() + { + // arrange + var profile = new IptcProfile(); + var expectedCaptionWriter = "unittest"; + var expectedCaption = "test"; + profile.SetValue(IptcTag.CaptionWriter, expectedCaptionWriter); + profile.SetValue(IptcTag.Caption, expectedCaption); + + // act + profile.UpdateData(); + byte[] profileBytes = profile.Data; + var profileFromBytes = new IptcProfile(profileBytes); + + // assert + var iptcValues = profileFromBytes.Values.ToList(); + ContainsIptcValue(iptcValues, IptcTag.CaptionWriter, expectedCaptionWriter); + ContainsIptcValue(iptcValues, IptcTag.Caption, expectedCaption); + } + [Fact] public void IptcProfile_CloneIsDeep() { @@ -79,10 +101,44 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC Assert.NotEqual(iptcValue.Value, clone.Value); } + [Fact] + public void WritingImage_PreservesIptcProfile() + { + // arrange + var image = new Image(1, 1); + image.Metadata.IptcProfile = new IptcProfile(); + var expectedCaptionWriter = "unittest"; + var expectedCaption = "test"; + image.Metadata.IptcProfile.SetValue(IptcTag.CaptionWriter, expectedCaptionWriter); + image.Metadata.IptcProfile.SetValue(IptcTag.Caption, expectedCaption); + + // act + Image reloadedImage = WriteAndReadJpeg(image); + + // assert + IptcProfile actual = reloadedImage.Metadata.IptcProfile; + Assert.NotNull(actual); + var iptcValues = actual.Values.ToList(); + ContainsIptcValue(iptcValues, IptcTag.CaptionWriter, expectedCaptionWriter); + ContainsIptcValue(iptcValues, IptcTag.Caption, expectedCaption); + } + private static void ContainsIptcValue(IEnumerable values, IptcTag tag, string value) { Assert.True(values.Any(val => val.Tag == tag), $"Missing iptc tag {tag}"); Assert.True(values.Contains(new IptcValue(tag, System.Text.Encoding.UTF8.GetBytes(value))), $"expected iptc value '{value}' was not found for tag '{tag}'"); } + + private static Image WriteAndReadJpeg(Image image) + { + using (var memStream = new MemoryStream()) + { + image.SaveAsJpeg(memStream); + image.Dispose(); + + memStream.Position = 0; + return Image.Load(memStream); + } + } } } From 07eda44d28cc29a6a7f756b79fce5aac6765efae Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 15 Apr 2020 15:00:46 +0200 Subject: [PATCH 10/21] Add IPTC specification --- .../Metadata/Profiles/IPTC/IIMV4.2_IPTC.pdf | Bin 0 -> 364258 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/IIMV4.2_IPTC.pdf diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IIMV4.2_IPTC.pdf b/src/ImageSharp/Metadata/Profiles/IPTC/IIMV4.2_IPTC.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b00355181c0ed5b4b4fbf4bf740e03ac7734c28a GIT binary patch literal 364258 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⋘Z|$@aAK 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

gN2y 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

gAovIisJGB5cD|12Fo2TW-dn*9nb98KsUI@!+3 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%0DjI&L-n~Gb+_*2x6Sr)Z8t=>H9ADStB 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%0DKr3c|_6 z%*4s$kD(?e?uHq))(9tnDZ;|i4#K=u-^>iKG=nhf3aId^prjE6%ZB$ivWH*n4$QXlo;B~ zTvSsA_FHq9e-LJ*lM_l52y}II<#FZbu}50~K_Vg|Kwdr|A0IcS2DhWTos)?hx1A%) z4xV)Gm z@$drw1(1r$zX!9m{UxLs{C6;vGur0+MVY~Y2pfbgM$R~5S_J(P4)qf~{?tuO0S1Ww zUjbp*_8S%d3gz|#>^t#)&_oQwaZ!v9hNZc?3`V3u`FQzwxp~3dAb~r)BBFf4q5=Y( zynLd(ykfw=)ck|4-*HG|Tskl!@dpkNn44D!gXRuMSQNxBDggQ!$4@o?g5w_p`G3@t z-v<5nx_`m*y#;&p9eaBls3aV1Z))NMP?v$Jm{=pw01yaZ-rj%)=-Q*req7Yg)&Go1 zMMYG`9`1b3CIuO&v$Lg{sEG)O&&1T6ms=2SD$ETQ;T7N(<_DQ@^TH7VCj4-?2){7@ zceH+nP8*O;9KsOSsATYy@J4s~GT)qCXlqukU2(WP|uiqvt)5wE4?5{L$NU zaUp7BVrKzicH=ffn437;I59&p<^TTpcUSo5*1q@luN^z@tl1wj=Kn#Lfq%jAoz}nT z$*)^I?+^TZ(%GZ`g6Euke`eVa!h9bE7!J#rxLBG2ByDUk!2$m-xc{EltrTXm`wPA@r}*amlegs@NbxS>IQ_yk+!DOxn|>W?I_oS05|h2_^#I z6MRcmDCU108e}fGubn7T2LF&r6Lv9+hV<22(;K7jWtgI-WY~yQPyp_Gysw4>p1k6T z)r?S)=^hQx7~&zV8qqh)7ZA`0mY&VN1-f8c~l$`dJ6|ae{_|xdP(}}}@s@mK~R|D^-6XzW6o;b95)A_=HW-Cd- z+iQ~7PD;G`RGJ-$3}G%8Q~j3Y-r%PC<$T2KwUcUx`M%abb!{+KZ*-SXg;(;zKud){ zLoN7q(%|Kx0HQMG0V)Cpcq^RCEG(dqngGcDwUdM0{i4sRvk29!xI6V>vW6xu2g?%a z=q^4fr#!|^prwG;ja^;khB@{Wmc}Yi= z!P5n88~^rkjT_iCd)RGSHm`bO`)G$3pUJIo+}@_TdE#wr`S?XwKp8|Uey2=Y8FKTB z{hrG)cguw}DwV=tlItg1^dHJobrZC$qnOyarq$Wj&JiF0R7WGsEa8|%4FJRkh5kz4 zsvu(^29p%v2ZQ+qVAA|DAVDxlSXNMkA1nj|Vbt1^AeazTOhi_S4=ltdAS?-k!34pQ zQv5J}X=z?zUTGC#sb*#rvcsH%kvh!Y6nDvW&b#OJYn#QF zk8_N-zJ547+fRzGJEMR^EKeLcv&*tyY+5|3G~Z>*I=>AWZFu@{9AIX{O>lH zy=iWg?Z_3)7ocJ8@?T@jsY~tlX>Gi|){YR=b5TxCB}n$X%HQYOsCpSq(0$k7-MxiA zJMFbtY3Iq}sb!Cd+Nq6iRqxO~UFbaaX=iSBrJ__q&Vdo5;+5FA%;XB#e!(UWv^Hg? zl%B1ewx69`;ypQI^!dG?g13Z+QsnOf|5@UpD+^Dx$xB)Qj?deXnU@RLA0_*Gzxr6k>n5a;82bztYMzY4|Ms z7VRsXn`?U|FT7Hl)U0o(>pNK&$!VG|7;L^+tr_u+8lSCIR-?QHq^v4&OTq*bD6HWU z%_?+dUo8hpuo`?)MNBXh-9a?&M~Y5&2wNdi)V`6Af9}Oj8s+I(k-ka-|XUWRoo_bsQxmoDo{K<2ibo)e}I;P)U0A$ zFb~#7dDaBe@@KxS-99O*xpz3jY;}6XaAGbNrD^;z{b=mnS>NY Date: Wed, 15 Apr 2020 18:07:18 +0200 Subject: [PATCH 11/21] Add padding byte when resource name length is odd --- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 023bbaac7..896f41aae 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -668,6 +668,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { byte nameLength = blockDataSpan[2]; var nameDataSize = nameLength == 0 ? 2 : nameLength; + if (nameDataSize % 2 != 0) + { + nameDataSize++; + } + return nameDataSize; } From ed1a0631f0c83ae375865b63c0cfebe2238abe09 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Wed, 15 Apr 2020 18:26:40 +0200 Subject: [PATCH 12/21] Add testcase for app13 marker with empty IPTC --- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 9 ++++++--- .../Metadata/Profiles/IPTC/IptcProfileTests.cs | 9 +++++++++ tests/ImageSharp.Tests/TestImages.cs | 1 + .../Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg | Bin 0 -> 18329 bytes 4 files changed, 16 insertions(+), 3 deletions(-) create mode 100644 tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 896f41aae..93cdd18c3 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -644,9 +644,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); - this.isIptc = true; - this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); - break; + if (resourceDataSize > 0) + { + this.isIptc = true; + this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); + break; + } } else { diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 40dd76836..914690102 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -45,6 +45,15 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC } } + [Theory] + [WithFile(TestImages.Jpeg.Baseline.App13WithEmptyIptc, PixelTypes.Rgba32)] + public void ReadApp13_WithEmptyIptc_Works(TestImageProvider provider) + where TPixel : unmanaged, IPixel + { + using Image image = provider.GetImage(JpegDecoder); + Assert.Null(image.Metadata.IptcProfile); + } + [Fact] public void IptcProfile_ToAndFromByteArray_Works() { diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs index d006c6682..65d975257 100644 --- a/tests/ImageSharp.Tests/TestImages.cs +++ b/tests/ImageSharp.Tests/TestImages.cs @@ -163,6 +163,7 @@ namespace SixLabors.ImageSharp.Tests public const string Testorig12bit = "Jpg/baseline/testorig12.jpg"; public const string YcckSubsample1222 = "Jpg/baseline/ycck-subsample-1222.jpg"; public const string Iptc = "Jpg/baseline/iptc.jpg"; + public const string App13WithEmptyIptc = "Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg"; public static readonly string[] All = { diff --git a/tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg b/tests/Images/Input/Jpg/baseline/iptc-psAPP13-wIPTCempty.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d60013dcd990b5cf53d842d94e2d15f2a296c288 GIT binary patch literal 18329 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 Date: Wed, 15 Apr 2020 20:37:11 +0200 Subject: [PATCH 13/21] Some IPTC tags can now be added multiple times, some are restricted from doing so --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 61 +++++++++- .../Metadata/Profiles/IPTC/IptcTag.cs | 107 +++++++++--------- .../Profiles/IPTC/IptcProfileTests.cs | 89 ++++++++++++++- 3 files changed, 197 insertions(+), 60 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index 57704949c..119c6f2b5 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -34,6 +34,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc public IptcProfile(byte[] data) { this.Data = data; + this.Initialize(); } private IptcProfile(IptcProfile other) @@ -99,7 +100,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// Removes the value with the specified tag. ///

/// The tag of the iptc value. - /// True when the value was fount and removed. + /// True when the value was found and removed. public bool RemoveValue(IptcTag tag) { this.Initialize(); @@ -140,13 +141,16 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { Guard.NotNull(encoding, nameof(encoding)); - foreach (IptcValue iptcValue in this.Values) + if (!this.IsRepeatable(tag)) { - if (iptcValue.Tag == tag) + foreach (IptcValue iptcValue in this.Values) { - iptcValue.Encoding = encoding; - iptcValue.Value = value; - return; + if (iptcValue.Tag == tag) + { + iptcValue.Encoding = encoding; + iptcValue.Value = value; + return; + } } } @@ -228,5 +232,50 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc i += count; } } + + private bool IsRepeatable(IptcTag tag) + { + switch (tag) + { + case IptcTag.RecordVersion: + case IptcTag.ObjectType: + case IptcTag.Name: + case IptcTag.EditStatus: + case IptcTag.EditorialUpdate: + case IptcTag.Urgency: + case IptcTag.Category: + case IptcTag.FixtureIdentifier: + case IptcTag.ReleaseDate: + case IptcTag.ReleaseTime: + case IptcTag.ExpirationDate: + case IptcTag.ExpirationTime: + case IptcTag.SpecialInstructions: + case IptcTag.ActionAdvised: + case IptcTag.CreatedDate: + case IptcTag.CreatedTime: + case IptcTag.DigitalCreationDate: + case IptcTag.DigitalCreationTime: + case IptcTag.OriginatingProgram: + case IptcTag.ProgramVersion: + case IptcTag.ObjectCycle: + case IptcTag.City: + case IptcTag.SubLocation: + case IptcTag.ProvinceState: + case IptcTag.CountryCode: + case IptcTag.Country: + case IptcTag.OriginalTransmissionReference: + case IptcTag.Headline: + case IptcTag.Credit: + case IptcTag.Source: + case IptcTag.CopyrightNotice: + case IptcTag.Caption: + case IptcTag.ImageType: + case IptcTag.ImageOrientation: + return false; + + default: + return true; + } + } } } diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 3e6da0e09..cd0b62072 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -9,242 +9,247 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc public enum IptcTag { /// - /// Unknown + /// Unknown. /// Unknown = -1, /// - /// Record version + /// Record version, not repeatable. /// RecordVersion = 0, /// - /// Object type + /// Object type, not repeatable. /// ObjectType = 3, /// - /// Object attribute + /// Object attribute. /// ObjectAttribute = 4, /// - /// Title + /// Object Name, not repeatable. /// - Title = 5, + Name = 5, /// - /// Edit status + /// Edit status, not repeatable. /// EditStatus = 7, /// - /// Editorial update + /// Editorial update, not repeatable. /// EditorialUpdate = 8, /// - /// Priority + /// Urgency, not repeatable. /// - Priority = 10, + Urgency = 10, /// - /// Category + /// Subject Reference. + /// + SubjectReference = 12, + + /// + /// Category, not repeatable. /// Category = 15, /// - /// Supplemental categories + /// Supplemental categories. /// SupplementalCategories = 20, /// - /// Fixture identifier + /// Fixture identifier, not repeatable. /// FixtureIdentifier = 22, /// - /// Keyword + /// Keywords. /// - Keyword = 25, + Keywords = 25, /// - /// Location code + /// Location code. /// LocationCode = 26, /// - /// Location name + /// Location name. /// LocationName = 27, /// - /// Release date + /// Release date, not repeatable. /// ReleaseDate = 30, /// - /// Release time + /// Release time, not repeatable. /// ReleaseTime = 35, /// - /// Expiration date + /// Expiration date, not repeatable. /// ExpirationDate = 37, /// - /// Expiration time + /// Expiration time, not repeatable. /// ExpirationTime = 38, /// - /// Special instructions + /// Special instructions, not repeatable. /// SpecialInstructions = 40, /// - /// Action advised + /// Action advised, not repeatable. /// ActionAdvised = 42, /// - /// Reference service + /// Reference service. /// ReferenceService = 45, /// - /// Reference date + /// Reference date. /// ReferenceDate = 47, /// - /// ReferenceNumber + /// ReferenceNumber. /// ReferenceNumber = 50, /// - /// Created date + /// Created date, not repeatable. /// CreatedDate = 55, /// - /// Created time + /// Created time, not repeatable. /// CreatedTime = 60, /// - /// Digital creation date + /// Digital creation date, not repeatable. /// DigitalCreationDate = 62, /// - /// Digital creation time + /// Digital creation time, not repeatable. /// DigitalCreationTime = 63, /// - /// Originating program + /// Originating program, not repeatable. /// OriginatingProgram = 65, /// - /// Program version + /// Program version, not repeatable. /// ProgramVersion = 70, /// - /// Object cycle + /// Object cycle, not repeatable. /// ObjectCycle = 75, /// - /// Byline + /// Byline. /// Byline = 80, /// - /// Byline title + /// Byline title. /// BylineTitle = 85, /// - /// City + /// City, not repeatable. /// City = 90, /// - /// Sub location + /// Sub location, not repeatable. /// SubLocation = 92, /// - /// Province/State + /// Province/State, not repeatable. /// ProvinceState = 95, /// - /// Country code + /// Country code, not repeatable. /// CountryCode = 100, /// - /// Country + /// Country, not repeatable. /// Country = 101, /// - /// Original transmission reference + /// Original transmission reference, not repeatable. /// OriginalTransmissionReference = 103, /// - /// Headline + /// Headline, not repeatable. /// Headline = 105, /// - /// Credit + /// Credit, not repeatable. /// Credit = 110, /// - /// Source + /// Source, not repeatable. /// Source = 115, /// - /// Copyright notice + /// Copyright notice, not repeatable. /// CopyrightNotice = 116, /// - /// Contact + /// Contact. /// Contact = 118, /// - /// Caption + /// Caption, not repeatable. /// Caption = 120, /// - /// Local caption + /// Local caption. /// LocalCaption = 121, /// - /// Caption writer + /// Caption writer. /// CaptionWriter = 122, /// - /// Image type + /// Image type, not repeatable. /// ImageType = 130, /// - /// Image orientation + /// Image orientation, not repeatable. /// ImageOrientation = 131, diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 914690102..f15a0992d 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -32,15 +32,15 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC ContainsIptcValue(iptcValues, IptcTag.BylineTitle, "author title"); ContainsIptcValue(iptcValues, IptcTag.Credit, "credits"); ContainsIptcValue(iptcValues, IptcTag.Source, "source"); - ContainsIptcValue(iptcValues, IptcTag.Title, "title"); + ContainsIptcValue(iptcValues, IptcTag.Name, "title"); ContainsIptcValue(iptcValues, IptcTag.CreatedDate, "20200414"); ContainsIptcValue(iptcValues, IptcTag.City, "city"); ContainsIptcValue(iptcValues, IptcTag.SubLocation, "sublocation"); ContainsIptcValue(iptcValues, IptcTag.ProvinceState, "province-state"); ContainsIptcValue(iptcValues, IptcTag.Country, "country"); ContainsIptcValue(iptcValues, IptcTag.Category, "category"); - ContainsIptcValue(iptcValues, IptcTag.Priority, "1"); - ContainsIptcValue(iptcValues, IptcTag.Keyword, "keywords"); + ContainsIptcValue(iptcValues, IptcTag.Urgency, "1"); + ContainsIptcValue(iptcValues, IptcTag.Keywords, "keywords"); ContainsIptcValue(iptcValues, IptcTag.CopyrightNotice, "copyright"); } } @@ -132,6 +132,89 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC ContainsIptcValue(iptcValues, IptcTag.Caption, expectedCaption); } + [Theory] + [InlineData(IptcTag.ObjectAttribute)] + [InlineData(IptcTag.SubjectReference)] + [InlineData(IptcTag.SupplementalCategories)] + [InlineData(IptcTag.Keywords)] + [InlineData(IptcTag.LocationCode)] + [InlineData(IptcTag.LocationName)] + [InlineData(IptcTag.ReferenceService)] + [InlineData(IptcTag.ReferenceDate)] + [InlineData(IptcTag.ReferenceNumber)] + [InlineData(IptcTag.Byline)] + [InlineData(IptcTag.BylineTitle)] + [InlineData(IptcTag.Contact)] + [InlineData(IptcTag.LocalCaption)] + [InlineData(IptcTag.CaptionWriter)] + public void IptcProfile_AddRepeatable_Works(IptcTag tag) + { + // arrange + var profile = new IptcProfile(); + var expectedValue1 = "test"; + var expectedValue2 = "another one"; + profile.SetValue(tag, expectedValue1); + + // act + profile.SetValue(tag, expectedValue2); + + // assert + var values = profile.Values.ToList(); + Assert.Equal(2, values.Count); + ContainsIptcValue(values, tag, expectedValue1); + ContainsIptcValue(values, tag, expectedValue2); + } + + [Theory] + [InlineData(IptcTag.RecordVersion)] + [InlineData(IptcTag.ObjectType)] + [InlineData(IptcTag.Name)] + [InlineData(IptcTag.EditStatus)] + [InlineData(IptcTag.EditorialUpdate)] + [InlineData(IptcTag.Urgency)] + [InlineData(IptcTag.Category)] + [InlineData(IptcTag.FixtureIdentifier)] + [InlineData(IptcTag.ReleaseDate)] + [InlineData(IptcTag.ReleaseTime)] + [InlineData(IptcTag.ExpirationDate)] + [InlineData(IptcTag.ExpirationTime)] + [InlineData(IptcTag.SpecialInstructions)] + [InlineData(IptcTag.ActionAdvised)] + [InlineData(IptcTag.CreatedDate)] + [InlineData(IptcTag.CreatedTime)] + [InlineData(IptcTag.DigitalCreationDate)] + [InlineData(IptcTag.DigitalCreationTime)] + [InlineData(IptcTag.OriginatingProgram)] + [InlineData(IptcTag.ProgramVersion)] + [InlineData(IptcTag.ObjectCycle)] + [InlineData(IptcTag.City)] + [InlineData(IptcTag.SubLocation)] + [InlineData(IptcTag.ProvinceState)] + [InlineData(IptcTag.CountryCode)] + [InlineData(IptcTag.Country)] + [InlineData(IptcTag.OriginalTransmissionReference)] + [InlineData(IptcTag.Headline)] + [InlineData(IptcTag.Credit)] + [InlineData(IptcTag.CopyrightNotice)] + [InlineData(IptcTag.Caption)] + [InlineData(IptcTag.ImageType)] + [InlineData(IptcTag.ImageOrientation)] + public void IptcProfile_AddNoneRepeatable_DoesOverrideOldValue(IptcTag tag) + { + // arrange + var profile = new IptcProfile(); + var expectedValue = "another one"; + profile.SetValue(tag, "test"); + + // act + profile.SetValue(tag, expectedValue); + + // assert + var values = profile.Values.ToList(); + Assert.Equal(1, values.Count); + ContainsIptcValue(values, tag, expectedValue); + } + private static void ContainsIptcValue(IEnumerable values, IptcTag tag, string value) { Assert.True(values.Any(val => val.Tag == tag), $"Missing iptc tag {tag}"); From 86462e55138f407cdd592096a7e5e7bb9ceec327 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Thu, 16 Apr 2020 11:35:29 +0200 Subject: [PATCH 14/21] Throw if IPTC data exceeds limit --- src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs | 14 +++++++++++--- src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs | 9 +++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs index 93cdd18c3..4000fa0f6 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegDecoderCore.cs @@ -644,10 +644,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); - if (resourceDataSize > 0) + int dataStartIdx = 2 + resourceBlockNameLength + 4; + if (resourceDataSize > 0 && blockDataSpan.Length >= dataStartIdx + resourceDataSize) { this.isIptc = true; - this.iptcData = blockDataSpan.Slice(2 + resourceBlockNameLength + 4, resourceDataSize).ToArray(); + this.iptcData = blockDataSpan.Slice(dataStartIdx, resourceDataSize).ToArray(); break; } } @@ -655,7 +656,14 @@ namespace SixLabors.ImageSharp.Formats.Jpeg { var resourceBlockNameLength = ReadImageResourceNameLength(blockDataSpan); var resourceDataSize = ReadResourceDataLength(blockDataSpan, resourceBlockNameLength); - blockDataSpan = blockDataSpan.Slice(2 + resourceBlockNameLength + 4 + resourceDataSize); + int dataStartIdx = 2 + resourceBlockNameLength + 4; + if (blockDataSpan.Length < dataStartIdx + resourceDataSize) + { + // Not enough data or the resource data size is wrong. + break; + } + + blockDataSpan = blockDataSpan.Slice(dataStartIdx + resourceDataSize); } } } diff --git a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs index a3786ae1c..eed95c6b0 100644 --- a/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs +++ b/src/ImageSharp/Formats/Jpeg/JpegEncoderCore.cs @@ -700,8 +700,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg /// Writes the IPTC metadata. /// /// The iptc metadata to write. + /// + /// Thrown if the IPTC profile size exceeds the limit of 65533 bytes. + /// private void WriteIptcProfile(IptcProfile iptcProfile) { + const int Max = 65533; if (iptcProfile is null || !iptcProfile.Values.Any()) { return; @@ -714,6 +718,11 @@ namespace SixLabors.ImageSharp.Formats.Jpeg return; } + if (data.Length > Max) + { + throw new ImageFormatException($"Iptc profile size exceeds limit of {Max} bytes"); + } + var app13Length = 2 + ProfileResolver.AdobePhotoshopApp13Marker.Length + ProfileResolver.AdobeImageResourceBlockMarker.Length + ProfileResolver.AdobeIptcMarker.Length + From 7e9d5533614ee42c2b1e53406776725cfc61526c Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Thu, 16 Apr 2020 13:21:35 +0200 Subject: [PATCH 15/21] Remove by tag now removes all entry's not just the first. Similar GetValue now returns a list of entrys instead of just one --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 45 +++++++++++++---- .../Profiles/IPTC/IptcProfileTests.cs | 49 +++++++++++++++++++ 2 files changed, 84 insertions(+), 10 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index 119c6f2b5..f4b4f1043 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -79,42 +79,67 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc public IptcProfile DeepClone() => new IptcProfile(this); /// - /// Returns the value with the specified tag. + /// Returns all value with the specified tag. /// /// The tag of the iptc value. - /// The value with the specified tag. - public IptcValue GetValue(IptcTag tag) + /// The values found with the specified tag. + public List GetValues(IptcTag tag) { + var values = new List(); foreach (IptcValue iptcValue in this.Values) { if (iptcValue.Tag == tag) { - return iptcValue; + values.Add(iptcValue); } } - return null; + return values; } /// - /// Removes the value with the specified tag. + /// Removes all values with the specified tag. /// - /// The tag of the iptc value. + /// The tag of the iptc value to remove. /// True when the value was found and removed. public bool RemoveValue(IptcTag tag) { this.Initialize(); - for (int i = 0; i < this.values.Count; i++) + bool removed = false; + for (int i = this.values.Count - 1; i >= 0; i--) { if (this.values[i].Tag == tag) { this.values.RemoveAt(i); - return true; + removed = true; + } + } + + return removed; + } + + /// + /// Removes values with the specified tag and value. + /// + /// The tag of the iptc value to remove. + /// The value of the iptc item to remove. + /// True when the value was found and removed. + public bool RemoveValue(IptcTag tag, string value) + { + this.Initialize(); + + bool removed = false; + for (int i = this.values.Count - 1; i >= 0; i--) + { + if (this.values[i].Tag == tag && this.values[i].Value.Equals(value)) + { + this.values.RemoveAt(i); + removed = true; } } - return false; + return removed; } /// diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index f15a0992d..9f8f8088d 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -215,6 +215,55 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC ContainsIptcValue(values, tag, expectedValue); } + [Fact] + public void IptcProfile_RemoveByTag_RemovesAllEntrys() + { + // arange + var profile = new IptcProfile(); + profile.SetValue(IptcTag.Byline, "test"); + profile.SetValue(IptcTag.Byline, "test2"); + + // act + var result = profile.RemoveValue(IptcTag.Byline); + + // assert + Assert.True(result, "removed result should be true"); + Assert.Empty(profile.Values); + } + + [Fact] + public void IptcProfile_RemoveByTagAndValue_Works() + { + // arange + var profile = new IptcProfile(); + profile.SetValue(IptcTag.Byline, "test"); + profile.SetValue(IptcTag.Byline, "test2"); + + // act + var result = profile.RemoveValue(IptcTag.Byline, "test2"); + + // assert + Assert.True(result, "removed result should be true"); + ContainsIptcValue(profile.Values, IptcTag.Byline, "test"); + } + + [Fact] + public void IptcProfile_GetValue_RetrievesAllEntrys() + { + // arange + var profile = new IptcProfile(); + profile.SetValue(IptcTag.Byline, "test"); + profile.SetValue(IptcTag.Byline, "test2"); + profile.SetValue(IptcTag.Caption, "test"); + + // act + List result = profile.GetValues(IptcTag.Byline); + + // assert + Assert.NotNull(result); + Assert.Equal(2, result.Count); + } + private static void ContainsIptcValue(IEnumerable values, IptcTag tag, string value) { Assert.True(values.Any(val => val.Tag == tag), $"Missing iptc tag {tag}"); From 216708521458696498ab608da854b56b73a9dd90 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Fri, 17 Apr 2020 13:31:24 +0200 Subject: [PATCH 16/21] Limit length of iptc values according to the spec --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 77 ++++------- .../Metadata/Profiles/IPTC/IptcTag.cs | 119 ++++++++++------- .../Profiles/IPTC/IptcTagExtensions.cs | 121 ++++++++++++++++++ .../Metadata/Profiles/IPTC/IptcValue.cs | 37 +++++- .../Metadata/Profiles/IPTC/README.md | 6 +- .../Profiles/IPTC/IptcProfileTests.cs | 56 ++++++-- 6 files changed, 297 insertions(+), 119 deletions(-) create mode 100644 src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index f4b4f1043..b86f6dff2 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -37,6 +37,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc this.Initialize(); } + /// + /// Initializes a new instance of the class + /// by making a copy from another IPTC profile. + /// + /// The other IPTC profile, from which the clone should be made from. private IptcProfile(IptcProfile other) { Guard.NotNull(other, nameof(other)); @@ -85,16 +90,16 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// The values found with the specified tag. public List GetValues(IptcTag tag) { - var values = new List(); + var iptcValues = new List(); foreach (IptcValue iptcValue in this.Values) { if (iptcValue.Tag == tag) { - values.Add(iptcValue); + iptcValues.Add(iptcValue); } } - return values; + return iptcValues; } /// @@ -157,21 +162,26 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc } /// - /// Sets the value of the specified tag. + /// Sets the value for the specified tag. /// /// The tag of the iptc value. /// The encoding to use when storing the bytes. /// The value. - public void SetValue(IptcTag tag, Encoding encoding, string value) + /// + /// Indicates if length restrictions from the specification should be followed strictly. + /// Defaults to true. + /// + public void SetValue(IptcTag tag, Encoding encoding, string value, bool strict = true) { Guard.NotNull(encoding, nameof(encoding)); - if (!this.IsRepeatable(tag)) + if (!tag.IsRepeatable()) { foreach (IptcValue iptcValue in this.Values) { if (iptcValue.Tag == tag) { + iptcValue.Strict = strict; iptcValue.Encoding = encoding; iptcValue.Value = value; return; @@ -179,7 +189,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc } } - this.values.Add(new IptcValue(tag, encoding, value)); + this.values.Add(new IptcValue(tag, encoding, value, strict)); } /// @@ -187,7 +197,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// The tag of the iptc value. /// The value. - public void SetValue(IptcTag tag, string value) => this.SetValue(tag, Encoding.UTF8, value); + /// + /// Indicates if length restrictions from the specification should be followed strictly. + /// Defaults to true. + /// + public void SetValue(IptcTag tag, string value, bool strict = true) => this.SetValue(tag, Encoding.UTF8, value, strict); /// /// Updates the data of the profile. @@ -251,56 +265,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc if ((count > 0) && (i + count <= this.Data.Length)) { Buffer.BlockCopy(this.Data, i, iptcData, 0, count); - this.values.Add(new IptcValue(tag, iptcData)); + this.values.Add(new IptcValue(tag, iptcData, false)); } i += count; } } - - private bool IsRepeatable(IptcTag tag) - { - switch (tag) - { - case IptcTag.RecordVersion: - case IptcTag.ObjectType: - case IptcTag.Name: - case IptcTag.EditStatus: - case IptcTag.EditorialUpdate: - case IptcTag.Urgency: - case IptcTag.Category: - case IptcTag.FixtureIdentifier: - case IptcTag.ReleaseDate: - case IptcTag.ReleaseTime: - case IptcTag.ExpirationDate: - case IptcTag.ExpirationTime: - case IptcTag.SpecialInstructions: - case IptcTag.ActionAdvised: - case IptcTag.CreatedDate: - case IptcTag.CreatedTime: - case IptcTag.DigitalCreationDate: - case IptcTag.DigitalCreationTime: - case IptcTag.OriginatingProgram: - case IptcTag.ProgramVersion: - case IptcTag.ObjectCycle: - case IptcTag.City: - case IptcTag.SubLocation: - case IptcTag.ProvinceState: - case IptcTag.CountryCode: - case IptcTag.Country: - case IptcTag.OriginalTransmissionReference: - case IptcTag.Headline: - case IptcTag.Credit: - case IptcTag.Source: - case IptcTag.CopyrightNotice: - case IptcTag.Caption: - case IptcTag.ImageType: - case IptcTag.ImageOrientation: - return false; - - default: - return true; - } - } } } diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index cd0b62072..135c41e51 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -4,7 +4,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { /// - /// All iptc tags. + /// All iptc tags relevant for images. /// public enum IptcTag { @@ -14,222 +14,245 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc Unknown = -1, /// - /// Record version, not repeatable. + /// Record version identifying the version of the Information Interchange Model. + /// Not repeatable. Max length is 2. /// RecordVersion = 0, /// - /// Object type, not repeatable. + /// Object type, not repeatable. Max Length is 67. /// ObjectType = 3, /// - /// Object attribute. + /// Object attribute. Max length is 68. /// ObjectAttribute = 4, /// - /// Object Name, not repeatable. + /// Object Name, not repeatable. Max length is 64. /// Name = 5, /// - /// Edit status, not repeatable. + /// Edit status, not repeatable. Max length is 64. /// EditStatus = 7, /// - /// Editorial update, not repeatable. + /// Editorial update, not repeatable. Max length is 2. /// EditorialUpdate = 8, /// - /// Urgency, not repeatable. + /// Urgency, not repeatable. Max length is 2. /// Urgency = 10, /// - /// Subject Reference. + /// Subject Reference. Max length is 236. /// SubjectReference = 12, /// - /// Category, not repeatable. + /// Category, not repeatable. Max length is 3. /// Category = 15, /// - /// Supplemental categories. + /// Supplemental categories. Max length is 32. /// SupplementalCategories = 20, /// - /// Fixture identifier, not repeatable. + /// Fixture identifier, not repeatable. Max length is 32. /// FixtureIdentifier = 22, /// - /// Keywords. + /// Keywords. Max length is 64. /// Keywords = 25, /// - /// Location code. + /// Location code. Max length is 3. /// LocationCode = 26, /// - /// Location name. + /// Location name. Max length is 64. /// LocationName = 27, /// - /// Release date, not repeatable. + /// Release date. Format should be CCYYMMDD, + /// e.g. "19890317" indicates data for release on 17 March 1989. + /// Not repeatable, max length is 8. /// ReleaseDate = 30, /// - /// Release time, not repeatable. + /// Release time. Format should be HHMMSS±HHMM, + /// e.g. "090000-0500" indicates object for use after 0900 in + /// New York (five hours behind UTC) + /// Not repeatable, max length is 11. /// ReleaseTime = 35, /// - /// Expiration date, not repeatable. + /// Expiration date. Format should be CCYYMMDD, + /// e.g. "19890317" indicates data for release on 17 March 1989. + /// Not repeatable, max length is 8. /// ExpirationDate = 37, /// - /// Expiration time, not repeatable. + /// Expiration time. Format should be HHMMSS±HHMM, + /// e.g. "090000-0500" indicates object for use after 0900 in + /// New York (five hours behind UTC) + /// Not repeatable, max length is 11. /// ExpirationTime = 38, /// - /// Special instructions, not repeatable. + /// Special instructions, not repeatable. Max length is 256. /// SpecialInstructions = 40, /// - /// Action advised, not repeatable. + /// Action advised, not repeatable. Max length is 2. /// ActionAdvised = 42, /// - /// Reference service. + /// Reference service. Max length is 10. /// ReferenceService = 45, /// - /// Reference date. + /// Reference date. Format should be CCYYMMDD, + /// e.g. "19890317" indicates data for release on 17 March 1989. + /// Not repeatable, max length is 8. /// ReferenceDate = 47, /// - /// ReferenceNumber. + /// ReferenceNumber. Max length is 8. /// ReferenceNumber = 50, /// - /// Created date, not repeatable. + /// Created date. Format should be CCYYMMDD, + /// e.g. "19890317" indicates data for release on 17 March 1989. + /// Not repeatable, max length is 8. /// CreatedDate = 55, /// - /// Created time, not repeatable. + /// Created time. Format should be HHMMSS±HHMM, + /// e.g. "090000-0500" indicates object for use after 0900 in + /// New York (five hours behind UTC) + /// Not repeatable, max length is 11. /// CreatedTime = 60, /// - /// Digital creation date, not repeatable. + /// Digital creation date. Format should be CCYYMMDD, + /// e.g. "19890317" indicates data for release on 17 March 1989. + /// Not repeatable, max length is 8. /// DigitalCreationDate = 62, /// - /// Digital creation time, not repeatable. + /// Digital creation time. Format should be HHMMSS±HHMM, + /// e.g. "090000-0500" indicates object for use after 0900 in + /// New York (five hours behind UTC) + /// Not repeatable, max length is 11. /// DigitalCreationTime = 63, /// - /// Originating program, not repeatable. + /// Originating program, not repeatable. Max length is 32. /// OriginatingProgram = 65, /// - /// Program version, not repeatable. + /// Program version, not repeatable. Max length is 10. /// ProgramVersion = 70, /// - /// Object cycle, not repeatable. + /// Object cycle, not repeatable. Max length is 1. /// ObjectCycle = 75, /// - /// Byline. + /// Byline. Max length is 32. /// Byline = 80, /// - /// Byline title. + /// Byline title. Max length is 32. /// BylineTitle = 85, /// - /// City, not repeatable. + /// City, not repeatable. Max length is 32. /// City = 90, /// - /// Sub location, not repeatable. + /// Sub location, not repeatable. Max length is 32. /// SubLocation = 92, /// - /// Province/State, not repeatable. + /// Province/State, not repeatable. Max length is 32. /// ProvinceState = 95, /// - /// Country code, not repeatable. + /// Country code, not repeatable. Max length is 3. /// CountryCode = 100, /// - /// Country, not repeatable. + /// Country, not repeatable. Max length is 64. /// Country = 101, /// - /// Original transmission reference, not repeatable. + /// Original transmission reference, not repeatable. Max length is 32. /// OriginalTransmissionReference = 103, /// - /// Headline, not repeatable. + /// Headline, not repeatable. Max length is 256. /// Headline = 105, /// - /// Credit, not repeatable. + /// Credit, not repeatable. Max length is 32. /// Credit = 110, /// - /// Source, not repeatable. + /// Source, not repeatable. Max length is 32. /// Source = 115, /// - /// Copyright notice, not repeatable. + /// Copyright notice, not repeatable. Max length is 128. /// CopyrightNotice = 116, /// - /// Contact. + /// Contact. Max length 128. /// Contact = 118, /// - /// Caption, not repeatable. + /// Caption, not repeatable. Max length is 2000. /// Caption = 120, @@ -239,17 +262,17 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc LocalCaption = 121, /// - /// Caption writer. + /// Caption writer. Max length is 32. /// CaptionWriter = 122, /// - /// Image type, not repeatable. + /// Image type, not repeatable. Max length is 2. /// ImageType = 130, /// - /// Image orientation, not repeatable. + /// Image orientation, not repeatable. Max length is 1. /// ImageOrientation = 131, diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs new file mode 100644 index 000000000..88d463767 --- /dev/null +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs @@ -0,0 +1,121 @@ +// Copyright (c) Six Labors and contributors. +// Licensed under the Apache License, Version 2.0. + +namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc +{ + /// + /// Extension methods for IPTC tags. + /// + public static class IptcTagExtensions + { + /// + /// Maximum length of the IPTC value with the given tag according to the specification. + /// + /// The tag to check the max length for. + /// The maximum length. + public static int MaxLength(this IptcTag tag) + { + return tag switch + { + IptcTag.RecordVersion => 2, + IptcTag.ObjectType => 67, + IptcTag.ObjectAttribute => 68, + IptcTag.Name => 64, + IptcTag.EditStatus => 64, + IptcTag.EditorialUpdate => 2, + IptcTag.Urgency => 1, + IptcTag.SubjectReference => 236, + IptcTag.Category => 3, + IptcTag.SupplementalCategories => 32, + IptcTag.FixtureIdentifier => 32, + IptcTag.Keywords => 64, + IptcTag.LocationCode => 3, + IptcTag.LocationName => 64, + IptcTag.ReleaseDate => 8, + IptcTag.ReleaseTime => 11, + IptcTag.ExpirationDate => 8, + IptcTag.ExpirationTime => 11, + IptcTag.SpecialInstructions => 256, + IptcTag.ActionAdvised => 2, + IptcTag.ReferenceService => 10, + IptcTag.ReferenceDate => 8, + IptcTag.ReferenceNumber => 8, + IptcTag.CreatedDate => 8, + IptcTag.CreatedTime => 11, + IptcTag.DigitalCreationDate => 8, + IptcTag.DigitalCreationTime => 11, + IptcTag.OriginatingProgram => 32, + IptcTag.ProgramVersion => 10, + IptcTag.ObjectCycle => 1, + IptcTag.Byline => 32, + IptcTag.BylineTitle => 32, + IptcTag.City => 32, + IptcTag.SubLocation => 32, + IptcTag.ProvinceState => 32, + IptcTag.CountryCode => 3, + IptcTag.Country => 64, + IptcTag.OriginalTransmissionReference => 32, + IptcTag.Headline => 256, + IptcTag.Credit => 32, + IptcTag.Source => 32, + IptcTag.CopyrightNotice => 128, + IptcTag.Contact => 128, + IptcTag.Caption => 2000, + IptcTag.CaptionWriter => 32, + IptcTag.ImageType => 2, + IptcTag.ImageOrientation => 1, + _ => 256 + }; + } + + /// + /// Determines if the given tag can be repeated according to the specification. + /// + /// The tag to check. + /// True, if the tag can occur multiple times. + public static bool IsRepeatable(this IptcTag tag) + { + switch (tag) + { + case IptcTag.RecordVersion: + case IptcTag.ObjectType: + case IptcTag.Name: + case IptcTag.EditStatus: + case IptcTag.EditorialUpdate: + case IptcTag.Urgency: + case IptcTag.Category: + case IptcTag.FixtureIdentifier: + case IptcTag.ReleaseDate: + case IptcTag.ReleaseTime: + case IptcTag.ExpirationDate: + case IptcTag.ExpirationTime: + case IptcTag.SpecialInstructions: + case IptcTag.ActionAdvised: + case IptcTag.CreatedDate: + case IptcTag.CreatedTime: + case IptcTag.DigitalCreationDate: + case IptcTag.DigitalCreationTime: + case IptcTag.OriginatingProgram: + case IptcTag.ProgramVersion: + case IptcTag.ObjectCycle: + case IptcTag.City: + case IptcTag.SubLocation: + case IptcTag.ProvinceState: + case IptcTag.CountryCode: + case IptcTag.Country: + case IptcTag.OriginalTransmissionReference: + case IptcTag.Headline: + case IptcTag.Credit: + case IptcTag.Source: + case IptcTag.CopyrightNotice: + case IptcTag.Caption: + case IptcTag.ImageType: + case IptcTag.ImageOrientation: + return false; + + default: + return true; + } + } + } +} diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index a5977fd27..2c2cf5995 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -28,24 +28,35 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc } this.Tag = other.Tag; + this.Strict = other.Strict; } - internal IptcValue(IptcTag tag, byte[] value) + internal IptcValue(IptcTag tag, byte[] value, bool strict) { Guard.NotNull(value, nameof(value)); + this.Strict = strict; this.Tag = tag; this.data = value; this.encoding = Encoding.UTF8; } - internal IptcValue(IptcTag tag, Encoding encoding, string value) + internal IptcValue(IptcTag tag, Encoding encoding, string value, bool strict) { + this.Strict = strict; this.Tag = tag; this.encoding = encoding; this.Value = value; } + internal IptcValue(IptcTag tag, string value, bool strict) + { + this.Strict = strict; + this.Tag = tag; + this.encoding = Encoding.UTF8; + this.Value = value; + } + /// /// Gets or sets the encoding to use for the Value. /// @@ -66,6 +77,12 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// public IptcTag Tag { get; } + /// + /// Gets or sets a value indicating whether to be enforce value length restrictions according + /// to the specification. + /// + public bool Strict { get; set; } + /// /// Gets or sets the value. /// @@ -76,11 +93,23 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { if (string.IsNullOrEmpty(value)) { - this.data = new byte[0]; + this.data = Array.Empty(); } else { - this.data = this.encoding.GetBytes(value); + int maxLength = this.Tag.MaxLength(); + byte[] valueBytes; + if (this.Strict && value.Length > maxLength) + { + var cappedValue = value.Substring(0, maxLength); + valueBytes = this.encoding.GetBytes(cappedValue); + } + else + { + valueBytes = this.encoding.GetBytes(value); + } + + this.data = valueBytes; } } } diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/README.md b/src/ImageSharp/Metadata/Profiles/IPTC/README.md index 0b0efc967..1217ca0c7 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/README.md +++ b/src/ImageSharp/Metadata/Profiles/IPTC/README.md @@ -1,9 +1,11 @@ IPTC source code is from [Magick.NET](https://github.com/dlemstra/Magick.NET) -Information about IPTC can be found here in the folowing sources: +Information about IPTC can be found here in the following sources: - [metacpan.org, APP13-segment](https://metacpan.org/pod/Image::MetaData::JPEG::Structures#Structure-of-a-Photoshop-style-APP13-segment) - [iptc.org](https://www.iptc.org/std/photometadata/documentation/userguide/) -- [Adobe File Formats Specification](http://oldschoolprg.x10.mx/downloads/ps6ffspecsv2.pdf) \ No newline at end of file +- [Adobe File Formats Specification](http://oldschoolprg.x10.mx/downloads/ps6ffspecsv2.pdf) + +- [Tag Overview](https://exiftool.org/TagNames/IPTC.html) \ No newline at end of file diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 9f8f8088d..321c7fe5c 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -1,6 +1,7 @@ // Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -15,6 +16,31 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC { private static JpegDecoder JpegDecoder => new JpegDecoder() { IgnoreMetadata = false }; + public static IEnumerable allIptcTags() + { + foreach (object tag in Enum.GetValues(typeof(IptcTag))) + { + yield return new object[] { tag }; + } + } + + [Theory] + [MemberData("allIptcTags")] + public void IptcProfile_SetValue_WithStrictOption_Works(IptcTag tag) + { + // arrange + var profile = new IptcProfile(); + var value = new string('s', tag.MaxLength() + 1); + var expectedLength = tag.MaxLength(); + + // act + profile.SetValue(tag, value); + + // assert + IptcValue actual = profile.GetValues(tag).First(); + Assert.Equal(expectedLength, actual.Value.Length); + } + [Theory] [WithFile(TestImages.Jpeg.Baseline.Iptc, PixelTypes.Rgba32)] public void ReadIptcMetadata_Works(TestImageProvider provider) @@ -91,16 +117,17 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC // assert Assert.Equal(2, clone.Values.Count()); - ContainsIptcValue(clone.Values, IptcTag.CaptionWriter, captionWriter); - ContainsIptcValue(clone.Values, IptcTag.Caption, "changed"); - ContainsIptcValue(profile.Values, IptcTag.Caption, caption); + var cloneValues = clone.Values.ToList(); + ContainsIptcValue(cloneValues, IptcTag.CaptionWriter, captionWriter); + ContainsIptcValue(cloneValues, IptcTag.Caption, "changed"); + ContainsIptcValue(profile.Values.ToList(), IptcTag.Caption, caption); } [Fact] public void IptcValue_CloneIsDeep() { // arrange - var iptcValue = new IptcValue(IptcTag.Caption, System.Text.Encoding.UTF8, "test"); + var iptcValue = new IptcValue(IptcTag.Caption, System.Text.Encoding.UTF8, "test", true); // act IptcValue clone = iptcValue.DeepClone(); @@ -132,6 +159,13 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC ContainsIptcValue(iptcValues, IptcTag.Caption, expectedCaption); } + [Fact] + public void IptcProfile_SetNewValue_RespectsMaxLength() + { + // arrange + var profile = new IptcProfile(); + } + [Theory] [InlineData(IptcTag.ObjectAttribute)] [InlineData(IptcTag.SubjectReference)] @@ -153,10 +187,10 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC var profile = new IptcProfile(); var expectedValue1 = "test"; var expectedValue2 = "another one"; - profile.SetValue(tag, expectedValue1); + profile.SetValue(tag, expectedValue1, false); // act - profile.SetValue(tag, expectedValue2); + profile.SetValue(tag, expectedValue2, false); // assert var values = profile.Values.ToList(); @@ -204,10 +238,10 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC // arrange var profile = new IptcProfile(); var expectedValue = "another one"; - profile.SetValue(tag, "test"); + profile.SetValue(tag, "test", false); // act - profile.SetValue(tag, expectedValue); + profile.SetValue(tag, expectedValue, false); // assert var values = profile.Values.ToList(); @@ -244,7 +278,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC // assert Assert.True(result, "removed result should be true"); - ContainsIptcValue(profile.Values, IptcTag.Byline, "test"); + ContainsIptcValue(profile.Values.ToList(), IptcTag.Byline, "test"); } [Fact] @@ -264,10 +298,10 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC Assert.Equal(2, result.Count); } - private static void ContainsIptcValue(IEnumerable values, IptcTag tag, string value) + private static void ContainsIptcValue(List values, IptcTag tag, string value) { Assert.True(values.Any(val => val.Tag == tag), $"Missing iptc tag {tag}"); - Assert.True(values.Contains(new IptcValue(tag, System.Text.Encoding.UTF8.GetBytes(value))), $"expected iptc value '{value}' was not found for tag '{tag}'"); + Assert.True(values.Contains(new IptcValue(tag, System.Text.Encoding.UTF8.GetBytes(value), false)), $"expected iptc value '{value}' was not found for tag '{tag}'"); } private static Image WriteAndReadJpeg(Image image) From 406573cb8ed2d2c833fa234f13647057f18505ba Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Sat, 18 Apr 2020 16:54:33 +0100 Subject: [PATCH 17/21] Update ImageExtensions.cs --- src/ImageSharp/ImageExtensions.cs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs index 0bdbcc4ab..62ac449b7 100644 --- a/src/ImageSharp/ImageExtensions.cs +++ b/src/ImageSharp/ImageExtensions.cs @@ -103,14 +103,18 @@ namespace SixLabors.ImageSharp /// /// Returns a Base64 encoded string from the given image. + /// The result is prepended with a Data URI + /// + /// + /// For example: + /// + /// + /// /// - /// - /// The pixel format. /// The source image /// The format. /// The - public static string ToBase64String(this Image source, IImageFormat format) - where TPixel : unmanaged, IPixel + public static string ToBase64String(this Image source, IImageFormat format) { using var stream = new MemoryStream(); source.Save(stream, format); From f1a99e70e0e2ff9e7a64095f3742305502372dba Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sat, 18 Apr 2020 18:03:01 +0200 Subject: [PATCH 18/21] Add SetDateTimeValue which makes sure the formatting will be as specified in the spec --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 22 ++++++++++ .../Metadata/Profiles/IPTC/IptcTag.cs | 22 ++++------ .../Profiles/IPTC/IptcTagExtensions.cs | 43 ++++++++++++++++++- .../Metadata/Profiles/IPTC/IptcValue.cs | 6 +++ .../Profiles/IPTC/IptcProfileTests.cs | 43 ++++++++++++++++++- 5 files changed, 120 insertions(+), 16 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index b86f6dff2..cd3c8eb93 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -174,6 +174,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc public void SetValue(IptcTag tag, Encoding encoding, string value, bool strict = true) { Guard.NotNull(encoding, nameof(encoding)); + Guard.NotNull(value, nameof(value)); if (!tag.IsRepeatable()) { @@ -192,6 +193,27 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc this.values.Add(new IptcValue(tag, encoding, value, strict)); } + /// + /// Makes sure the datetime is formatted according to the iptc specification. + /// A date will be formatted as CCYYMMDD. + /// A time value will be formatted as HHMMSS±HHMM. + /// + /// The tag of the iptc value. + /// The datetime. + public void SetDateTimeValue(IptcTag tag, DateTime dateTime) + { + if (!tag.IsDate() && !tag.IsTime()) + { + throw new ArgumentException("iptc tag is not a time or date type"); + } + + var formattedDate = tag.IsDate() + ? dateTime.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture) + : dateTime.ToString("HHmmsszzzz", System.Globalization.CultureInfo.InvariantCulture).Replace(":", string.Empty); + + this.SetValue(tag, Encoding.UTF8, formattedDate); + } + /// /// Sets the value of the specified tag. /// diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 135c41e51..62f74386e 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -86,30 +86,28 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// Release date. Format should be CCYYMMDD, - /// e.g. "19890317" indicates data for release on 17 March 1989. + /// e.g. "19890317" for the 17 March 1989. /// Not repeatable, max length is 8. /// ReleaseDate = 30, /// /// Release time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" indicates object for use after 0900 in - /// New York (five hours behind UTC) + /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). /// Not repeatable, max length is 11. /// ReleaseTime = 35, /// /// Expiration date. Format should be CCYYMMDD, - /// e.g. "19890317" indicates data for release on 17 March 1989. + /// e.g. "19890317" for the 17 March 1989. /// Not repeatable, max length is 8. /// ExpirationDate = 37, /// /// Expiration time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" indicates object for use after 0900 in - /// New York (five hours behind UTC) + /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). /// Not repeatable, max length is 11. /// ExpirationTime = 38, @@ -131,7 +129,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// Reference date. Format should be CCYYMMDD, - /// e.g. "19890317" indicates data for release on 17 March 1989. + /// e.g. "19890317" for the 17 March 1989. /// Not repeatable, max length is 8. /// ReferenceDate = 47, @@ -143,30 +141,28 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// Created date. Format should be CCYYMMDD, - /// e.g. "19890317" indicates data for release on 17 March 1989. + /// e.g. "19890317" for the 17 March 1989. /// Not repeatable, max length is 8. /// CreatedDate = 55, /// /// Created time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" indicates object for use after 0900 in - /// New York (five hours behind UTC) + /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). /// Not repeatable, max length is 11. /// CreatedTime = 60, /// /// Digital creation date. Format should be CCYYMMDD, - /// e.g. "19890317" indicates data for release on 17 March 1989. + /// e.g. "19890317" for the 17 March 1989. /// Not repeatable, max length is 8. /// DigitalCreationDate = 62, /// /// Digital creation time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" indicates object for use after 0900 in - /// New York (five hours behind UTC) + /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). /// Not repeatable, max length is 11. /// DigitalCreationTime = 63, diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs index 88d463767..6b39769a7 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTagExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) Six Labors and contributors. +// Copyright (c) Six Labors and contributors. // Licensed under the Apache License, Version 2.0. namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc @@ -117,5 +117,46 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc return true; } } + + /// + /// Determines if the tag is a datetime tag which needs to be formatted as CCYYMMDD. + /// + /// The tag to check. + /// True, if its a datetime tag. + public static bool IsDate(this IptcTag tag) + { + switch (tag) + { + case IptcTag.CreatedDate: + case IptcTag.DigitalCreationDate: + case IptcTag.ExpirationDate: + case IptcTag.ReferenceDate: + case IptcTag.ReleaseDate: + return true; + + default: + return false; + } + } + + /// + /// Determines if the tag is a time tag which need to be formatted as HHMMSS±HHMM. + /// + /// The tag to check. + /// True, if its a time tag. + public static bool IsTime(this IptcTag tag) + { + switch (tag) + { + case IptcTag.CreatedTime: + case IptcTag.DigitalCreationTime: + case IptcTag.ExpirationTime: + case IptcTag.ReleaseTime: + return true; + + default: + return false; + } + } } } diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index 2c2cf5995..8e804353c 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -103,6 +103,12 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { var cappedValue = value.Substring(0, maxLength); valueBytes = this.encoding.GetBytes(cappedValue); + + // It is still possible that the bytes of the string exceed the limit. + if (valueBytes.Length > maxLength) + { + throw new ArgumentException($"The iptc value exceeds the limit of {maxLength} bytes for the tag {this.Tag}"); + } } else { diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 321c7fe5c..9d5db439a 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -16,7 +16,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC { private static JpegDecoder JpegDecoder => new JpegDecoder() { IgnoreMetadata = false }; - public static IEnumerable allIptcTags() + public static IEnumerable AllIptcTags() { foreach (object tag in Enum.GetValues(typeof(IptcTag))) { @@ -25,7 +25,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC } [Theory] - [MemberData("allIptcTags")] + [MemberData("AllIptcTags")] public void IptcProfile_SetValue_WithStrictOption_Works(IptcTag tag) { // arrange @@ -41,6 +41,45 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC Assert.Equal(expectedLength, actual.Value.Length); } + [Theory] + [InlineData(IptcTag.DigitalCreationDate)] + [InlineData(IptcTag.ExpirationDate)] + [InlineData(IptcTag.CreatedDate)] + [InlineData(IptcTag.ReferenceDate)] + [InlineData(IptcTag.ReleaseDate)] + public void IptcProfile_SetDateValue_Works(IptcTag tag) + { + // arrange + var profile = new IptcProfile(); + var datetime = new DateTime(1994, 3, 17); + + // act + profile.SetDateTimeValue(tag, datetime); + + // assert + IptcValue actual = profile.GetValues(tag).First(); + Assert.Equal("19940317", actual.Value); + } + + [Theory] + [InlineData(IptcTag.CreatedTime)] + [InlineData(IptcTag.DigitalCreationTime)] + [InlineData(IptcTag.ExpirationTime)] + [InlineData(IptcTag.ReleaseTime)] + public void IptcProfile_SetTimeValue_Works(IptcTag tag) + { + // arrange + var profile = new IptcProfile(); + DateTime datetime = new DateTimeOffset(new DateTime(1994, 3, 17, 14, 15, 16), new TimeSpan(1, 0, 0)).DateTime; + + // act + profile.SetDateTimeValue(tag, datetime); + + // assert + IptcValue actual = profile.GetValues(tag).First(); + Assert.Equal("141516+0100", actual.Value); + } + [Theory] [WithFile(TestImages.Jpeg.Baseline.Iptc, PixelTypes.Rgba32)] public void ReadIptcMetadata_Works(TestImageProvider provider) From 4a70056a2b38c7b728c10f6b04066991bef2db7b Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 19 Apr 2020 10:30:42 +0200 Subject: [PATCH 19/21] SetDateTimeValue now uses DateTimeOffset --- src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs | 9 +++++---- .../Metadata/Profiles/IPTC/IptcProfileTests.cs | 9 +++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index cd3c8eb93..a46d2745f 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -199,8 +199,8 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// A time value will be formatted as HHMMSS±HHMM. /// /// The tag of the iptc value. - /// The datetime. - public void SetDateTimeValue(IptcTag tag, DateTime dateTime) + /// The datetime. + public void SetDateTimeValue(IptcTag tag, DateTimeOffset dateTimeOffset) { if (!tag.IsDate() && !tag.IsTime()) { @@ -208,8 +208,9 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc } var formattedDate = tag.IsDate() - ? dateTime.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture) - : dateTime.ToString("HHmmsszzzz", System.Globalization.CultureInfo.InvariantCulture).Replace(":", string.Empty); + ? dateTimeOffset.ToString("yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture) + : dateTimeOffset.ToString("HHmmsszzzz", System.Globalization.CultureInfo.InvariantCulture) + .Replace(":", string.Empty); this.SetValue(tag, Encoding.UTF8, formattedDate); } diff --git a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs index 9d5db439a..d9f44cef9 100644 --- a/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs +++ b/tests/ImageSharp.Tests/Metadata/Profiles/IPTC/IptcProfileTests.cs @@ -51,7 +51,7 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC { // arrange var profile = new IptcProfile(); - var datetime = new DateTime(1994, 3, 17); + var datetime = new DateTimeOffset(new DateTime(1994, 3, 17)); // act profile.SetDateTimeValue(tag, datetime); @@ -70,14 +70,15 @@ namespace SixLabors.ImageSharp.Tests.Metadata.Profiles.IPTC { // arrange var profile = new IptcProfile(); - DateTime datetime = new DateTimeOffset(new DateTime(1994, 3, 17, 14, 15, 16), new TimeSpan(1, 0, 0)).DateTime; + var dateTimeUtc = new DateTime(1994, 3, 17, 14, 15, 16, DateTimeKind.Utc); + DateTimeOffset dateTimeOffset = new DateTimeOffset(dateTimeUtc).ToOffset(TimeSpan.FromHours(2)); // act - profile.SetDateTimeValue(tag, datetime); + profile.SetDateTimeValue(tag, dateTimeOffset); // assert IptcValue actual = profile.GetValues(tag).First(); - Assert.Equal("141516+0100", actual.Value); + Assert.Equal("161516+0200", actual.Value); } [Theory] From 12c3537e562dbc2ade9d905d699f22e3e7161ff3 Mon Sep 17 00:00:00 2001 From: Brian Popow Date: Sun, 19 Apr 2020 11:17:05 +0200 Subject: [PATCH 20/21] Use tag for examples --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 7 ++- .../Metadata/Profiles/IPTC/IptcTag.cs | 58 +++++++++++++------ 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index a46d2745f..b46eee0fd 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -195,8 +195,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// Makes sure the datetime is formatted according to the iptc specification. - /// A date will be formatted as CCYYMMDD. - /// A time value will be formatted as HHMMSS±HHMM. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, + /// two hours ahead of UTC. + /// /// /// The tag of the iptc value. /// The datetime. diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 62f74386e..70a90aa10 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -85,30 +85,40 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc LocationName = 27, /// - /// Release date. Format should be CCYYMMDD, - /// e.g. "19890317" for the 17 March 1989. + /// Release date. Format should be CCYYMMDD. /// Not repeatable, max length is 8. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// /// ReleaseDate = 30, /// - /// Release time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). + /// Release time. Format should be HHMMSS±HHMM. /// Not repeatable, max length is 11. + /// + /// A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, + /// two hours ahead of UTC. + /// /// ReleaseTime = 35, /// - /// Expiration date. Format should be CCYYMMDD, - /// e.g. "19890317" for the 17 March 1989. + /// Expiration date. Format should be CCYYMMDD. /// Not repeatable, max length is 8. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// /// ExpirationDate = 37, /// - /// Expiration time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). + /// Expiration time. Format should be HHMMSS±HHMM. /// Not repeatable, max length is 11. + /// + /// A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, + /// two hours ahead of UTC. + /// /// ExpirationTime = 38, @@ -128,9 +138,11 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc ReferenceService = 45, /// - /// Reference date. Format should be CCYYMMDD, - /// e.g. "19890317" for the 17 March 1989. + /// Reference date. Format should be CCYYMMDD. /// Not repeatable, max length is 8. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// /// ReferenceDate = 47, @@ -140,30 +152,40 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc ReferenceNumber = 50, /// - /// Created date. Format should be CCYYMMDD, - /// e.g. "19890317" for the 17 March 1989. + /// Created date. Format should be CCYYMMDD. /// Not repeatable, max length is 8. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// /// CreatedDate = 55, /// - /// Created time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). + /// Created time. Format should be HHMMSS±HHMM. /// Not repeatable, max length is 11. + /// + /// A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, + /// two hours ahead of UTC. + /// /// CreatedTime = 60, /// - /// Digital creation date. Format should be CCYYMMDD, - /// e.g. "19890317" for the 17 March 1989. + /// Digital creation date. Format should be CCYYMMDD. /// Not repeatable, max length is 8. + /// + /// A date will be formatted as CCYYMMDD, e.g. "19890317" for 17 March 1989. + /// /// DigitalCreationDate = 62, /// - /// Digital creation time. Format should be HHMMSS±HHMM, - /// e.g. "090000-0500" for 9 o'clock New York time (five hours behind UTC). + /// Digital creation time. Format should be HHMMSS±HHMM. /// Not repeatable, max length is 11. + /// + /// A time value will be formatted as HHMMSS±HHMM, e.g. "090000+0200" for 9 o'clock Berlin time, + /// two hours ahead of UTC. + /// /// DigitalCreationTime = 63, From 7fb1612c302da9c8a63358db666b6965faa33744 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Mon, 20 Apr 2020 00:30:18 +0100 Subject: [PATCH 21/21] Remove allocation and clean up docs --- .../Metadata/Profiles/IPTC/IptcProfile.cs | 5 +---- .../Metadata/Profiles/IPTC/IptcTag.cs | 2 +- .../Metadata/Profiles/IPTC/IptcValue.cs | 18 ++++++++---------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs index b46eee0fd..9206e4377 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcProfile.cs @@ -10,11 +10,8 @@ using System.Text; namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { /// - /// Class that can be used to access an Iptc profile. + /// Represents an IPTC profile providing access to the collection of values. /// - /// This source code is from the Magick.Net project: - /// https://github.com/dlemstra/Magick.NET/tree/master/src/Magick.NET/Shared/Profiles/Iptc/IptcProfile.cs - /// public sealed class IptcProfile : IDeepCloneable { private Collection values; diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs index 70a90aa10..7258a0291 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcTag.cs @@ -4,7 +4,7 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { /// - /// All iptc tags relevant for images. + /// Provides enumeration of all IPTC tags relevant for images. /// public enum IptcTag { diff --git a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs index 8e804353c..e63781012 100644 --- a/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs +++ b/src/ImageSharp/Metadata/Profiles/IPTC/IptcValue.cs @@ -7,11 +7,11 @@ using System.Text; namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc { /// - /// A value of the iptc profile. + /// Represents a single value of the IPTC profile. /// public sealed class IptcValue : IDeepCloneable { - private byte[] data; + private byte[] data = Array.Empty(); private Encoding encoding; internal IptcValue(IptcValue other) @@ -165,16 +165,14 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc return false; } - byte[] data = other.ToByteArray(); - - if (this.data.Length != data.Length) + if (this.data.Length != other.data.Length) { return false; } for (int i = 0; i < this.data.Length; i++) { - if (this.data[i] != data[i]) + if (this.data[i] != other.data[i]) { return false; } @@ -209,13 +207,13 @@ namespace SixLabors.ImageSharp.Metadata.Profiles.Iptc /// /// Returns a string that represents the current value with the specified encoding. /// - /// The encoding to use. + /// The encoding to use. /// A string that represents the current value with the specified encoding. - public string ToString(Encoding enc) + public string ToString(Encoding encoding) { - Guard.NotNull(enc, nameof(enc)); + Guard.NotNull(encoding, nameof(encoding)); - return enc.GetString(this.data); + return encoding.GetString(this.data); } } }