/// <exception cref="System.IO.IOException"/> public static void SaveSegmentFiles([NotNull] string jpegFilePath, [NotNull] JpegSegmentData segmentData) { foreach (JpegSegmentType segmentType in segmentData.GetSegmentTypes()) { IList <sbyte[]> segments = Iterables.ToList(segmentData.GetSegments(segmentType)); if (segments.Count == 0) { continue; } if (segments.Count > 1) { for (int i = 0; i < segments.Count; i++) { string outputFilePath = Sharpen.Extensions.StringFormat("%s.%s.%d", jpegFilePath, Sharpen.Extensions.ConvertToString(segmentType).ToLower(), i); System.Console.Out.Println("Writing: " + outputFilePath); FileUtil.SaveBytes(new FilePath(outputFilePath), segments[i]); } } else { string outputFilePath = Sharpen.Extensions.StringFormat("%s.%s", jpegFilePath, Sharpen.Extensions.ConvertToString(segmentType).ToLower()); System.Console.Out.Println("Writing: " + outputFilePath); FileUtil.SaveBytes(new FilePath(outputFilePath), segments[0]); } } }
/// <exception cref="System.IO.IOException"/> /// <exception cref="Com.Drew.Imaging.Jpeg.JpegProcessingException"/> public static void Main(string[] args) { if (args.Length < 1) { PrintUsage(); System.Environment.Exit(1); } string filePath = args[0]; if (!new FilePath(filePath).Exists()) { System.Console.Error.Println("File does not exist"); PrintUsage(); System.Environment.Exit(1); } ICollection <JpegSegmentType> segmentTypes = new HashSet <JpegSegmentType>(); for (int i = 1; i < args.Length; i++) { JpegSegmentType segmentType = JpegSegmentType.ValueOf(args[i].ToUpper()); if (!segmentType.canContainMetadata) { System.Console.Error.Printf("WARNING: Segment type %s cannot contain metadata so it may not be necessary to extract it%n", segmentType); } segmentTypes.Add(segmentType); } if (segmentTypes.Count == 0) { // If none specified, use all that could reasonably contain metadata Sharpen.Collections.AddAll(segmentTypes, JpegSegmentType.canContainMetadataTypes); } JpegSegmentData segmentData = JpegSegmentReader.ReadSegments(new FilePath(filePath), segmentTypes.AsIterable()); SaveSegmentFiles(filePath, segmentData); }
public void TestContainsSegment() { var segmentData = new JpegSegmentData(); var segmentType = JpegSegmentType.App3; var segmentBytes = new byte[] { 1, 2, 3 }; Assert.True(!segmentData.ContainsSegment(segmentType)); segmentData.AddSegment(segmentType, segmentBytes); Assert.True(segmentData.ContainsSegment(segmentType)); }
public void TestAddAndGetSegment() { var segmentData = new JpegSegmentData(); var segmentType = JpegSegmentType.App3; var segmentBytes = new byte[] { 1, 2, 3 }; segmentData.AddSegment(segmentType, segmentBytes); Assert.Equal(1, segmentData.GetSegmentCount(segmentType)); Assert.Equal(segmentBytes, segmentData.GetSegment(segmentType)); }
public void TestSegmentWithMultipleOccurrences() { var segmentData = new JpegSegmentData(); var segmentType = JpegSegmentType.App3; var segmentBytes1 = new byte[] { 1, 2, 3 }; var segmentBytes2 = new byte[] { 3, 2, 1 }; segmentData.AddSegment(segmentType, segmentBytes1); segmentData.AddSegment(segmentType, segmentBytes2); Assert.Equal(2, segmentData.GetSegmentCount(segmentType)); Assert.Equal(segmentBytes1, segmentData.GetSegment(segmentType)); Assert.Equal(segmentBytes2, segmentData.GetSegment(segmentType, occurrence: 1)); }
public void TestRemoveSegmentOccurrence() { var segmentData = new JpegSegmentData(); var segmentType = JpegSegmentType.App3; var segmentBytes1 = new byte[] { 1, 2, 3 }; var segmentBytes2 = new byte[] { 3, 2, 1 }; segmentData.AddSegment(segmentType, segmentBytes1); segmentData.AddSegment(segmentType, segmentBytes2); Assert.Equal(2, segmentData.GetSegmentCount(segmentType)); Assert.Equal(segmentBytes1, segmentData.GetSegment(segmentType)); segmentData.RemoveSegmentOccurrence(segmentType, 0); Assert.Equal(segmentBytes2, segmentData.GetSegment(segmentType)); }
public void TestAddingMultipleSegments() { var segmentData = new JpegSegmentData(); var segmentType1 = JpegSegmentType.App3; var segmentType2 = JpegSegmentType.App4; var segmentBytes1 = new byte[] { 1, 2, 3 }; var segmentBytes2 = new byte[] { 3, 2, 1 }; segmentData.AddSegment(segmentType1, segmentBytes1); segmentData.AddSegment(segmentType2, segmentBytes2); Assert.Equal(1, segmentData.GetSegmentCount(segmentType1)); Assert.Equal(1, segmentData.GetSegmentCount(segmentType2)); Assert.Equal(segmentBytes1, segmentData.GetSegment(segmentType1)); Assert.Equal(segmentBytes2, segmentData.GetSegment(segmentType2)); }
public void TestRemoveSegment() { var segmentData = new JpegSegmentData(); var segmentType = JpegSegmentType.App3; var segmentBytes1 = new byte[] { 1, 2, 3 }; var segmentBytes2 = new byte[] { 3, 2, 1 }; segmentData.AddSegment(segmentType, segmentBytes1); segmentData.AddSegment(segmentType, segmentBytes2); Assert.Equal(2, segmentData.GetSegmentCount(segmentType)); Assert.True(segmentData.ContainsSegment(segmentType)); Assert.Equal(segmentBytes1, segmentData.GetSegment(segmentType)); segmentData.RemoveAllSegments(segmentType); Assert.True(!segmentData.ContainsSegment(segmentType)); Assert.Equal(0, segmentData.GetSegmentCount(segmentType)); }
private static void SaveSegmentFiles(string jpegFilePath, JpegSegmentData segmentData) { foreach (var segmentType in segmentData.GetSegmentTypes()) { IList <byte[]> segments = segmentData.GetSegments(segmentType).ToList(); if (segments.Count == 0) { continue; } var format = segments.Count > 1 ? "{0}.{1}.{2}" : "{0}.{1}"; for (var i = 0; i < segments.Count; i++) { var outputFilePath = string.Format(format, jpegFilePath, segmentType.ToString().ToLower(), i); Console.Out.WriteLine("Writing: " + outputFilePath); File.WriteAllBytes(outputFilePath, segments[i]); } } }