diff --git a/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs b/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs index 153e84de62..e1fc20b70d 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/BlackWhite.cs @@ -5,6 +5,8 @@ namespace ImageProcessor.Filters { + using System.Numerics; + /// /// Converts the colors of the image to their black and white equivalent. /// @@ -12,23 +14,28 @@ namespace ImageProcessor.Filters { /// /// The BlackWhite matrix. - /// TODO: Calculate a matrix that works in the linear color space. /// - private static readonly ColorMatrix Matrix = new ColorMatrix( - new[] - { - new[] { 1.5f, 1.5f, 1.5f, 0, 0 }, - new[] { 1.5f, 1.5f, 1.5f, 0, 0 }, - new[] { 1.5f, 1.5f, 1.5f, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, - new float[] { -1, -1, -1, 0, 1 } - }); + private static readonly Matrix4x4 Matrix = new Matrix4x4() + { + M11 = 1.5f, + M12 = 1.5f, + M13 = 1.5f, + M21 = 1.5f, + M22 = 1.5f, + M23 = 1.5f, + M31 = 1.5f, + M32 = 1.5f, + M33 = 1.5f, + M41 = -1f, + M42 = -1f, + M43 = -1f, + }; /// /// Initializes a new instance of the class. /// public BlackWhite() - : base(Matrix, false) + : base(Matrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrix.cs b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrix.cs deleted file mode 100644 index 0cab8e1ef6..0000000000 --- a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrix.cs +++ /dev/null @@ -1,273 +0,0 @@ -// -------------------------------------------------------------------------------------------------------------------- -// -// Copyright (c) James South and contributors. -// Licensed under the Apache License, Version 2.0. -// -// -------------------------------------------------------------------------------------------------------------------- - -namespace ImageProcessor.Filters -{ - /// - /// Defines a 5x5 matrix that contains the coordinates for the RGBAW color space. - /// - public sealed class ColorMatrix - { - /// - /// Initializes a new instance of the class. - /// - public ColorMatrix() - { - // Setup the identity matrix by default - this.Matrix00 = 1.0f; - this.Matrix11 = 1.0f; - this.Matrix22 = 1.0f; - this.Matrix33 = 1.0f; - this.Matrix44 = 1.0f; - } - - /// - /// Initializes a new instance of the class with the - /// elements in the specified matrix. - /// - /// - /// The elements defining the new Color Matrix. - /// - public ColorMatrix(float[][] colorMatrix) - { - this.SetMatrix(colorMatrix); - } - - /// - /// Gets or sets the element at the 0th row and 0th column of this . - /// - public float Matrix00 { get; set; } - - /// - /// Gets or sets the element at the 0th row and 1st column of this . - /// - public float Matrix01 { get; set; } - - /// - /// Gets or sets the element at the 0th row and 2nd column of this . - /// - public float Matrix02 { get; set; } - - /// - /// Gets or sets the element at the 0th row and 3rd column of this . - /// - public float Matrix03 { get; set; } - - /// - /// Gets or sets the element at the 0th row and 4th column of this . - /// - public float Matrix04 { get; set; } - - /// - /// Gets or sets the element at the 1st row and 0th column of this . - /// - public float Matrix10 { get; set; } - - /// - /// Gets or sets the element at the 1st row and 1st column of this . - /// - public float Matrix11 { get; set; } - - /// - /// Gets or sets the element at the 1st row and 2nd column of this . - /// - public float Matrix12 { get; set; } - - /// - /// Gets or sets the element at the 1st row and 3rd column of this . - /// - public float Matrix13 { get; set; } - - /// - /// Gets or sets the element at the 1st row and 4th column of this . - /// - public float Matrix14 { get; set; } - - /// - /// Gets or sets the element at the 2nd row and 0th column of this . - /// - public float Matrix20 { get; set; } - - /// - /// Gets or sets the element at the 2nd row and 1st column of this . - /// - public float Matrix21 { get; set; } - - /// - /// Gets or sets the element at the 2nd row and 2nd column of this . - /// - public float Matrix22 { get; set; } - - /// - /// Gets or sets the element at the 2nd row and 3rd column of this . - /// - public float Matrix23 { get; set; } - - /// - /// Gets or sets the element at the 2nd row and 4th column of this . - /// - public float Matrix24 { get; set; } - - /// - /// Gets or sets the element at the 3rd row and 0th column of this . - /// - public float Matrix30 { get; set; } - - /// - /// Gets or sets the element at the 3rd row and 1st column of this . - /// - public float Matrix31 { get; set; } - - /// - /// Gets or sets the element at the 3rd row and 2nd column of this . - /// - public float Matrix32 { get; set; } - - /// - /// Gets or sets the element at the 3rd row and 3rd column of this . - /// - public float Matrix33 { get; set; } - - /// - /// Gets or sets the element at the 3rd row and 4th column of this . - /// - public float Matrix34 { get; set; } - - /// - /// Gets or sets the element at the 4th row and 0th column of this . - /// - public float Matrix40 { get; set; } - - /// - /// Gets or sets the element at the 4th row and 1st column of this . - /// - public float Matrix41 { get; set; } - - /// - /// Gets or sets the element at the 4th row and 2nd column of this . - /// - public float Matrix42 { get; set; } - - /// - /// Gets or sets the element at the 4th row and 3rd column of this . - /// - public float Matrix43 { get; set; } - - /// - /// Gets or sets the element at the 4th row and 4th column of this . - /// - public float Matrix44 { get; set; } - - /// - /// Gets or sets the value of the specified element of this . - /// - /// - /// The row index. - /// - /// - /// The column index. - /// - /// - /// The . - /// - public float this[int row, int column] - { - get - { - return this.GetMatrix()[row][column]; - } - - set - { - float[][] tempMatrix = this.GetMatrix(); - - tempMatrix[row][column] = value; - - this.SetMatrix(tempMatrix); - } - } - - /// - /// Sets the values of this to the values contained within the elements. - /// - /// - /// The new color matrix. - /// - internal void SetMatrix(float[][] colorMatrix) - { - this.Matrix00 = colorMatrix[0][0]; - this.Matrix01 = colorMatrix[0][1]; - this.Matrix02 = colorMatrix[0][2]; - this.Matrix03 = colorMatrix[0][3]; - this.Matrix04 = colorMatrix[0][4]; - this.Matrix10 = colorMatrix[1][0]; - this.Matrix11 = colorMatrix[1][1]; - this.Matrix12 = colorMatrix[1][2]; - this.Matrix13 = colorMatrix[1][3]; - this.Matrix14 = colorMatrix[1][4]; - this.Matrix20 = colorMatrix[2][0]; - this.Matrix21 = colorMatrix[2][1]; - this.Matrix22 = colorMatrix[2][2]; - this.Matrix23 = colorMatrix[2][3]; - this.Matrix24 = colorMatrix[2][4]; - this.Matrix30 = colorMatrix[3][0]; - this.Matrix31 = colorMatrix[3][1]; - this.Matrix32 = colorMatrix[3][2]; - this.Matrix33 = colorMatrix[3][3]; - this.Matrix34 = colorMatrix[3][4]; - this.Matrix40 = colorMatrix[4][0]; - this.Matrix41 = colorMatrix[4][1]; - this.Matrix42 = colorMatrix[4][2]; - this.Matrix43 = colorMatrix[4][3]; - this.Matrix44 = colorMatrix[4][4]; - } - - /// - /// Gets this . - /// - /// - /// The . - /// - internal float[][] GetMatrix() - { - float[][] returnMatrix = new float[5][]; - - for (int i = 0; i < 5; i++) - { - returnMatrix[i] = new float[5]; - } - - returnMatrix[0][0] = this.Matrix00; - returnMatrix[0][1] = this.Matrix01; - returnMatrix[0][2] = this.Matrix02; - returnMatrix[0][3] = this.Matrix03; - returnMatrix[0][4] = this.Matrix04; - returnMatrix[1][0] = this.Matrix10; - returnMatrix[1][1] = this.Matrix11; - returnMatrix[1][2] = this.Matrix12; - returnMatrix[1][3] = this.Matrix13; - returnMatrix[1][4] = this.Matrix14; - returnMatrix[2][0] = this.Matrix20; - returnMatrix[2][1] = this.Matrix21; - returnMatrix[2][2] = this.Matrix22; - returnMatrix[2][3] = this.Matrix23; - returnMatrix[2][4] = this.Matrix24; - returnMatrix[3][0] = this.Matrix30; - returnMatrix[3][1] = this.Matrix31; - returnMatrix[3][2] = this.Matrix32; - returnMatrix[3][3] = this.Matrix33; - returnMatrix[3][4] = this.Matrix34; - returnMatrix[4][0] = this.Matrix40; - returnMatrix[4][1] = this.Matrix41; - returnMatrix[4][2] = this.Matrix42; - returnMatrix[4][3] = this.Matrix43; - returnMatrix[4][4] = this.Matrix44; - - return returnMatrix; - } - } -} diff --git a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs index 17a49b8fb7..8c58bc78b9 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs @@ -5,6 +5,7 @@ namespace ImageProcessor.Filters { + using System.Numerics; using System.Threading.Tasks; /// @@ -15,33 +16,25 @@ namespace ImageProcessor.Filters /// /// Initializes a new instance of the class. /// - /// The matrix to apply. - /// Whether to gamma adjust the colors before applying the matrix. - public ColorMatrixFilter(ColorMatrix matrix, bool gammaAdjust) + /// The to apply. + public ColorMatrixFilter(Matrix4x4 matrix) { this.Value = matrix; - this.GammaAdjust = gammaAdjust; } /// /// Gets the matrix value. /// - public ColorMatrix Value { get; } - - /// - /// Gets a value indicating whether to gamma adjust the colors before applying the matrix. - /// - public bool GammaAdjust { get; } + public Matrix4x4 Value { get; } /// protected override void Apply(ImageBase target, ImageBase source, Rectangle targetRectangle, Rectangle sourceRectangle, int startY, int endY) { - bool gamma = this.GammaAdjust; int sourceY = sourceRectangle.Y; int sourceBottom = sourceRectangle.Bottom; int startX = sourceRectangle.X; int endX = sourceRectangle.Right; - ColorMatrix matrix = this.Value; + Matrix4x4 matrix = this.Value; Parallel.For( startY, @@ -52,7 +45,7 @@ namespace ImageProcessor.Filters { for (int x = startX; x < endX; x++) { - target[x, y] = ApplyMatrix(source[x, y], matrix, gamma); + target[x, y] = ApplyMatrix(source[x, y], matrix); } } }); @@ -63,29 +56,22 @@ namespace ImageProcessor.Filters /// /// The source color. /// The matrix. - /// Whether to perform gamma adjustments. /// /// The . /// - private static Color ApplyMatrix(Color color, ColorMatrix matrix, bool gamma) + private static Color ApplyMatrix(Color color, Matrix4x4 matrix) { - if (gamma) - { - color = PixelOperations.ToLinear(color); - } + color = PixelOperations.ToLinear(color); float sr = color.R; float sg = color.G; float sb = color.B; - float sa = color.A; - // TODO: Investigate RGBAW - color.R = (sr * matrix.Matrix00) + (sg * matrix.Matrix10) + (sb * matrix.Matrix20) + (sa * matrix.Matrix30) + matrix.Matrix40; - color.G = (sr * matrix.Matrix01) + (sg * matrix.Matrix11) + (sb * matrix.Matrix21) + (sa * matrix.Matrix31) + matrix.Matrix41; - color.B = (sr * matrix.Matrix02) + (sg * matrix.Matrix12) + (sb * matrix.Matrix22) + (sa * matrix.Matrix32) + matrix.Matrix42; - color.A = (sr * matrix.Matrix03) + (sg * matrix.Matrix13) + (sb * matrix.Matrix23) + (sa * matrix.Matrix33) + matrix.Matrix43; + color.R = (sr * matrix.M11) + (sg * matrix.M21) + (sb * matrix.M31) + matrix.M41; + color.G = (sr * matrix.M12) + (sg * matrix.M22) + (sb * matrix.M32) + matrix.M42; + color.B = (sr * matrix.M13) + (sg * matrix.M23) + (sb * matrix.M33) + matrix.M43; - return gamma ? PixelOperations.ToSrgb(color) : color; + return PixelOperations.ToSrgb(color); } } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs index d10264c932..7c9a6b7d98 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt601.cs @@ -11,7 +11,7 @@ namespace ImageProcessor.Filters /// Converts the colors of the image to greyscale applying the formula as specified by /// ITU-R Recommendation BT.601 . /// - public class GreyscaleBt601 : MatrixFilter + public class GreyscaleBt601 : ColorMatrixFilter { /// /// The greyscale matrix. diff --git a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs index 8f59be7a24..b2f1834c7e 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/GreyscaleBt709.cs @@ -11,7 +11,7 @@ namespace ImageProcessor.Filters /// Converts the colors of the image to greyscale applying the formula as specified by /// ITU-R Recommendation BT.709 . /// - public class GreyscaleBt709 : MatrixFilter + public class GreyscaleBt709 : ColorMatrixFilter { /// /// The greyscale matrix. diff --git a/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs b/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs new file mode 100644 index 0000000000..4468ec70e1 --- /dev/null +++ b/src/ImageProcessor/Filters/ColorMatrix/Kodachrome.cs @@ -0,0 +1,36 @@ +// +// Copyright (c) James South and contributors. +// Licensed under the Apache License, Version 2.0. +// + +namespace ImageProcessor.Filters +{ + using System.Numerics; + + /// + /// Converts the colors of the image recreating an old Kodachrome camera effect. + /// + public class Kodachrome : ColorMatrixFilter + { + /// + /// The Kodachrome matrix. Purely artistic in composition. + /// + private static readonly Matrix4x4 Matrix = new Matrix4x4() + { + M11 = 0.6997023f, + M22 = 0.4609577f, + M33 = 0.397218f, + M41 = 0.005f, + M42 = -0.005f, + M43 = 0.005f + }; + + /// + /// Initializes a new instance of the class. + /// + public Kodachrome() + : base(Matrix) + { + } + } +} diff --git a/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs b/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs index 895a9f2f91..870c0d4a2f 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Lomograph.cs @@ -10,30 +10,20 @@ namespace ImageProcessor.Filters /// /// Converts the colors of the image recreating an old Lomograph effect. /// - public class Lomograph : MatrixFilter + public class Lomograph : ColorMatrixFilter { /// /// The Lomograph matrix. Purely artistic in composition. - /// TODO: Calculate a matrix that works in the linear color space. /// private static readonly Matrix4x4 Matrix = new Matrix4x4() { M11 = 1.5f, M22 = 1.45f, - M33 = 1.09f, + M33 = 1.11f, M41 = -.1f, M42 = .0f, M43 = -.08f }; - //private static readonly ColorMatrix Matrix = new ColorMatrix( - // new[] - // { - // new[] { 1.50f, 0, 0, 0, 0 }, - // new[] { 0, 1.45f, 0, 0, 0 }, - // new[] { 0, 0, 1.09f, 0, 0 }, - // new float[] { 0, 0, 0, 1, 0 }, - // new[] { -0.10f, 0.05f, -0.08f, 0, 1 } - // }); /// /// Initializes a new instance of the class. diff --git a/src/ImageProcessor/Filters/ColorMatrix/MatrixFilter.cs b/src/ImageProcessor/Filters/ColorMatrix/MatrixFilter.cs deleted file mode 100644 index 2306af112d..0000000000 --- a/src/ImageProcessor/Filters/ColorMatrix/MatrixFilter.cs +++ /dev/null @@ -1,77 +0,0 @@ -// -// Copyright (c) James South and contributors. -// Licensed under the Apache License, Version 2.0. -// - -namespace ImageProcessor.Filters -{ - using System.Numerics; - using System.Threading.Tasks; - - /// - /// The color matrix filter. - /// - public class MatrixFilter : ParallelImageProcessor - { - /// - /// Initializes a new instance of the class. - /// - /// The to apply. - public MatrixFilter(Matrix4x4 matrix) - { - this.Value = matrix; - } - - /// - /// Gets the matrix value. - /// - public Matrix4x4 Value { get; } - - /// - protected override void Apply(ImageBase target, ImageBase source, Rectangle targetRectangle, Rectangle sourceRectangle, int startY, int endY) - { - int sourceY = sourceRectangle.Y; - int sourceBottom = sourceRectangle.Bottom; - int startX = sourceRectangle.X; - int endX = sourceRectangle.Right; - Matrix4x4 matrix = this.Value; - - Parallel.For( - startY, - endY, - y => - { - if (y >= sourceY && y < sourceBottom) - { - for (int x = startX; x < endX; x++) - { - target[x, y] = ApplyMatrix(source[x, y], matrix); - } - } - }); - } - - /// - /// Applies the color matrix against the given color. - /// - /// The source color. - /// The matrix. - /// - /// The . - /// - private static Color ApplyMatrix(Color color, Matrix4x4 matrix) - { - color = PixelOperations.ToLinear(color); - - float sr = color.R; - float sg = color.G; - float sb = color.B; - - color.R = (sr * matrix.M11) + (sg * matrix.M21) + (sb * matrix.M31) + matrix.M41; - color.G = (sr * matrix.M12) + (sg * matrix.M22) + (sb * matrix.M32) + matrix.M42; - color.B = (sr * matrix.M13) + (sg * matrix.M23) + (sb * matrix.M33) + matrix.M43; - - return PixelOperations.ToSrgb(color); - } - } -} diff --git a/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs b/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs index 2b6b9289d4..875b44b7d1 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Polaroid.cs @@ -5,6 +5,8 @@ namespace ImageProcessor.Filters { + using System.Numerics; + /// /// Converts the colors of the image recreating an old Polaroid effect. /// @@ -14,21 +16,27 @@ namespace ImageProcessor.Filters /// The Polaroid matrix. Purely artistic in composition. /// TODO: Calculate a matrix that works in the linear color space. /// - private static readonly ColorMatrix Matrix = new ColorMatrix( - new[] - { - new[] { 1.638f, -0.062f, -0.262f, 0, 0 }, - new[] { -0.122f, 1.378f, -0.122f, 0, 0 }, - new[] { 1.016f, -0.016f, 1.383f, 0, 0 }, - new float[] { 0, 0, 0, 1, 0 }, - new[] { 0.06f, -0.05f, -0.05f, 0, 1 } - }); + private static readonly Matrix4x4 Matrix = new Matrix4x4() + { + M11 = 1.538f, + M12 = -0.062f, + M13 = -0.262f, + M21 = -0.022f, + M22 = 1.578f, + M23 = -0.022f, + M31 = .616f, + M32 = -.16f, + M33 = 1.5831f, + M41 = 0.02f, + M42 = -0.05f, + M43 = -0.05f + }; /// /// Initializes a new instance of the class. /// public Polaroid() - : base(Matrix, false) + : base(Matrix) { } } diff --git a/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs b/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs index 8628b8e817..73cc4b312f 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/Sepia.cs @@ -10,7 +10,7 @@ namespace ImageProcessor.Filters /// /// Converts the colors of the image to their sepia equivalent recreating an old photo effect. /// - public class Sepia : MatrixFilter + public class Sepia : ColorMatrixFilter { /// /// The sepia matrix. diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index 48cd59e1d3..4c5c260d8d 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -48,14 +48,13 @@ - + + - - diff --git a/src/ImageProcessor/project.lock.json.REMOVED.git-id b/src/ImageProcessor/project.lock.json.REMOVED.git-id index 24339fed21..dba2656f57 100644 --- a/src/ImageProcessor/project.lock.json.REMOVED.git-id +++ b/src/ImageProcessor/project.lock.json.REMOVED.git-id @@ -1 +1 @@ -3f05708641eb3ed085d4689aae4a960eb067fd16 \ No newline at end of file +eb00c54ee74016c2b70f81963e7e8f83cb2dd54b \ No newline at end of file diff --git a/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs b/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs index dfda1ef794..810a872fdc 100644 --- a/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs +++ b/tests/ImageProcessor.Tests/Processors/Filters/FilterTests.cs @@ -22,8 +22,9 @@ namespace ImageProcessor.Tests //{ "Invert", new Invert() }, //{ "Sepia", new Sepia() }, //{ "BlackWhite", new BlackWhite() }, - { "Lomograph", new Lomograph() }, + //{ "Lomograph", new Lomograph() }, //{ "Polaroid", new Polaroid() }, + { "Brownie", new Kodachrome() }, //{ "GreyscaleBt709", new GreyscaleBt709() }, //{ "GreyscaleBt601", new GreyscaleBt601() }, }; diff --git a/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs b/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs index 6c33ef4c47..d7580defb0 100644 --- a/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs +++ b/tests/ImageProcessor.Tests/Processors/ProcessorTestBase.cs @@ -21,6 +21,8 @@ namespace ImageProcessor.Tests { //"../../TestImages/Formats/Jpg/Backdrop.jpg", "../../TestImages/Formats/Jpg/Calliphora.jpg", + "../../TestImages/Formats/Jpg/lomo.jpg", + "../../TestImages/Formats/Jpg/shaftesbury.jpg", //"../../TestImages/Formats/Jpg/gamma_dalai_lama_gray.jpg", //"../../TestImages/Formats/Jpg/greyscale.jpg", //"../../TestImages/Formats/Bmp/Car.bmp", diff --git a/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/lomo.jpg b/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/lomo.jpg new file mode 100644 index 0000000000..23f75c72ee --- /dev/null +++ b/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/lomo.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdfad9ce367629518c374b27b8ce311d1f0326f61b9a0ed113b5b966dd3dd1bc +size 45508 diff --git a/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/shaftesbury.jpg.REMOVED.git-id b/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/shaftesbury.jpg.REMOVED.git-id new file mode 100644 index 0000000000..59372951be --- /dev/null +++ b/tests/ImageProcessor.Tests/TestImages/Formats/Jpg/shaftesbury.jpg.REMOVED.git-id @@ -0,0 +1 @@ +2eabac96326130ba423b3fecb5a163b734278370 \ No newline at end of file