public void updateExifMetadataLossless(final byte[] src, final OutputStream os, final TiffOutputSet outputSet)
            throws ImagingException, IOException, ImagingException {
        final ByteSource byteSource = ByteSource.array(src);
        updateExifMetadataLossless(byteSource, os, outputSet);
    }
Reads a JPEG image, replaces the EXIF metadata and writes the result to a stream.

<p>
Note that this uses the "Lossless" approach - in order to preserve data embedded in the EXIF segment that it can't parse (such as Maker Notes), this
algorithm avoids overwriting any part of the original segment that it couldn't parse. This can cause the EXIF segment to grow with each update, which is
a serious issue, since all EXIF data must fit in a single APP1 segment of the JPEG image.
</p>

@param src       Byte array containing JPEG image data.
@param os        OutputStream to write the image to.
@param outputSet TiffOutputSet containing the EXIF data to write.
@throws ImagingException if it fails to read the JFIF segments
@throws IOException      if it fails to read the image data
@throws ImagingException if it fails to write the updated data
src/main/java/org/apache/commons/imaging/formats/jpeg/exif/ExifRewriter.java