From 9c5d895c3b4d3b6668a0566658d6aa66eb02532f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 27 Feb 2026 11:32:08 +0100 Subject: [PATCH 1/2] Add PEF (Pentax Electronic Format) support --- gen/main.go | 2 +- .../bep/j\303\270lstravatnet.pef.config.json" | 1 + .../images/bep/j\303\270lstravatnet.pef.json" | 236 ++++++++++++++++++ .../images/bep/license.txt.json | 20 -- .../images/goexif/license.txt.json | 19 -- gen/testdata_exiftool/images/license.txt.json | 19 -- .../metadata-extractor/license.txt.json | 19 -- gen/testdata_exiftool/images/sample.arw.json | 6 +- gen/testdata_exiftool/images/sample.cr2.json | 6 +- gen/testdata_exiftool/images/sample.dng.json | 6 +- gen/testdata_exiftool/images/sample.nef.json | 6 +- imageformat_string.go | 10 +- imagemeta.go | 11 +- imagemeta_fuzz_test.go | 10 + imagemeta_test.go | 15 +- testdata/fuzz/FuzzDecodePEF/284853a7f4021859 | 2 + .../images/bep/j\303\270lstravatnet.pef" | Bin 0 -> 159648 bytes 17 files changed, 287 insertions(+), 101 deletions(-) create mode 100644 "gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.config.json" create mode 100644 "gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.json" delete mode 100644 gen/testdata_exiftool/images/bep/license.txt.json delete mode 100644 gen/testdata_exiftool/images/goexif/license.txt.json delete mode 100644 gen/testdata_exiftool/images/license.txt.json delete mode 100644 gen/testdata_exiftool/images/metadata-extractor/license.txt.json create mode 100644 testdata/fuzz/FuzzDecodePEF/284853a7f4021859 create mode 100644 "testdata/images/bep/j\303\270lstravatnet.pef" diff --git a/gen/main.go b/gen/main.go index 074a3bb..93f6c6c 100644 --- a/gen/main.go +++ b/gen/main.go @@ -25,7 +25,7 @@ func main() { if err != nil { return err } - if info.IsDir() || strings.HasPrefix(info.Name(), ".") { + if info.IsDir() || strings.HasPrefix(info.Name(), ".") || strings.HasSuffix(info.Name(), ".txt") { return nil } diff --git "a/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.config.json" "b/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.config.json" new file mode 100644 index 0000000..0324003 --- /dev/null +++ "b/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.config.json" @@ -0,0 +1 @@ +{"width": 6040, "height": 4032} \ No newline at end of file diff --git "a/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.json" "b/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.json" new file mode 100644 index 0000000..587eb67 --- /dev/null +++ "b/gen/testdata_exiftool/images/bep/j\303\270lstravatnet.pef.json" @@ -0,0 +1,236 @@ +[{ + "SourceFile": "../testdata/images/bep/jølstravatnet.pef", + "ExifTool": { + "ExifToolVersion": 13.50 + }, + "File": { + "FileName": "jølstravatnet.pef", + "Directory": "../testdata/images/bep", + "FileSize": 31326570, + "FilePermissions": 100644, + "FileType": "PEF", + "FileTypeExtension": "PEF", + "MIMEType": "image/x-pentax-pef", + "ExifByteOrder": "II" + }, + "EXIF": { + "ImageWidth": 6080, + "ImageHeight": 4032, + "BitsPerSample": 14, + "Compression": 65535, + "PhotometricInterpretation": 32803, + "Make": "RICOH IMAGING COMPANY, LTD.", + "Model": "PENTAX K-3 II", + "StripOffsets": 159648, + "Orientation": 1, + "SamplesPerPixel": 1, + "RowsPerStrip": 4032, + "StripByteCounts": 28357031, + "XResolution": 300, + "YResolution": 300, + "PlanarConfiguration": 1, + "ResolutionUnit": 2, + "Software": "PENTAX K-3 II Ver. 1.10", + "ModifyDate": "2021:02:05 10:56:53", + "Artist": "bjorn.erik.pedersen@gmail.com", + "Copyright": "", + "ExposureTime": 0.025, + "FNumber": 7.1, + "ExposureProgram": 3, + "ISO": 100, + "SensitivityType": 1, + "StandardOutputSensitivity": 100, + "DateTimeOriginal": "2021:02:05 10:56:53", + "CreateDate": "2021:02:05 10:56:53", + "ExposureCompensation": 0, + "MeteringMode": 5, + "Flash": 16, + "FocalLength": 50, + "SensingMethod": 2, + "CFAPattern": "2 2 0 1 1 2", + "CustomRendered": 0, + "ExposureMode": 0, + "WhiteBalance": 0, + "FocalLengthIn35mmFormat": 75, + "SceneCaptureType": 0, + "Contrast": 2, + "Saturation": 0, + "Sharpness": 2, + "SubjectDistanceRange": 3, + "GPSVersionID": "2 3 0 0", + "GPSLatitudeRef": "N", + "GPSLatitude": 61.5554583333333, + "GPSLongitudeRef": "E", + "GPSLongitude": 6.46989666666667, + "GPSAltitudeRef": 0, + "GPSAltitude": 239.8, + "GPSTimeStamp": "08:57:13", + "GPSSatellites": "09", + "GPSStatus": "A", + "GPSMeasureMode": 3, + "GPSSpeedRef": "K", + "GPSSpeed": 0.14, + "GPSTrackRef": "T", + "GPSTrack": 175.85, + "GPSImgDirectionRef": "T", + "GPSImgDirection": 22.62, + "GPSMapDatum": "WGS-84", + "GPSProcessingMethod": "GPS", + "GPSDateStamp": "2021:02:05", + "ThumbnailOffset": 153088, + "ThumbnailLength": 6540, + "JpgFromRawStart": 28516704, + "JpgFromRawLength": 2809866 + }, + "MakerNotes": { + "PentaxVersion": "11 6 1 0", + "PentaxModelType": 0, + "PreviewImageSize": "720 480", + "PreviewImageLength": 53753, + "PreviewImageStart": 73952, + "PentaxModelID": 77980, + "Date": "2021:02:05", + "Time": "10:56:53", + "Quality": 4, + "FlashMode": "1 63", + "FocusMode": 16, + "AFPointSelected": "65535 0", + "AFPointsInFocus": 0, + "ExposureTime": 0.025, + "FNumber": 7.1, + "ISO": 6, + "ExposureCompensation": 0, + "MeteringMode": 0, + "AutoBracketing": "0 0", + "WhiteBalance": 0, + "FocalLength": 50, + "Saturation": 1, + "Contrast": 4, + "Sharpness": 4, + "DSPFirmwareVersion": "1 10 22 06", + "EffectiveLV": 11, + "PictureMode": "5 0 1", + "DriveMode": "0 0 0 0", + "ColorSpace": 0, + "DataScaling": 8192, + "PreviewImageBorders": "0 0 0 0", + "LensType": "8 242", + "ExtenderStatus": 0, + "CameraTemperature": 11, + "AELock": 0, + "NoiseReduction": 0, + "FlashExposureComp": "0 0", + "ImageTone": 1, + "ShakeReduction": 7, + "ShutterCount": 20897, + "FacesDetected": 0, + "FacePosition": "0 0", + "RawDevelopmentProcess": 13, + "Hue": 1, + "WhiteBalanceAutoAdjustment": 0, + "TungstenAWB": 1, + "DynamicRangeExpansion": "0 2 0 0", + "WorldTimeLocation": 0, + "HometownDST": 1, + "DestinationDST": 1, + "HometownCity": 69, + "DestinationCity": 69, + "HighLowKeyAdj": "0 0", + "ContrastHighlight": "0 0", + "ContrastShadow": "0 0", + "ContrastHighlightShadowAdj": 0, + "FineSharpness": "0 0", + "HighISONoiseReduction": "255 0", + "AFAdjustment": 0, + "MonochromeFilterEffect": 65535, + "MonochromeToning": 65535, + "FaceDetect": "5 0", + "FaceDetectFrameSize": "0 0", + "ShadowCorrection": "2 4", + "ISOAutoMinSpeed": "2 0", + "CrossProcess": 0, + "DistortionCorrection": 0, + "ChromaticAberrationCorrection": 1, + "PeripheralIlluminationCorr": 0, + "DiffractionCorrection": 16, + "WhiteLevel": 16317, + "BleachBypassToning": 65535, + "AspectRatio": 1, + "HDR": "0 0 0 0", + "IntervalShooting": "0 0", + "BlackPoint": "1 1 1 1", + "WhitePoint": "19200 8192 8192 11584", + "AEExposureTime": 0.025558774984342, + "AEAperture": 7.0250086414932, + "AE_ISO": 100, + "AEMaxAperture": 2.82842712474619, + "AEMaxAperture2": 2.82842712474619, + "AEMinAperture": 22.6274169979695, + "AEMinExposureTime": "0.000129475118625467", + "AutoAperture": 0, + "MinAperture": 0, + "LensFStops": 8.5, + "MinFocusDistance": 3, + "FocusRangeIndex": 3, + "LensFocalLength": 50, + "NominalMaxAperture": 2.82842712474619, + "NominalMinAperture": 22.6274169979695, + "MaxAperture": 2.82842712474619, + "AEMeteringSegments": "117 117 117 117 117 117 117 117 117 117 117 117 117 117 118 118 118 119 119 118 118 118 118 118 118 119 119 119 119 119 119 118 118 118 118 119 119 119 119 119 119 119 119 120 119 118 118 118 118 118 118 118 118 118 118 118 118 118 118 119 119 119 119 119 119 119 119 118 119 119 119 119 120 120 120 119 119 119 119 119 119 120 120 120 120 120 120 120 120 120 118 118 118 118 118 118 118 118 118 118 118 118 118 118 119 119 119 119 119 119 119 119 118 119 119 119 120 120 120 120 120 119 119 119 119 120 120 120 120 120 120 120 120 120 120 118 118 118 118 118 118 118 118 118 118 118 119 118 119 119 119 119 120 119 119 119 119 119 119 119 119 119 120 120 120 120 119 119 119 119 120 120 120 120 120 120 120 120 120 120 119 118 118 118 119 119 119 120 120 120 121 121 122 123 125 125 123 120 118 117 119 119 119 119 119 119 119 119 119 119 119 119 119 119 119 120 120 120 120 120 120 120 120 120 121 119 119 120 121 123 123 123 124 124 125 125 126 127 127 126 127 126 123 120 116 115 115 116 117 118 119 119 119 119 119 119 119 119 119 119 120 120 120 120 121 121 122 122 123 122 122 124 125 127 127 126 125 125 125 125 124 126 126 127 125 125 126 124 124 121 120 118 115 113 114 114 115 116 118 119 118 118 116 116 118 119 120 122 124 125 126 126 125 126 127 125 126 127 128 129 128 127 126 125 125 125 126 126 127 127 126 126 126 124 122 124 121 118 114 114 113 113 114 114 115 114 114 113 113 114 118 123 126 127 127 128 128 127 128 128 127 126 127 126 124 123 123 123 123 123 122 124 125 126 128 126 124 123 123 117 118 121 118 119 119 116 119 115 113 112 113 112 112 112 113 114 117 119 123 126 126 125 125 125 125 123 124 123 120 116 112 112 114 115 116 117 120 123 127 129 125 123 119 117 112 111 114 119 119 117 121 123 119 114 110 110 110 109 110 110 110 110 112 114 117 120 121 121 121 119 115 114 112 110 107 104 101 99 99 100 103 112 119 124 125 121 121 114 113 107 107 110 116 118 116 116 117 115 112 109 107 104 104 103 106 106 107 108 109 112 114 115 115 113 111 108 106 105 104 102 98 96 95 94 96 99 101 103 105 109 110 108 102 103 103 105 106 108 111 110 110 106 104 104 102 102 101 100 99 101 102 102 103 105 107 108 107 104 101 97 103 101 100 99 97 96 96 95 96 97 96 96 97 98 99 98 98 98 99 99 102 105 105 104 102 103 102 101 99 100 106 103 100 98 98 99 101 100 99 99 98 97 96 95 95 98 97 97 97 97 97 96 96 96 96 96 97 99 100 102 106 107 106 110 109 112 112 112 112 111 110 109 109 107 107 107 102 102 102 99 101 102 101 97 95 95 94 94 94 94 96 97 97 98 99 99 99 102 103 107 107 109 109 109 110 110 109 110 109 110 111 110 110 110 108 107 107 106 106 105 105 102 102 102 100 99 100 101 101 103 103 101 100 99 99 103 104 106 107 108 108 107 108 108 108 107 108 109 109 108 108 108 108 107 107 107 107 107 106 107 107 107 106 106 106 106 107 106 106 105 106 105 105 106 106 107 106 106 106 105 108 108 109 109 109 108 108 107 107 107 107 107 107 108 108 108 108 107 107 107 107 107 107 107 107 107 107 107 106 106 106 104 104 103 103 103 103 103 103 103 104 104 104 104 103 104 104 105 105 105 104 103 103 103 104 104 104 105 105 106 106 106 104 106 105 105 105 105 106 105 105 105 104 103 103 104 102 101 100 100 101 102 102 102 103 103 103 103 102 101 101 101 101 101 101 100 100 100 100 100 100 101 101 102 104 104 104 102 103 102 102 103 104 106 106 106 106 105 104 103 103 102 101 100 101 102 103 103 104 106 107 107 106 105 104 101 101 101 101 101 100 99 99 99 100 100 101 103 107 109 109 108 106 105 103 103 104 107 110 110 110 111 109 107 105 104 103 102 102 104 104 105 106 107 109 111 111 111 110 109 103 103 103 103 102 100 99 100 100 100 101 104 108 113 116 115 113 112 109 107 105 107 109 111 109 110 111 110 108 107 106 107 107 106 107 107 107 108 108 108 108 108 108 108 108 107 107 107 107 106 105 104 104 105 106 107 108 111 114 116 114 112 111 110 108 107 109 111 112 109 110 112 110 109 108 108 107 107 107 107 108 108 108 109 109 109 108 108 108 108 108 109 109 108 108 108 108 107 108 108 107 108 108 108 108 107 107 107 107 107 107 107 107 107 108 109 109 108 108 108 109 109 109 108 109 110 110 111 110 109 108 108 108 108 108 108 108 108 108 107 107 107 108 108 108 107 107 107 106 105 105 106 107 107 107 107 107 107 107 107 107 107 107 107 107 108 109 110 110 110 111 112 111 110 109 109 109 109 110 111 107 108 108 106 104 104 106 107 105 104 105 105 103 104 103 104 105 107 108 107 107 107 107 107 107 107 107 107 108 108 109 110 111 111 111 112 112 112 113 113 112 112 112 113 113 107 107 106 104 102 103 104 103 101 101 103 101 98 101 100 99 103 103 103 107 107 107 107 107 107 107 108 108 108 108 108 108 108 108 108 108 107 107 107 107 108 107 107 108 108 105 106 104 103 102 104 104 103 100 100 101 97 96 97 98 96 97 96 99 104 104 103 104 106 106 106 106 106 106 106 106 106 106 106 107 106 106 106 106 106 106 107 107 107 107 106 106 105 104 104 105 106 103 99 100 100 96 96 99 98 94 94 95 96 98 99 98 98 100 101 103 106 106 106 106 106 106 106 107 106 107 107 107 107 107 107 107 107 108 108 105 107 107 106 107 108 108 104 100 100 100 99 99 101 98 95 93 95 95 96 96 96 96 98 98 99 103 105 105 106 106 106 106 106 105 106 106 106 106 108 109 109 109 110 110 105 107 107 107 108 109 109 106 102 101 101 99 100 101 99 97 97 96 96 96 94 98 97 98 98 100 103 105 105 106 106 106 103 102 102 102 101 102 103 105 107 109 109 109 109 134 134 135 134 135 135 135 135 135 135 135 135 135 135 135 135 135 136 136 135 136 136 136 136 136 136 137 136 136 136 136 136 136 136 136 135 135 135 134 134 134 134 134 134 133 137 137 137 136 136 137 137 136 137 137 136 136 136 136 136 136 136 137 136 137 136 137 137 138 138 138 137 138 138 137 137 137 137 137 137 136 136 136 137 136 136 136 136 136 135 138 137 137 137 137 136 137 137 137 136 136 136 136 136 136 136 136 137 137 137 137 137 138 138 138 138 138 138 138 138 137 137 137 137 137 136 136 137 136 136 136 136 136 136 136 137 137 137 136 136 136 136 136 136 136 136 136 136 136 135 135 136 136 136 136 136 137 137 137 137 138 137 137 137 137 137 137 137 136 136 136 136 136 136 136 135 136 135 135 135 137 136 136 136 135 135 135 134 134 132 131 132 130 126 122 122 125 133 136 139 134 135 136 136 136 136 136 137 137 136 136 136 136 136 136 136 136 135 135 135 135 135 135 134 134 136 136 134 130 127 126 126 125 123 122 122 120 120 120 122 121 121 127 129 137 140 141 137 138 137 136 136 136 136 136 136 135 135 135 135 135 135 135 134 133 131 129 127 127 129 132 127 123 120 119 121 122 123 122 122 125 122 121 120 124 123 122 125 123 128 128 132 137 142 142 141 140 139 137 134 136 135 138 138 135 134 132 129 125 122 121 122 122 121 119 123 120 119 118 117 119 120 120 121 120 121 120 121 120 120 122 122 120 123 127 122 127 132 140 139 142 142 142 141 139 140 141 141 141 140 134 124 120 119 118 117 118 118 118 118 119 119 118 118 120 122 121 121 121 119 121 119 121 121 118 121 123 123 121 133 130 125 131 129 127 135 127 135 140 140 139 140 140 141 141 138 134 129 120 118 119 120 120 119 120 120 119 119 123 129 137 135 126 125 123 122 119 122 117 116 120 120 125 124 136 137 136 126 128 131 124 120 128 137 144 142 140 141 141 141 142 140 138 134 128 121 120 119 120 121 129 131 134 136 138 141 141 140 140 141 142 130 123 117 116 121 117 128 124 137 139 136 127 127 131 128 126 127 133 138 143 143 142 144 140 141 141 139 137 130 125 123 123 125 125 135 138 140 138 139 139 139 137 138 138 137 138 137 137 131 128 131 138 136 138 136 138 137 133 135 134 140 140 139 143 142 141 139 140 141 141 141 138 134 130 129 130 133 137 138 139 140 140 140 140 139 138 137 138 136 138 138 138 137 137 138 139 140 141 141 143 141 141 142 143 142 142 141 143 142 137 141 142 140 140 140 139 140 139 137 137 138 137 137 137 139 140 139 139 139 138 138 138 138 140 140 141 140 140 142 139 140 142 137 141 139 140 140 140 140 140 141 140 142 141 140 143 140 140 141 137 136 137 140 139 138 138 137 138 137 140 141 141 141 141 141 143 140 142 138 138 138 139 140 139 139 141 139 141 139 140 140 142 140 142 143 141 141 142 142 142 142 141 139 141 141 139 138 138 137 139 141 140 139 140 143 142 142 140 138 139 140 139 140 140 143 140 140 141 143 141 142 140 140 141 140 141 142 143 141 142 140 142 142 141 142 140 140 140 140 139 141 141 141 140 140 140 139 139 139 140 140 140 140 140 141 141 141 140 141 141 140 140 141 140 141 140 140 140 141 141 140 141 141 141 141 140 140 141 141 141 143 141 141 142 142 141 142 142 141 141 139 140 140 140 141 142 142 141 141 141 142 140 140 140 140 140 139 139 138 139 139 141 139 141 140 140 140 140 141 141 140 140 141 141 140 141 140 140 139 139 139 138 137 136 135 136 136 138 137 139 139 140 140 139 140 139 139 139 139 139 139 138 138 137 136 136 138 137 138 140 139 138 137 138 136 136 137 138 140 140 141 139 140 140 140 140 138 137 134 131 131 131 134 135 139 139 138 139 139 138 138 137 138 137 138 137 135 132 128 127 129 131 133 135 137 137 135 132 132 132 129 131 136 139 140 141 140 141 140 141 140 139 137 133 127 126 126 128 130 138 139 138 138 138 138 138 137 136 136 136 134 130 124 121 122 124 125 128 133 137 136 133 134 136 136 133 136 140 142 142 141 141 142 142 142 141 141 141 141 140 140 139 139 138 135 136 136 135 135 137 138 137 135 135 135 135 133 129 126 127 131 131 133 135 138 135 133 133 138 136 133 136 139 141 142 143 143 143 142 143 143 141 140 139 139 141 140 141 140 140 140 140 140 140 141 141 141 141 142 143 142 142 143 142 142 142 142 142 142 143 142 143 141 141 139 138 139 141 141 140 140 140 142 141 140 138 135 138 140 140 142 142 141 141 143 143 143 142 143 142 142 143 143 142 143 142 143 143 142 143 142 142 143 142 142 142 142 142 143 143 143 143 142 143 142 141 140 141 140 139 138 138 139 140 140 141 140 138 137 142 143 141 143 143 144 142 140 141 143 140 139 141 139 140 139 141 140 139 140 141 141 143 142 143 142 143 143 141 142 140 138 138 137 137 136 136 135 134 133 133 134 133 132 132 144 141 141 142 143 143 141 141 141 139 137 137 137 137 136 138 139 139 140 138 141 141 142 142 143 143 141 140 141 140 142 143 142 143 143 143 143 144 143 143 143 143 143 144 142 142 141 142 141 142 141 140 139 140 139 138 137 136 135 136 137 135 137 137 139 141 141 142 142 143 143 143 143 143 143 144 143 142 144 142 142 143 143 143 143 143 143 143 142 143 141 140 141 141 143 141 139 139 141 138 135 136 136 136 135 135 133 135 136 136 136 136 138 138 140 142 141 142 144 143 142 143 142 142 142 142 143 142 142 143 141 143 143 143 142 142 142 142 142 143 142 140 142 141 139 137 136 139 137 136 135 134 133 134 134 135 134 136 136 138 140 142 141 143 142 142 142 141 142 142 141 142 141 142 142 142 143 141 142 142 141 141 140 142 142 141 139 140 140 139 137 138 137 136 136 137 135 134 135 134 134 134 136 136 138 139 141 142 142 143 142 141 142 139 141 141 142 140 141 143 142 141 142 141 143 117 116 116 116 116 116 116 116 116 116 117 117 116 117 117 117 117 116 116 117 117 117 117 117 117 117 117 117 117 117 117 117 117 118 118 117 118 118 118 118 118 118 119 119 120 114 115 115 115 115 115 116 115 116 116 116 116 116 116 117 117 116 116 116 116 117 116 116 116 116 116 116 116 116 116 116 116 117 117 116 117 117 117 118 117 118 117 117 118 118 115 114 115 115 115 115 115 116 116 116 116 116 116 116 116 116 116 116 116 116 116 116 115 116 116 116 116 116 116 116 116 116 116 116 117 117 117 117 117 118 118 118 118 118 118 114 115 115 115 115 116 116 115 116 116 116 117 116 116 117 118 117 117 117 116 117 117 116 116 116 116 116 116 116 116 117 116 117 117 117 117 117 117 117 118 117 118 118 118 118 115 115 116 116 116 117 118 119 119 120 122 121 123 127 131 133 128 122 118 114 121 119 117 117 117 117 117 117 117 117 117 117 117 117 118 118 118 118 118 118 119 118 119 119 119 116 116 118 121 126 127 128 129 130 132 131 133 133 133 131 132 133 128 126 119 114 114 118 115 117 118 118 118 118 118 118 118 118 118 118 118 118 119 119 120 123 125 128 128 123 119 125 130 132 134 132 131 130 131 132 128 132 131 133 129 131 132 129 131 127 128 124 119 114 113 113 113 115 117 119 117 121 116 115 119 119 120 125 129 132 133 132 131 133 134 129 132 134 134 135 134 133 133 131 133 132 133 132 133 132 132 132 133 131 129 132 127 124 116 116 113 113 114 114 116 114 114 113 113 114 119 132 135 134 135 136 135 135 135 135 134 133 135 135 134 132 131 132 132 134 132 134 132 132 136 132 131 130 133 122 125 130 124 127 129 121 127 121 115 115 116 115 115 114 114 115 120 126 134 136 134 133 134 135 135 134 134 134 131 124 116 118 129 130 131 133 134 130 136 136 134 136 130 132 120 118 118 129 127 125 132 132 128 118 111 115 115 114 115 115 113 115 116 120 128 134 134 135 133 134 125 123 120 118 115 116 116 117 117 116 113 125 131 136 136 135 134 125 128 119 116 121 129 128 125 128 130 129 122 118 112 116 114 114 117 114 115 115 118 125 131 133 132 132 133 120 116 115 116 118 118 118 120 120 118 119 118 119 120 126 128 124 121 120 119 121 118 119 124 121 122 117 117 119 115 116 118 119 118 116 117 116 118 123 128 127 127 123 119 119 118 117 117 117 118 119 119 119 119 120 120 120 119 119 120 119 119 118 118 117 114 114 115 114 115 116 115 115 115 116 117 114 116 117 117 117 119 118 118 120 120 119 119 120 121 118 117 118 118 119 119 119 119 119 117 117 118 115 116 116 115 113 113 115 113 114 114 114 114 114 113 113 113 113 114 113 115 117 116 116 120 120 120 117 119 119 120 120 120 120 117 117 116 116 115 116 115 115 114 116 115 115 114 113 114 114 114 113 114 114 114 114 113 113 113 113 113 115 114 115 113 116 115 118 117 116 119 118 119 118 117 117 117 118 118 113 113 112 112 115 115 113 114 115 115 112 113 113 113 111 112 112 113 114 114 115 114 114 113 114 114 115 114 114 113 113 114 115 116 117 116 114 113 114 114 114 115 116 116 116 114 114 113 113 113 113 112 114 114 114 114 114 115 114 114 114 114 115 114 114 114 115 114 114 114 114 115 115 114 114 114 115 116 116 116 115 115 115 115 117 117 117 116 116 117 114 114 114 114 115 116 115 116 116 116 116 115 117 117 116 116 117 115 115 115 115 115 116 115 115 115 116 116 116 115 116 116 117 117 118 117 118 118 119 120 122 122 121 120 120 118 118 118 117 118 117 118 119 118 118 117 118 118 119 120 119 119 120 118 118 117 118 118 119 118 119 120 120 118 117 116 116 118 117 118 117 117 118 119 122 125 126 125 122 123 119 119 118 119 118 118 119 119 119 119 119 119 121 124 127 127 126 125 122 121 119 119 120 124 124 123 126 125 121 117 117 116 117 116 116 115 116 117 119 125 130 131 131 129 128 119 118 118 118 119 118 118 120 121 120 121 121 125 130 131 131 130 130 126 122 120 120 121 122 120 119 122 120 116 114 113 113 113 112 114 113 113 113 113 113 114 114 114 115 117 122 121 121 122 120 120 119 120 124 122 120 120 122 125 127 127 125 124 122 120 118 121 122 123 119 121 123 119 115 114 112 113 112 113 113 112 112 113 115 117 116 114 115 115 116 114 114 115 115 115 113 112 112 112 111 112 111 112 112 112 112 112 112 112 112 112 113 112 113 114 117 117 115 113 114 114 115 115 112 113 113 117 122 117 114 115 114 113 114 114 110 111 112 111 112 111 112 112 111 112 111 112 112 112 113 113 112 113 112 111 113 112 113 113 112 112 112 112 113 111 111 113 114 113 112 114 115 116 114 113 114 114 115 116 118 112 112 113 113 113 114 114 113 115 114 115 115 115 116 116 117 113 115 116 113 114 113 112 112 113 113 113 112 113 113 113 116 116 116 116 117 118 120 121 122 122 121 122 123 125 112 114 115 115 116 115 114 116 117 118 120 120 121 119 120 119 117 119 118 117 114 114 113 113 113 112 114 115 115 115 114 112 112 112 111 111 111 111 112 112 112 112 112 113 113 113 114 115 114 114 116 115 116 117 118 119 119 120 121 121 120 120 121 120 116 115 116 115 113 114 112 113 113 113 113 112 114 113 112 113 113 113 113 113 113 113 113 114 113 114 115 114 114 113 113 113 115 117 116 118 120 120 121 120 121 122 122 121 121 120 119 121 120 119 117 115 113 113 114 114 112 113 113 114 112 113 112 112 114 112 112 112 113 112 112 113 114 114 113 112 112 114 115 116 117 119 120 119 117 120 122 122 122 122 121 121 122 122 120 119 119 115 114 113 114 113 114 115 115 114 113 114 114 113 113 115 112 113 112 113 114 115 115 113 112 114 115 114 116 118 119 119 120 119 120 121 121 123 121 122 123 122 120 121 119 118 115 115 114 114 115 114 117 118 116 116 116 116 115 114 113 113 113 113 114", + "FlashMeteringSegments": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "SlaveFlashMeteringSegments": "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0", + "ManufactureDate": "2015:05:06", + "ProductionCode": 2.2, + "InternalSerialNumber": 7078575, + "PowerSource": 2, + "BodyBatteryState": 5, + "BodyBatteryVoltage1": 7.12, + "BodyBatteryVoltage2": 6.84, + "ColorMatrixA2": "5857 2334 0 0 8192 0 0 335 7856", + "ColorMatrixB2": "13952 -4416 -1344 -1472 13792 -4128 128 -2816 10880", + "AFPredictor": 1, + "AFDefocus": 0, + "AFIntegrationTime": 0, + "AFHold": 2, + "KelvinWB_Daylight": "5205 0 2.1640625 1.42529296875", + "KelvinWB_01": "2500 0 1.1741943359375 2.5665283203125", + "KelvinWB_02": "2630 0 1.234619140625 2.4586181640625", + "KelvinWB_03": "2780 0 1.3050537109375 2.3409423828125", + "KelvinWB_04": "2940 0 1.3797607421875 2.2255859375", + "KelvinWB_05": "3130 0 1.4661865234375 2.1029052734375", + "KelvinWB_06": "3330 0 1.5537109375 1.9896240234375", + "KelvinWB_07": "3570 0 1.6531982421875 1.873291015625", + "KelvinWB_08": "3850 0 1.7611083984375 1.760009765625", + "KelvinWB_09": "4170 0 1.8734130859375 1.65380859375", + "KelvinWB_10": "4550 0 1.9923095703125 1.552978515625", + "KelvinWB_11": "5000 0 2.1151123046875 1.4598388671875", + "KelvinWB_12": "5560 0 2.2442626953125 1.3714599609375", + "KelvinWB_13": "6250 0 2.3739013671875 1.290771484375", + "KelvinWB_14": "7140 0 2.50439453125 1.2164306640625", + "KelvinWB_15": "8330 0 2.6326904296875 1.148193359375", + "KelvinWB_16": "10000 0 2.7550048828125 1.0860595703125", + "WBShiftAB": 0, + "WBShiftGM": 0, + "EVSteps": 1, + "SensitivitySteps": 0, + "LiveView": 0, + "SerialNumber": 6211161, + "SourceDirectoryIndex": 0, + "SourceFileIndex": 0, + "LevelOrientation": 1, + "CompositionAdjust": 0, + "RollAngle": 1.5, + "PitchAngle": 0.5, + "CompositionAdjustX": 0, + "CompositionAdjustY": 0, + "CompositionAdjustRotation": 0, + "ContrastDetectAFArea": "0 0 0 0", + "NumCAFPoints": 0, + "CAFGridSize": "0 0", + "CAFPointsInFocus": "", + "CAFPointsSelected": "", + "PixelShiftResolution": 0, + "SensorTemperature": 14.5, + "SensorTemperature2": 14.5 + } +}] diff --git a/gen/testdata_exiftool/images/bep/license.txt.json b/gen/testdata_exiftool/images/bep/license.txt.json deleted file mode 100644 index 155b806..0000000 --- a/gen/testdata_exiftool/images/bep/license.txt.json +++ /dev/null @@ -1,20 +0,0 @@ -[{ - "SourceFile": "../testdata/images/bep/license.txt", - "ExifTool": { - "ExifToolVersion": 13.50 - }, - "File": { - "FileName": "license.txt", - "Directory": "../testdata/images/bep", - "FileSize": 121, - "FilePermissions": 100644, - "FileType": "TXT", - "FileTypeExtension": "TXT", - "MIMEType": "text/plain", - "MIMEEncoding": "utf-8", - "ByteOrderMark": 0, - "Newlines": "", - "LineCount": 1, - "WordCount": 12 - } -}] diff --git a/gen/testdata_exiftool/images/goexif/license.txt.json b/gen/testdata_exiftool/images/goexif/license.txt.json deleted file mode 100644 index d6d249d..0000000 --- a/gen/testdata_exiftool/images/goexif/license.txt.json +++ /dev/null @@ -1,19 +0,0 @@ -[{ - "SourceFile": "../testdata/images/goexif/license.txt", - "ExifTool": { - "ExifToolVersion": 13.50 - }, - "File": { - "FileName": "license.txt", - "Directory": "../testdata/images/goexif", - "FileSize": 167, - "FilePermissions": 100644, - "FileType": "TXT", - "FileTypeExtension": "TXT", - "MIMEType": "text/plain", - "MIMEEncoding": "us-ascii", - "Newlines": "\n", - "LineCount": 6, - "WordCount": 17 - } -}] diff --git a/gen/testdata_exiftool/images/license.txt.json b/gen/testdata_exiftool/images/license.txt.json deleted file mode 100644 index 0b9c6bc..0000000 --- a/gen/testdata_exiftool/images/license.txt.json +++ /dev/null @@ -1,19 +0,0 @@ -[{ - "SourceFile": "../testdata/images/license.txt", - "ExifTool": { - "ExifToolVersion": 13.50 - }, - "File": { - "FileName": "license.txt", - "Directory": "../testdata/images", - "FileSize": 116, - "FilePermissions": 100644, - "FileType": "TXT", - "FileTypeExtension": "TXT", - "MIMEType": "text/plain", - "MIMEEncoding": "us-ascii", - "Newlines": "\n", - "LineCount": 1, - "WordCount": 10 - } -}] diff --git a/gen/testdata_exiftool/images/metadata-extractor/license.txt.json b/gen/testdata_exiftool/images/metadata-extractor/license.txt.json deleted file mode 100644 index 22c2dd9..0000000 --- a/gen/testdata_exiftool/images/metadata-extractor/license.txt.json +++ /dev/null @@ -1,19 +0,0 @@ -[{ - "SourceFile": "../testdata/images/metadata-extractor/license.txt", - "ExifTool": { - "ExifToolVersion": 13.50 - }, - "File": { - "FileName": "license.txt", - "Directory": "../testdata/images/metadata-extractor", - "FileSize": 154, - "FilePermissions": 100644, - "FileType": "TXT", - "FileTypeExtension": "TXT", - "MIMEType": "text/plain", - "MIMEEncoding": "us-ascii", - "Newlines": "\n", - "LineCount": 6, - "WordCount": 10 - } -}] diff --git a/gen/testdata_exiftool/images/sample.arw.json b/gen/testdata_exiftool/images/sample.arw.json index 1e94d56..03af49c 100644 --- a/gen/testdata_exiftool/images/sample.arw.json +++ b/gen/testdata_exiftool/images/sample.arw.json @@ -1,12 +1,12 @@ [{ - "SourceFile": "testdata/images/sample.arw", + "SourceFile": "../testdata/images/sample.arw", "ExifTool": { "ExifToolVersion": 13.50 }, "File": { "FileName": "sample.arw", - "Directory": "testdata/images", - "FileSize": 9601024, + "Directory": "../testdata/images", + "FileSize": 102400, "FilePermissions": 100644, "FileType": "ARW", "FileTypeExtension": "ARW", diff --git a/gen/testdata_exiftool/images/sample.cr2.json b/gen/testdata_exiftool/images/sample.cr2.json index 5fd2faf..7b5a8f4 100644 --- a/gen/testdata_exiftool/images/sample.cr2.json +++ b/gen/testdata_exiftool/images/sample.cr2.json @@ -1,12 +1,12 @@ [{ - "SourceFile": "testdata/images/sample.cr2", + "SourceFile": "../testdata/images/sample.cr2", "ExifTool": { "ExifToolVersion": 13.50 }, "File": { "FileName": "sample.cr2", - "Directory": "testdata/images", - "FileSize": 13287537, + "Directory": "../testdata/images", + "FileSize": 51200, "FilePermissions": 100644, "FileType": "CR2", "FileTypeExtension": "CR2", diff --git a/gen/testdata_exiftool/images/sample.dng.json b/gen/testdata_exiftool/images/sample.dng.json index 2f6fcb4..dad29f2 100644 --- a/gen/testdata_exiftool/images/sample.dng.json +++ b/gen/testdata_exiftool/images/sample.dng.json @@ -1,12 +1,12 @@ [{ - "SourceFile": "testdata/images/sample.dng", + "SourceFile": "../testdata/images/sample.dng", "ExifTool": { "ExifToolVersion": 13.50 }, "File": { "FileName": "sample.dng", - "Directory": "testdata/images", - "FileSize": 6611520, + "Directory": "../testdata/images", + "FileSize": 51200, "FilePermissions": 100644, "FileType": "DNG", "FileTypeExtension": "DNG", diff --git a/gen/testdata_exiftool/images/sample.nef.json b/gen/testdata_exiftool/images/sample.nef.json index 5e79e12..968a2e6 100644 --- a/gen/testdata_exiftool/images/sample.nef.json +++ b/gen/testdata_exiftool/images/sample.nef.json @@ -1,12 +1,12 @@ [{ - "SourceFile": "testdata/images/sample.nef", + "SourceFile": "../testdata/images/sample.nef", "ExifTool": { "ExifToolVersion": 13.50 }, "File": { "FileName": "sample.nef", - "Directory": "testdata/images", - "FileSize": 4055474, + "Directory": "../testdata/images", + "FileSize": 76800, "FilePermissions": 100644, "FileType": "NEF", "FileTypeExtension": "NEF", diff --git a/imageformat_string.go b/imageformat_string.go index 4d5f847..dfd3151 100644 --- a/imageformat_string.go +++ b/imageformat_string.go @@ -19,16 +19,16 @@ func _() { _ = x[CR2-8] _ = x[NEF-9] _ = x[ARW-10] + _ = x[PEF-11] } -const _ImageFormat_name = "ImageFormatAutoJPEGTIFFPNGWebPHEIFAVIFDNGCR2NEFARW" +const _ImageFormat_name = "ImageFormatAutoJPEGTIFFPNGWebPHEIFAVIFDNGCR2NEFARWPEF" -var _ImageFormat_index = [...]uint8{0, 15, 19, 23, 26, 30, 34, 38, 41, 44, 47, 50} +var _ImageFormat_index = [...]uint8{0, 15, 19, 23, 26, 30, 34, 38, 41, 44, 47, 50, 53} func (i ImageFormat) String() string { - idx := int(i) - 0 - if i < 0 || idx >= len(_ImageFormat_index)-1 { + if i < 0 || i >= ImageFormat(len(_ImageFormat_index)-1) { return "ImageFormat(" + strconv.FormatInt(int64(i), 10) + ")" } - return _ImageFormat_name[_ImageFormat_index[idx]:_ImageFormat_index[idx+1]] + return _ImageFormat_name[_ImageFormat_index[i]:_ImageFormat_index[i+1]] } diff --git a/imagemeta.go b/imagemeta.go index 283a9a9..cc1e89d 100644 --- a/imagemeta.go +++ b/imagemeta.go @@ -25,7 +25,7 @@ const ( XMP // CONFIG source, which currently the image dimensions encoded in the image. - // Note that this must not be confused with the dimensions stored in EXIF tags. + // Note that this may not be the same as the dimensions stored in EXIF tags. CONFIG ) @@ -60,6 +60,8 @@ const ( NEF // ARW is the Sony ARW RAW image format. ARW + // PEF is the Pentax PEF RAW image format. + PEF ) // ImageConfig contains basic image configuration. @@ -75,7 +77,8 @@ type DecodeResult struct { ImageConfig ImageConfig } -// Decode reads EXIF and IPTC metadata from r and returns a Meta struct. +// Decode reads the metadata and passes it to the provided handlers in the options. +// It returns a DecodeResult containing the image configuration if the CONFIG source was requested. func Decode(opts Options) (result DecodeResult, err error) { var base *baseStreamingDecoder @@ -201,7 +204,7 @@ func Decode(opts Options) (result DecodeResult, err error) { sourceSet = EXIF | XMP | IPTC | CONFIG case HEIF, AVIF: sourceSet = EXIF | XMP | CONFIG - case DNG, CR2, NEF, ARW: + case DNG, CR2, NEF, ARW, PEF: sourceSet = EXIF | XMP | IPTC | CONFIG default: return result, fmt.Errorf("unsupported image format") @@ -243,7 +246,7 @@ func Decode(opts Options) (result DecodeResult, err error) { dec = &imageDecoderPNG{baseStreamingDecoder: base} case HEIF, AVIF: dec = &imageDecoderHEIF{baseStreamingDecoder: base} - case DNG, CR2, NEF, ARW: + case DNG, CR2, NEF, ARW, PEF: dec = &imageDecoderRAW{baseStreamingDecoder: base} } diff --git a/imagemeta_fuzz_test.go b/imagemeta_fuzz_test.go index b0c9f6d..b5c5c3e 100644 --- a/imagemeta_fuzz_test.go +++ b/imagemeta_fuzz_test.go @@ -129,6 +129,16 @@ func FuzzDecodeARW(f *testing.F) { }) } +func FuzzDecodePEF(f *testing.F) { + filenames := []string{"bep/jølstravatnet.pef"} + for _, filename := range filenames { + f.Add(readTestDataFileAll(f, filename)) + } + f.Fuzz(func(t *testing.T, imageBytes []byte) { + fuzzDecodeBytes(t, imageBytes, imagemeta.PEF) + }) +} + func fuzzDecodeBytes(t *testing.T, imageBytes []byte, f imagemeta.ImageFormat) error { r := bytes.NewReader(imageBytes) _, err := imagemeta.Decode(imagemeta.Options{R: r, ImageFormat: f, Sources: imagemeta.EXIF | imagemeta.IPTC | imagemeta.XMP | imagemeta.CONFIG, Timeout: 600 * time.Millisecond}) diff --git a/imagemeta_test.go b/imagemeta_test.go index a834240..eb06bb9 100644 --- a/imagemeta_test.go +++ b/imagemeta_test.go @@ -138,6 +138,12 @@ func TestDecodeRAW(t *testing.T) { c.Assert(err, qt.IsNil) c.Assert(tags.EXIF()["Make"].Value, qt.Equals, "SONY") c.Assert(tags.EXIF()["Model"].Value, qt.Equals, "DSLR-A330") + + // PEF (Pentax K-3 II) + _, tags, err = extractTags(t, "bep/jølstravatnet.pef", imagemeta.EXIF) + c.Assert(err, qt.IsNil) + c.Assert(tags.EXIF()["Make"].Value, qt.Equals, "RICOH IMAGING COMPANY, LTD.") + c.Assert(tags.EXIF()["Model"].Value, qt.Equals, "PENTAX K-3 II") } func TestDecodeRAWConfig(t *testing.T) { @@ -152,7 +158,8 @@ func TestDecodeRAWConfig(t *testing.T) { {"sample.dng", imagemeta.DNG, 2592, 1944}, // DefaultCropSize {"sample.cr2", imagemeta.CR2, 3648, 2736}, // ExifIFD dimensions {"sample.nef", imagemeta.NEF, 2012, 1324}, // SubIFD dimensions - {"sample.arw", imagemeta.ARW, 3880, 2600}, // ExifIFD dimensions + {"sample.arw", imagemeta.ARW, 3880, 2600}, // ExifIFD dimensions + {"bep/jølstravatnet.pef", imagemeta.PEF, 6080, 4032}, // IFD0 dimensions } for _, tt := range tests { @@ -1061,6 +1068,8 @@ func extToFormat(ext string) imagemeta.ImageFormat { return imagemeta.NEF case ".arw": return imagemeta.ARW + case ".pef": + return imagemeta.PEF case ".txt": return -1 default: @@ -1192,7 +1201,7 @@ func withTestDataFile(t testing.TB, fn func(path string, info os.FileInfo, err e return err } - if info.IsDir() || strings.HasPrefix(info.Name(), ".") { + if info.IsDir() || strings.HasPrefix(info.Name(), ".") || strings.HasSuffix(info.Name(), ".txt") { return nil } @@ -1210,6 +1219,7 @@ var goldenSkip = map[string]bool{ "invalid-encoding-usercomment.jpg": true, // The file has an EXIF error that produces a warning in imagemeta. It's tested separately. "sample.cr2": true, // CR2 chains 4 IFDs; exiftool reports IFD3 StripByteCounts which we don't reach. "sample.arw": true, // IFD0 0x0201/0x0202 are preview offsets; exiftool renames to PreviewImageStart/Length so values differ. + "bep/jølstravatnet.pef": true, // GPSProcessingMethod includes encoding prefix; CONFIG dimensions differ (identify uses libraw active area). } var isSpaceDelimitedFloatRe = regexp.MustCompile(`^(\d+\.\d+)( \d+\.?\d*)+$`) @@ -1431,6 +1441,7 @@ func BenchmarkDecode(b *testing.B) { {"cr2", imagemeta.CR2, "sample.cr2"}, {"nef", imagemeta.NEF, "sample.nef"}, {"arw", imagemeta.ARW, "sample.arw"}, + {"pef", imagemeta.PEF, "bep/jølstravatnet.pef"}, } { imageFormat = tt.format runBenchmarkWithFile(b, "exif/"+tt.name, tt.format, tt.filename, func(r io.ReadSeeker) error { diff --git a/testdata/fuzz/FuzzDecodePEF/284853a7f4021859 b/testdata/fuzz/FuzzDecodePEF/284853a7f4021859 new file mode 100644 index 0000000..8a12ed2 --- /dev/null +++ b/testdata/fuzz/FuzzDecodePEF/284853a7f4021859 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("II*\x00\b\x00\x00\x000\x00\x01\x02\f\x00\x00\x00\x00\x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000") diff --git "a/testdata/images/bep/j\303\270lstravatnet.pef" "b/testdata/images/bep/j\303\270lstravatnet.pef" new file mode 100644 index 0000000000000000000000000000000000000000..fe36f5e5460c5fe5e06b33eff5f0611256db90f2 GIT binary patch literal 159648 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 literal 0 HcmV?d00001 From 5eca4500f0a2af0c8f5d713d2d111868b6b3236e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 27 Feb 2026 12:29:55 +0100 Subject: [PATCH 2/2] Fix RAW decoder fuzzer errors --- imagemeta_test.go | 8 ++++---- metadecoder_exif.go | 9 +++++++-- testdata/fuzz/FuzzDecodeDNG/85bf2db7be71f22e | 2 ++ 3 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 testdata/fuzz/FuzzDecodeDNG/85bf2db7be71f22e diff --git a/imagemeta_test.go b/imagemeta_test.go index eb06bb9..68962ba 100644 --- a/imagemeta_test.go +++ b/imagemeta_test.go @@ -155,10 +155,10 @@ func TestDecodeRAWConfig(t *testing.T) { width int height int }{ - {"sample.dng", imagemeta.DNG, 2592, 1944}, // DefaultCropSize - {"sample.cr2", imagemeta.CR2, 3648, 2736}, // ExifIFD dimensions - {"sample.nef", imagemeta.NEF, 2012, 1324}, // SubIFD dimensions - {"sample.arw", imagemeta.ARW, 3880, 2600}, // ExifIFD dimensions + {"sample.dng", imagemeta.DNG, 2592, 1944}, // DefaultCropSize + {"sample.cr2", imagemeta.CR2, 3648, 2736}, // ExifIFD dimensions + {"sample.nef", imagemeta.NEF, 2012, 1324}, // SubIFD dimensions + {"sample.arw", imagemeta.ARW, 3880, 2600}, // ExifIFD dimensions {"bep/jølstravatnet.pef", imagemeta.PEF, 6080, 4032}, // IFD0 dimensions } diff --git a/metadecoder_exif.go b/metadecoder_exif.go index 9f02075..472f08c 100644 --- a/metadecoder_exif.go +++ b/metadecoder_exif.go @@ -145,7 +145,10 @@ var ( "BlackLevelRepeatDim": exifConverters.convertNumbersToSpaceLimited, "MaskedAreas": exifConverters.convertNumbersToSpaceLimited, "CFAPattern": func(ctx valueConverterContext, v any) any { - b := v.([]byte) + b, ok := typeAssert[[]byte](ctx, v) + if !ok { + return v + } horizontalRepeat := ctx.s.byteOrder.Uint16(b[:2]) verticalRepeat := ctx.s.byteOrder.Uint16(b[2:]) repeatLen := int(horizontalRepeat) * int(verticalRepeat) @@ -508,7 +511,9 @@ func (e *metaDecoderEXIF) decodeTag(namespace string) error { if tagName == tagNameThumbnailOffset { // When set, thumbnailOffset is set to the offset of the EXIF data in the original file. - val = val.(uint32) + uint32(e.readerOffset+e.thumbnailOffset) + if v, ok := typeAssert[uint32](e.valueConverterCtx, val); ok { + val = v + uint32(e.readerOffset+e.thumbnailOffset) + } } tagInfo.Value = val diff --git a/testdata/fuzz/FuzzDecodeDNG/85bf2db7be71f22e b/testdata/fuzz/FuzzDecodeDNG/85bf2db7be71f22e new file mode 100644 index 0000000..5b60f97 --- /dev/null +++ b/testdata/fuzz/FuzzDecodeDNG/85bf2db7be71f22e @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("II*\x00\b\x00\x00\x000\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000i\x87\x04\x00\x01\x00\x00\x00\x84\x02\x00\x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000\x02\xa3\x05\x00\x01\x00\x00\x00\x01\x04\x00\x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")