require 'file_data/file_types/jpeg' require_relative 'exif_stream' module FileData # Retrieves an ExifStream from a jpeg stream class ExifJpeg APP1_BYTES = [255, 225].freeze EXIF_ID = "Exif\0\0".bytes.to_a.freeze def initialize(stream) @stream = stream end def exif ExifStream.new(@stream) if seek_exif end def seek_exif Jpeg.new(@stream).each_section .select { |marker, _| exif_section?(marker) } .first end def exif_section?(marker) marker == APP1_BYTES && @stream.each_byte.take(EXIF_ID.size) == EXIF_ID end end end