Java library to determine the offsets and lengths of metadata segments in a JPEG file. This library is intended to be small and not pull in a lot of external dependencies. Use it if you want to parse JPEG metadata yourself but don't want to find JPEG metadata yourself.
<dependency>
<groupId>com.github.mike10004</groupId>
<artifactId>jpeg-segment-finder</artifactId>
<version>0.5</version>
</dependency>
Find IPTC segments marked by byte 0xED:
JpegSegmentFinder finder = new JpegSegmentFinder();
List<JpegSegmentSpec> segments;
try (InputStream in = new FileInputStream(jpegFile)) {
segments = finder.findSegments(in, Collections.singleton((byte) 0xED));
}
JpegSegmentSpec iptc = segments.get(0);
byte[] jpegBytes = Files.readAllBytes(jpegFile.toPath());
int from = (int) iptc.contentOffset;
int to = from + (int) iptc.contentLength;
byte[] segmentBytes = Arrays.copyOfRange(jpegBytes, from, to);
// ...analyze those segments bytes as you please...
Thank you to Drew Noakes for metadata-extractor. This library is a hack on some classes in that library. The test image is from that project's test resources.