class FormatParser::TIFFParser
Constants
- ARW_MIME_TYPE
- HEADER_BYTES
- MAGIC_BE
- MAGIC_LE
- TIFF_MIME_TYPE
Public Instance Methods
arw?(exif_data)
click to toggle source
Similar to how exiftool determines the image type as ARW, we are implementing a check here github.com/exiftool/exiftool/blob/e969456372fbaf4b980fea8bb094d71033ac8bf7/lib/Image/ExifTool/Exif.pm#L929
# File lib/parsers/tiff_parser.rb, line 57 def arw?(exif_data) exif_data.compression == 6 && exif_data.new_subfile_type == 1 && exif_data.make == 'SONY' end
call(io)
click to toggle source
# File lib/parsers/tiff_parser.rb, line 15 def call(io) io = FormatParser::IOConstraint.new(io) return unless HEADER_BYTES.include?(safe_read(io, 4)) # Skip over the offset of the IFD, # EXIFR will re-read it anyway io.seek(io.pos + 2) return if cr2?(io) # The TIFF scanner in EXIFR is plenty good enough, # so why don't we use it? It does all the right skips # in all the right places. exif_data = exif_from_tiff_io(io) return unless exif_data w = exif_data.width || exif_data.pixel_x_dimension h = exif_data.height || exif_data.pixel_y_dimension format = arw?(exif_data) ? :arw : :tif mime_type = arw?(exif_data) ? ARW_MIME_TYPE : TIFF_MIME_TYPE FormatParser::Image.new( format: format, width_px: w, height_px: h, display_width_px: exif_data.rotated? ? h : w, display_height_px: exif_data.rotated? ? w : h, orientation: exif_data.orientation_sym, intrinsics: {exif: exif_data}, content_type: mime_type, ) rescue EXIFR::MalformedTIFF nil end
cr2?(io)
click to toggle source
# File lib/parsers/tiff_parser.rb, line 50 def cr2?(io) io.seek(8) safe_read(io, 2) == 'CR' end
likely_match?(filename)
click to toggle source
# File lib/parsers/tiff_parser.rb, line 11 def likely_match?(filename) filename =~ /\.tiff?$/i end