class EmbedXMP::JPEG
JPEG
images
Constants
- JPEG_AP1
- JPEG_EXF
- JPEG_IMG
- JPEG_XMP
Public Instance Methods
join_sidecar(sidecar_file, xpacked: false)
click to toggle source
Join an XMP
sidecar file into the image file.
# File lib/embed_xmp/jpeg.rb, line 17 def join_sidecar(sidecar_file, xpacked: false) check_file_markers remove_xmp sidecar = read_io_or_string(sidecar_file) xmp_chunk = create_xmp_segment(sidecar, xpacked) insert_into_file(find_xmp_insertion_offset, xmp_chunk) end
remove_xmp()
click to toggle source
# File lib/embed_xmp/jpeg.rb, line 27 def remove_xmp offset = JFIF_SOI.length while offset < @image_data.length marker, length, = segment(offset) break if [JPEG_IMG, JFIF_END, nil].include?(marker) if segment_is_app1_xmp(offset, marker) remove_segment(offset) next end offset += length end end
Private Instance Methods
create_xmp_segment(xmp, xpacked)
click to toggle source
# File lib/embed_xmp/jpeg.rb, line 72 def create_xmp_segment(xmp, xpacked) data = JPEG_XMP + EmbedXMP::XMP .new(xmp, writable: true, xpacked: xpacked) .to_s.gsub("\0", ' ') new_segment(JPEG_AP1, data.b) end
find_xmp_insertion_offset()
click to toggle source
# File lib/embed_xmp/jpeg.rb, line 45 def find_xmp_insertion_offset offset = JFIF_SOI.length cursor = offset while offset < @image_data.length marker, length, = segment(offset) break if [JPEG_IMG, JFIF_END, nil].include?(marker) if segment_is_app1_exif(offset, marker) cursor = offset + length break end offset += length end cursor end
segment_is_app1_exif(off, seg)
click to toggle source
# File lib/embed_xmp/jpeg.rb, line 64 def segment_is_app1_exif(off, seg) JPEG_AP1 == seg && @image_data[off + 4, JPEG_EXF.length].b == JPEG_EXF end
segment_is_app1_xmp(off, seg)
click to toggle source
# File lib/embed_xmp/jpeg.rb, line 68 def segment_is_app1_xmp(off, seg) JPEG_AP1 == seg && @image_data[off + 4, JPEG_XMP.length + 4].b == JPEG_XMP end