|
5 | 5 | using System.Numerics; |
6 | 6 | using System.Runtime.CompilerServices; |
7 | 7 | using SixLabors.ImageSharp.Advanced; |
8 | | -using SixLabors.ImageSharp.Formats.Png; |
9 | | -using SixLabors.ImageSharp.Formats.Webp; |
10 | 8 | using SixLabors.ImageSharp.Memory; |
11 | 9 | using SixLabors.ImageSharp.Metadata; |
12 | 10 | using SixLabors.ImageSharp.Metadata.Profiles.Xmp; |
@@ -85,7 +83,7 @@ public void Encode<TPixel>(Image<TPixel> image, Stream stream, CancellationToken |
85 | 83 | Guard.NotNull(image, nameof(image)); |
86 | 84 | Guard.NotNull(stream, nameof(stream)); |
87 | 85 |
|
88 | | - GifMetadata gifMetadata = GetGifMetadata(image); |
| 86 | + GifMetadata gifMetadata = image.Metadata.CloneGifMetadata(); |
89 | 87 | this.colorTableMode ??= gifMetadata.ColorTableMode; |
90 | 88 | bool useGlobalTable = this.colorTableMode == FrameColorTableMode.Global; |
91 | 89 |
|
@@ -178,56 +176,17 @@ public void Encode<TPixel>(Image<TPixel> image, Stream stream, CancellationToken |
178 | 176 | quantized?.Dispose(); |
179 | 177 | } |
180 | 178 |
|
181 | | - private static GifMetadata GetGifMetadata<TPixel>(Image<TPixel> image) |
182 | | - where TPixel : unmanaged, IPixel<TPixel> |
183 | | - { |
184 | | - if (image.Metadata.TryGetGifMetadata(out GifMetadata? gif)) |
185 | | - { |
186 | | - return gif.DeepClone(); |
187 | | - } |
188 | | - |
189 | | - if (image.Metadata.TryGetPngMetadata(out PngMetadata? png)) |
190 | | - { |
191 | | - AnimatedImageMetadata ani = png.ToAnimatedImageMetadata(); |
192 | | - return GifMetadata.FromAnimatedMetadata(ani); |
193 | | - } |
194 | | - |
195 | | - if (image.Metadata.TryGetWebpMetadata(out WebpMetadata? webp)) |
196 | | - { |
197 | | - AnimatedImageMetadata ani = webp.ToAnimatedImageMetadata(); |
198 | | - return GifMetadata.FromAnimatedMetadata(ani); |
199 | | - } |
200 | | - |
201 | | - // Return explicit new instance so we do not mutate the original metadata. |
202 | | - return new(); |
203 | | - } |
204 | | - |
205 | 179 | private static GifFrameMetadata GetGifFrameMetadata<TPixel>(ImageFrame<TPixel> frame, int transparencyIndex) |
206 | 180 | where TPixel : unmanaged, IPixel<TPixel> |
207 | 181 | { |
208 | | - GifFrameMetadata? metadata = null; |
209 | | - if (frame.Metadata.TryGetGifMetadata(out GifFrameMetadata? gif)) |
210 | | - { |
211 | | - metadata = gif.DeepClone(); |
212 | | - } |
213 | | - else if (frame.Metadata.TryGetPngMetadata(out PngFrameMetadata? png)) |
214 | | - { |
215 | | - AnimatedImageFrameMetadata ani = png.ToAnimatedImageFrameMetadata(); |
216 | | - metadata = GifFrameMetadata.FromAnimatedMetadata(ani); |
217 | | - } |
218 | | - else if (frame.Metadata.TryGetWebpFrameMetadata(out WebpFrameMetadata? webp)) |
219 | | - { |
220 | | - AnimatedImageFrameMetadata ani = webp.ToAnimatedImageFrameMetadata(); |
221 | | - metadata = GifFrameMetadata.FromAnimatedMetadata(ani); |
222 | | - } |
223 | | - |
224 | | - if (metadata?.ColorTableMode == FrameColorTableMode.Global && transparencyIndex > -1) |
| 182 | + GifFrameMetadata metadata = frame.Metadata.CloneGifMetadata(); |
| 183 | + if (metadata.ColorTableMode == FrameColorTableMode.Global && transparencyIndex > -1) |
225 | 184 | { |
226 | 185 | metadata.HasTransparency = true; |
227 | 186 | metadata.TransparencyIndex = ClampIndex(transparencyIndex); |
228 | 187 | } |
229 | 188 |
|
230 | | - return metadata ?? new(); |
| 189 | + return metadata; |
231 | 190 | } |
232 | 191 |
|
233 | 192 | private void EncodeAdditionalFrames<TPixel>( |
|
0 commit comments