rewriteWithAlternateAppSegments static method
dynamic
rewriteWithAlternateAppSegments({})
Writes out a JPEG but uses the APP segments from another JPEG Useful in preserving EXIF data
Implementation
static rewriteWithAlternateAppSegments({
required Uint8List jpegToWrite,
required Uint8List jpegWithAppSegmentsToUse,
required EventSink<List<int>> writer,
}) {
var segments = readHeaders(jpegToWrite);
var appSegments =
readHeaders(jpegWithAppSegmentsToUse).where((s) => s.isApp);
void writeSegment(JpegSegment seg) {
writer.add(seg.data.buffer
.asUint8List(seg.data.offsetInBytes, seg.data.lengthInBytes));
}
for (var seg in segments) {
if (seg.isApp) {
// skip APP segments in source image
continue;
}
if (seg.isStartOfScan) {
// write the rest of the file
writer.add(seg.data.buffer.asUint8List(seg.data.offsetInBytes));
break;
}
writeSegment(seg);
if (seg.shortName == "SOI") {
// write APP segments after SOI,
// as per the JFIF/EXIF standards
appSegments.forEach(writeSegment);
}
}
}