defmodule Exiffer.Binary.Rewrite do @moduledoc """ Rewrite an image file, adding and removing arbitrary metadata """ alias Exiffer.Binary.Buffer alias Exiffer.{GPS, JPEG, Rewrite} def set_gps(source, %{longitude: longitude, latitude: latitude, altitude: altitude}) when is_binary(source) do input = Buffer.new(source) gps = %GPS{longitude: longitude, latitude: latitude, altitude: altitude} {:ok, metadata, input} = Rewrite.set_gps(input, gps) header_binary = Exiffer.Serialize.binary(metadata) remainder = input.size - input.position <<_before::binary-size(input.position), rest::binary-size(remainder)>> = input.original << JPEG.magic()::binary, header_binary::binary, rest::binary >> end end