diff --git a/exif.go b/exif.go index bfefa24..f0001f9 100644 --- a/exif.go +++ b/exif.go @@ -15,7 +15,7 @@ import ( const ( // ExifAddressableAreaStart is the absolute offset in the file that all // offsets are relative to. - ExifAddressableAreaStart = uint32(0x6) + ExifAddressableAreaStart = uint32(0x0) // ExifDefaultFirstIfdOffset is essentially the number of bytes in addition // to `ExifAddressableAreaStart` that you have to move in order to escape @@ -29,8 +29,6 @@ const ( var ( exifLogger = log.NewLogger("exif.exif") - ExifHeaderPrefixBytes = []byte("Exif\000\000") - // EncodeDefaultByteOrder is the default byte-order for encoding operations. EncodeDefaultByteOrder = binary.BigEndian @@ -135,16 +133,12 @@ func ParseExifHeader(data []byte) (eh ExifHeader, err error) { } }() - if bytes.Compare(data[:6], ExifHeaderPrefixBytes) != 0 { - log.Panic(ErrNotExif) - } - // Good reference: // // CIPA DC-008-2016; JEITA CP-3451D // -> http://www.cipa.jp/std/documents/e/DC-008-Translation-2016-E.pdf - byteOrderBytes := [2]byte { data[6], data[7] } + byteOrderBytes := [2]byte { data[0], data[1] } byteOrder, found := ByteOrderLookup[byteOrderBytes] if found == false { @@ -152,18 +146,13 @@ func ParseExifHeader(data []byte) (eh ExifHeader, err error) { log.Panic(ErrNotExif) } - fixedBytes := [2]byte { data[8], data[9] } + fixedBytes := [2]byte { data[2], data[3] } if fixedBytes != ExifFixedBytes { exifLogger.Warningf(nil, "EXIF header fixed-bytes should be 0x002a but are: [%v]", fixedBytes) log.Panic(ErrNotExif) } - firstIfdOffset := uint32(0) - if byteOrder == binary.BigEndian { - firstIfdOffset = binary.BigEndian.Uint32(data[10:14]) - } else { - firstIfdOffset = binary.LittleEndian.Uint32(data[10:14]) - } + firstIfdOffset := byteOrder.Uint32(data[4:8]) eh = ExifHeader{ ByteOrder: byteOrder, @@ -221,10 +210,7 @@ func BuildExifHeader(byteOrder binary.ByteOrder, firstIfdOffset uint32) (headerB b := new(bytes.Buffer) - _, err = b.Write(ExifHeaderPrefixBytes) - log.PanicIf(err) - -// NOTE: This is the point in the data that all offsets are relative to. + // This is the point in the data that all offsets are relative to. boBytes := ByteOrderLookupR[byteOrder] _, err = b.WriteString(string(boBytes[:])) log.PanicIf(err) diff --git a/test_common.go b/test_common.go index 4aa310b..4e6ba09 100644 --- a/test_common.go +++ b/test_common.go @@ -30,11 +30,7 @@ func init() { filepath := path.Join(assetsPath, "NDM_8901.jpg.exif") - exifData, err := ioutil.ReadFile(filepath) + var err error + testExifData, err = ioutil.ReadFile(filepath) log.PanicIf(err) - -// TODO(dustin): !! We're currently built to expect the JPEG EXIF header-prefix, but our test-data doesn't have that.So, artificially prefix it, for now. - testExifData = make([]byte, len(exifData) + len(ExifHeaderPrefixBytes)) - copy(testExifData[0:], ExifHeaderPrefixBytes) - copy(testExifData[len(ExifHeaderPrefixBytes):], exifData) }