JpegParser extends AbstractParser { public void parse( InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException { TemporaryResources tmp = new TemporaryResources(); try { TikaInputStream tis = TikaInputStream.get(stream, tmp); new ImageMetadataExtractor(metadata).parseJpeg(tis.getFile()); new JempboxExtractor(metadata).parse(tis); } finally { tmp.dispose(); } XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata); xhtml.startDocument(); xhtml.endDocument(); }  Set<MediaType> getSupportedTypes(ParseContext context); void parse(
            InputStream stream, ContentHandler handler,
            Metadata metadata, ParseContext context);  }
@Test public void testJPEG() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_EXIF.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("3888", metadata.get(Metadata.IMAGE_WIDTH)); assertEquals("2592", metadata.get(Metadata.IMAGE_LENGTH)); assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE)); assertEquals(null, metadata.get(Metadata.SAMPLES_PER_PIXEL)); assertEquals("6.25E-4", metadata.get(Metadata.EXPOSURE_TIME)); assertEquals("5.6", metadata.get(Metadata.F_NUMBER)); assertEquals("false", metadata.get(Metadata.FLASH_FIRED)); assertEquals("194.0", metadata.get(Metadata.FOCAL_LENGTH)); assertEquals("400", metadata.get(Metadata.ISO_SPEED_RATINGS)); assertEquals("Canon", metadata.get(Metadata.EQUIPMENT_MAKE)); assertEquals("Canon EOS 40D", metadata.get(Metadata.EQUIPMENT_MODEL)); assertEquals("Adobe Photoshop CS3 Macintosh", metadata.get(Metadata.SOFTWARE)); assertEquals(null, metadata.get(Metadata.ORIENTATION)); assertEquals("240.0", metadata.get(Metadata.RESOLUTION_HORIZONTAL)); assertEquals("240.0", metadata.get(Metadata.RESOLUTION_VERTICAL)); assertEquals("Inch", metadata.get(Metadata.RESOLUTION_UNIT)); assertEquals("Canon EOS 40D", metadata.get("Exif IFD0:Model")); assertEquals("2009-10-02T23:02:49", metadata.get(Metadata.LAST_MODIFIED)); assertEquals("Date/Time Original for when the photo was taken, unspecified time zone", "2009-08-11T09:09:45", metadata.get(TikaCoreProperties.CREATED)); List<String> keywords = Arrays.asList(metadata.getValues(TikaCoreProperties.SUBJECT)); assertTrue("'canon-55-250' expected in " + keywords, keywords.contains("canon-55-250")); assertTrue("'moscow-birds' expected in " + keywords, keywords.contains("moscow-birds")); assertTrue("'serbor' expected in " + keywords, keywords.contains("serbor")); assertFalse(keywords.contains("canon-55-250 moscow-birds serbor")); }
@Test public void testJPEGGeo() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_GEO.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("12.54321", metadata.get(Metadata.LATITUDE)); assertEquals("-54.1234", metadata.get(Metadata.LONGITUDE)); assertEquals("3888", metadata.get(Metadata.IMAGE_WIDTH)); assertEquals("2592", metadata.get(Metadata.IMAGE_LENGTH)); assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE)); assertEquals(null, metadata.get(Metadata.SAMPLES_PER_PIXEL)); assertEquals("6.25E-4", metadata.get(Metadata.EXPOSURE_TIME)); assertEquals("5.6", metadata.get(Metadata.F_NUMBER)); assertEquals("false", metadata.get(Metadata.FLASH_FIRED)); assertEquals("194.0", metadata.get(Metadata.FOCAL_LENGTH)); assertEquals("400", metadata.get(Metadata.ISO_SPEED_RATINGS)); assertEquals("Canon", metadata.get(Metadata.EQUIPMENT_MAKE)); assertEquals("Canon EOS 40D", metadata.get(Metadata.EQUIPMENT_MODEL)); assertEquals("Adobe Photoshop CS3 Macintosh", metadata.get(Metadata.SOFTWARE)); assertEquals(null, metadata.get(Metadata.ORIENTATION)); assertEquals("240.0", metadata.get(Metadata.RESOLUTION_HORIZONTAL)); assertEquals("240.0", metadata.get(Metadata.RESOLUTION_VERTICAL)); assertEquals("Inch", metadata.get(Metadata.RESOLUTION_UNIT)); assertEquals("Date/Time Original for when the photo was taken, unspecified time zone", "2009-08-11T09:09:45", metadata.get(TikaCoreProperties.CREATED)); assertEquals("This image has different Date/Time than Date/Time Original, so it is probably modification date", "2009-10-02T23:02:49", metadata.get(Metadata.LAST_MODIFIED)); assertEquals("Date/Time Original should be stored in EXIF field too", "2009-08-11T09:09:45", metadata.get(TIFF.ORIGINAL_DATE)); assertEquals("canon-55-250", metadata.getValues(TikaCoreProperties.SUBJECT)[0]); }
@Test public void testJPEGGeo2() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_GEO_2.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("51.575762", metadata.get(Metadata.LATITUDE)); assertEquals("-1.567886", metadata.get(Metadata.LONGITUDE)); }
@Test public void testJPEGTitleAndDescription() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_commented.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("Tosteberga \u00C4ngar", metadata.get(TikaCoreProperties.TITLE)); assertEquals("Bird site in north eastern Sk\u00E5ne, Sweden.\n(new line)", metadata.get(TikaCoreProperties.DESCRIPTION)); assertEquals("Some Tourist", metadata.get(TikaCoreProperties.CREATOR)); List<String> keywords = Arrays.asList(metadata.getValues(TikaCoreProperties.SUBJECT)); assertTrue(keywords.contains("coast")); assertTrue(keywords.contains("bird watching")); assertEquals("103", metadata.get(Metadata.IMAGE_WIDTH)); assertEquals("77", metadata.get(Metadata.IMAGE_LENGTH)); assertEquals("8", metadata.get(Metadata.BITS_PER_SAMPLE)); assertEquals(null, metadata.get(Metadata.SAMPLES_PER_PIXEL)); assertEquals("1.0E-6", metadata.get(Metadata.EXPOSURE_TIME)); assertEquals("2.8", metadata.get(Metadata.F_NUMBER)); assertEquals("4.6", metadata.get(Metadata.FOCAL_LENGTH)); assertEquals("114", metadata.get(Metadata.ISO_SPEED_RATINGS)); assertEquals(null, metadata.get(Metadata.EQUIPMENT_MAKE)); assertEquals(null, metadata.get(Metadata.EQUIPMENT_MODEL)); assertEquals(null, metadata.get(Metadata.SOFTWARE)); assertEquals("1", metadata.get(Metadata.ORIENTATION)); assertEquals("300.0", metadata.get(Metadata.RESOLUTION_HORIZONTAL)); assertEquals("300.0", metadata.get(Metadata.RESOLUTION_VERTICAL)); assertEquals("Inch", metadata.get(Metadata.RESOLUTION_UNIT)); assertEquals("IEC", metadata.get("ICC:Device manufacturer").trim()); assertNull(metadata.get("Device manufacturer")); }
@Test public void testJPEGTitleAndDescriptionPhotoshop() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_commented_pspcs2mac.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("Tosteberga \u00C4ngar", metadata.get(TikaCoreProperties.TITLE)); assertEquals("Bird site in north eastern Sk\u00E5ne, Sweden.\n(new line)", metadata.get(TikaCoreProperties.DESCRIPTION)); assertEquals("Some Tourist", metadata.get(TikaCoreProperties.CREATOR)); List<String> keywords = Arrays.asList(metadata.getValues(TikaCoreProperties.SUBJECT)); assertTrue("got " + keywords, keywords.contains("bird watching")); }
@Test public void testJPEGTitleAndDescriptionXnviewmp() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_commented_xnviewmp026.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("Bird site in north eastern Sk\u00E5ne, Sweden.\n(new line)", metadata.get(TikaCoreProperties.DESCRIPTION)); String[] subject = metadata.getValues(TikaCoreProperties.SUBJECT); List<String> keywords = Arrays.asList(subject); assertTrue("'coast'" + " not in " + keywords, keywords.contains("coast")); assertTrue("'nature reserve'" + " not in " + keywords, keywords.contains("nature reserve")); }
@Test public void testJPEGoddTagComponent() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_oddTagComponent.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals(null, metadata.get(TikaCoreProperties.TITLE)); assertEquals(null, metadata.get(TikaCoreProperties.DESCRIPTION)); assertEquals("251", metadata.get(Metadata.IMAGE_WIDTH)); assertEquals("384", metadata.get(Metadata.IMAGE_LENGTH)); }
@Test public void testJPEGEmptyEXIFDateTime() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_EXIF_emptyDateTime.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("300.0", metadata.get(TIFF.RESOLUTION_HORIZONTAL)); assertEquals("300.0", metadata.get(TIFF.RESOLUTION_VERTICAL)); }
@Test public void testJPEGXMPMM() throws Exception { Metadata metadata = new Metadata(); metadata.set(Metadata.CONTENT_TYPE, "image/jpeg"); try (InputStream stream = getClass().getResourceAsStream("/test-documents/testJPEG_EXIF_emptyDateTime.jpg")) { parser.parse(stream, new DefaultHandler(), metadata, new ParseContext()); } assertEquals("xmp.did:49E997348D4911E1AB62EBF9B374B234", metadata.get(XMPMM.DOCUMENTID)); }