diff --git a/src/ImageSharp/Profiles/Exif/ExifWriter.cs b/src/ImageSharp/Profiles/Exif/ExifWriter.cs index b30abf666..beb0cfe0e 100644 --- a/src/ImageSharp/Profiles/Exif/ExifWriter.cs +++ b/src/ImageSharp/Profiles/Exif/ExifWriter.cs @@ -14,69 +14,194 @@ namespace ImageSharp { private static readonly ExifTag[] IfdTags = new ExifTag[93] { - ExifTag.ImageWidth, ExifTag.ImageLength, ExifTag.BitsPerSample, ExifTag.Compression, - ExifTag.PhotometricInterpretation, ExifTag.Thresholding, ExifTag.CellWidth, - ExifTag.CellLength, ExifTag.FillOrder, ExifTag.ImageDescription, ExifTag.Make, - ExifTag.Model, ExifTag.StripOffsets, ExifTag.Orientation, ExifTag.SamplesPerPixel, - ExifTag.RowsPerStrip, ExifTag.StripByteCounts, ExifTag.MinSampleValue, - ExifTag.MaxSampleValue, ExifTag.XResolution, ExifTag.YResolution, - ExifTag.PlanarConfiguration, ExifTag.FreeOffsets, ExifTag.FreeByteCounts, - ExifTag.GrayResponseUnit, ExifTag.GrayResponseCurve, ExifTag.ResolutionUnit, - ExifTag.Software, ExifTag.DateTime, ExifTag.Artist, ExifTag.HostComputer, - ExifTag.ColorMap, ExifTag.ExtraSamples, ExifTag.Copyright, ExifTag.DocumentName, - ExifTag.PageName, ExifTag.XPosition, ExifTag.YPosition, ExifTag.T4Options, - ExifTag.T6Options, ExifTag.PageNumber, ExifTag.TransferFunction, ExifTag.Predictor, - ExifTag.WhitePoint, ExifTag.PrimaryChromaticities, ExifTag.HalftoneHints, - ExifTag.TileWidth, ExifTag.TileLength, ExifTag.TileOffsets, ExifTag.TileByteCounts, - ExifTag.BadFaxLines, ExifTag.CleanFaxData, ExifTag.ConsecutiveBadFaxLines, - ExifTag.InkSet, ExifTag.InkNames, ExifTag.NumberOfInks, ExifTag.DotRange, - ExifTag.TargetPrinter, ExifTag.SampleFormat, ExifTag.SMinSampleValue, - ExifTag.SMaxSampleValue, ExifTag.TransferRange, ExifTag.ClipPath, - ExifTag.XClipPathUnits, ExifTag.YClipPathUnits, ExifTag.Indexed, ExifTag.JPEGTables, - ExifTag.OPIProxy, ExifTag.ProfileType, ExifTag.FaxProfile, ExifTag.CodingMethods, - ExifTag.VersionYear, ExifTag.ModeNumber, ExifTag.Decode, ExifTag.DefaultImageColor, - ExifTag.JPEGProc, ExifTag.JPEGInterchangeFormat, ExifTag.JPEGInterchangeFormatLength, - ExifTag.JPEGRestartInterval, ExifTag.JPEGLosslessPredictors, - ExifTag.JPEGPointTransforms, ExifTag.JPEGQTables, ExifTag.JPEGDCTables, - ExifTag.JPEGACTables, ExifTag.YCbCrCoefficients, ExifTag.YCbCrSubsampling, - ExifTag.YCbCrSubsampling, ExifTag.YCbCrPositioning, ExifTag.ReferenceBlackWhite, - ExifTag.StripRowCounts, ExifTag.XMP, ExifTag.ImageID, ExifTag.ImageLayer + ExifTag.ImageWidth, + ExifTag.ImageLength, + ExifTag.BitsPerSample, + ExifTag.Compression, + ExifTag.PhotometricInterpretation, + ExifTag.Thresholding, + ExifTag.CellWidth, + ExifTag.CellLength, + ExifTag.FillOrder, + ExifTag.ImageDescription, + ExifTag.Make, + ExifTag.Model, + ExifTag.StripOffsets, + ExifTag.Orientation, + ExifTag.SamplesPerPixel, + ExifTag.RowsPerStrip, + ExifTag.StripByteCounts, + ExifTag.MinSampleValue, + ExifTag.MaxSampleValue, + ExifTag.XResolution, + ExifTag.YResolution, + ExifTag.PlanarConfiguration, + ExifTag.FreeOffsets, + ExifTag.FreeByteCounts, + ExifTag.GrayResponseUnit, + ExifTag.GrayResponseCurve, + ExifTag.ResolutionUnit, + ExifTag.Software, + ExifTag.DateTime, + ExifTag.Artist, + ExifTag.HostComputer, + ExifTag.ColorMap, + ExifTag.ExtraSamples, + ExifTag.Copyright, + ExifTag.DocumentName, + ExifTag.PageName, + ExifTag.XPosition, + ExifTag.YPosition, + ExifTag.T4Options, + ExifTag.T6Options, + ExifTag.PageNumber, + ExifTag.TransferFunction, + ExifTag.Predictor, + ExifTag.WhitePoint, + ExifTag.PrimaryChromaticities, + ExifTag.HalftoneHints, + ExifTag.TileWidth, + ExifTag.TileLength, + ExifTag.TileOffsets, + ExifTag.TileByteCounts, + ExifTag.BadFaxLines, + ExifTag.CleanFaxData, + ExifTag.ConsecutiveBadFaxLines, + ExifTag.InkSet, + ExifTag.InkNames, + ExifTag.NumberOfInks, + ExifTag.DotRange, + ExifTag.TargetPrinter, + ExifTag.SampleFormat, + ExifTag.SMinSampleValue, + ExifTag.SMaxSampleValue, + ExifTag.TransferRange, + ExifTag.ClipPath, + ExifTag.XClipPathUnits, + ExifTag.YClipPathUnits, + ExifTag.Indexed, + ExifTag.JPEGTables, + ExifTag.OPIProxy, + ExifTag.ProfileType, + ExifTag.FaxProfile, + ExifTag.CodingMethods, + ExifTag.VersionYear, + ExifTag.ModeNumber, + ExifTag.Decode, + ExifTag.DefaultImageColor, + ExifTag.JPEGProc, + ExifTag.JPEGInterchangeFormat, + ExifTag.JPEGInterchangeFormatLength, + ExifTag.JPEGRestartInterval, + ExifTag.JPEGLosslessPredictors, + ExifTag.JPEGPointTransforms, + ExifTag.JPEGQTables, + ExifTag.JPEGDCTables, + ExifTag.JPEGACTables, + ExifTag.YCbCrCoefficients, + ExifTag.YCbCrSubsampling, + ExifTag.YCbCrSubsampling, + ExifTag.YCbCrPositioning, + ExifTag.ReferenceBlackWhite, + ExifTag.StripRowCounts, + ExifTag.XMP, + ExifTag.ImageID, + ExifTag.ImageLayer }; private static readonly ExifTag[] ExifTags = new ExifTag[56] { - ExifTag.ExposureTime, ExifTag.FNumber, ExifTag.ExposureProgram, - ExifTag.SpectralSensitivity, ExifTag.ISOSpeedRatings, ExifTag.OECF, - ExifTag.ExifVersion, ExifTag.DateTimeOriginal, ExifTag.DateTimeDigitized, - ExifTag.ComponentsConfiguration, ExifTag.CompressedBitsPerPixel, - ExifTag.ShutterSpeedValue, ExifTag.ApertureValue, ExifTag.BrightnessValue, - ExifTag.ExposureBiasValue, ExifTag.MaxApertureValue, ExifTag.SubjectDistance, - ExifTag.MeteringMode, ExifTag.LightSource, ExifTag.Flash, ExifTag.FocalLength, - ExifTag.SubjectArea, ExifTag.MakerNote, ExifTag.UserComment, ExifTag.SubsecTime, - ExifTag.SubsecTimeOriginal, ExifTag.SubsecTimeDigitized, ExifTag.FlashpixVersion, - ExifTag.ColorSpace, ExifTag.PixelXDimension, ExifTag.PixelYDimension, - ExifTag.RelatedSoundFile, ExifTag.FlashEnergy, ExifTag.SpatialFrequencyResponse, - ExifTag.FocalPlaneXResolution, ExifTag.FocalPlaneYResolution, - ExifTag.FocalPlaneResolutionUnit, ExifTag.SubjectLocation, ExifTag.ExposureIndex, - ExifTag.SensingMethod, ExifTag.FileSource, ExifTag.SceneType, ExifTag.CFAPattern, - ExifTag.CustomRendered, ExifTag.ExposureMode, ExifTag.WhiteBalance, - ExifTag.DigitalZoomRatio, ExifTag.FocalLengthIn35mmFilm, ExifTag.SceneCaptureType, - ExifTag.GainControl, ExifTag.Contrast, ExifTag.Saturation, ExifTag.Sharpness, - ExifTag.DeviceSettingDescription, ExifTag.SubjectDistanceRange, ExifTag.ImageUniqueID + ExifTag.ExposureTime, + ExifTag.FNumber, + ExifTag.ExposureProgram, + ExifTag.SpectralSensitivity, + ExifTag.ISOSpeedRatings, + ExifTag.OECF, + ExifTag.ExifVersion, + ExifTag.DateTimeOriginal, + ExifTag.DateTimeDigitized, + ExifTag.ComponentsConfiguration, + ExifTag.CompressedBitsPerPixel, + ExifTag.ShutterSpeedValue, + ExifTag.ApertureValue, + ExifTag.BrightnessValue, + ExifTag.ExposureBiasValue, + ExifTag.MaxApertureValue, + ExifTag.SubjectDistance, + ExifTag.MeteringMode, + ExifTag.LightSource, + ExifTag.Flash, + ExifTag.FocalLength, + ExifTag.SubjectArea, + ExifTag.MakerNote, + ExifTag.UserComment, + ExifTag.SubsecTime, + ExifTag.SubsecTimeOriginal, + ExifTag.SubsecTimeDigitized, + ExifTag.FlashpixVersion, + ExifTag.ColorSpace, + ExifTag.PixelXDimension, + ExifTag.PixelYDimension, + ExifTag.RelatedSoundFile, + ExifTag.FlashEnergy, + ExifTag.SpatialFrequencyResponse, + ExifTag.FocalPlaneXResolution, + ExifTag.FocalPlaneYResolution, + ExifTag.FocalPlaneResolutionUnit, + ExifTag.SubjectLocation, + ExifTag.ExposureIndex, + ExifTag.SensingMethod, + ExifTag.FileSource, + ExifTag.SceneType, + ExifTag.CFAPattern, + ExifTag.CustomRendered, + ExifTag.ExposureMode, + ExifTag.WhiteBalance, + ExifTag.DigitalZoomRatio, + ExifTag.FocalLengthIn35mmFilm, + ExifTag.SceneCaptureType, + ExifTag.GainControl, + ExifTag.Contrast, + ExifTag.Saturation, + ExifTag.Sharpness, + ExifTag.DeviceSettingDescription, + ExifTag.SubjectDistanceRange, + ExifTag.ImageUniqueID }; private static readonly ExifTag[] GPSTags = new ExifTag[31] { - ExifTag.GPSVersionID, ExifTag.GPSLatitudeRef, ExifTag.GPSLatitude, - ExifTag.GPSLongitudeRef, ExifTag.GPSLongitude, ExifTag.GPSAltitudeRef, - ExifTag.GPSAltitude, ExifTag.GPSTimestamp, ExifTag.GPSSatellites, ExifTag.GPSStatus, - ExifTag.GPSMeasureMode, ExifTag.GPSDOP, ExifTag.GPSSpeedRef, ExifTag.GPSSpeed, - ExifTag.GPSTrackRef, ExifTag.GPSTrack, ExifTag.GPSImgDirectionRef, - ExifTag.GPSImgDirection, ExifTag.GPSMapDatum, ExifTag.GPSDestLatitudeRef, - ExifTag.GPSDestLatitude, ExifTag.GPSDestLongitudeRef, ExifTag.GPSDestLongitude, - ExifTag.GPSDestBearingRef, ExifTag.GPSDestBearing, ExifTag.GPSDestDistanceRef, - ExifTag.GPSDestDistance, ExifTag.GPSProcessingMethod, ExifTag.GPSAreaInformation, - ExifTag.GPSDateStamp, ExifTag.GPSDifferential + ExifTag.GPSVersionID, + ExifTag.GPSLatitudeRef, + ExifTag.GPSLatitude, + ExifTag.GPSLongitudeRef, + ExifTag.GPSLongitude, + ExifTag.GPSAltitudeRef, + ExifTag.GPSAltitude, + ExifTag.GPSTimestamp, + ExifTag.GPSSatellites, + ExifTag.GPSStatus, + ExifTag.GPSMeasureMode, + ExifTag.GPSDOP, + ExifTag.GPSSpeedRef, + ExifTag.GPSSpeed, + ExifTag.GPSTrackRef, + ExifTag.GPSTrack, + ExifTag.GPSImgDirectionRef, + ExifTag.GPSImgDirection, + ExifTag.GPSMapDatum, + ExifTag.GPSDestLatitudeRef, + ExifTag.GPSDestLatitude, + ExifTag.GPSDestLongitudeRef, + ExifTag.GPSDestLongitude, + ExifTag.GPSDestBearingRef, + ExifTag.GPSDestBearing, + ExifTag.GPSDestDistanceRef, + ExifTag.GPSDestDistance, + ExifTag.GPSProcessingMethod, + ExifTag.GPSAreaInformation, + ExifTag.GPSDateStamp, + ExifTag.GPSDifferential }; private const int StartIndex = 6;