-
Notifications
You must be signed in to change notification settings - Fork 13
Home
dragon66 edited this page Jul 1, 2015
·
8 revisions
-
Here I am going to show some an examples on how to use "pixymeta-android" library: Note: the examples will not work out of the box with Android application. They just demonstrate how the library can be used generally.
public class TestPixyMetaAndroid { // Obtain a logger instance private static final Logger LOGGER = LoggerFactory.getLogger(TestPixyMetaAndroid.class); public static void main(String[] args) throws IOException { Map<MetadataType, Metadata> metadataMap = Metadata.readMetadata(args[0]); LOGGER.info("Start of metadata information:"); LOGGER.info("Total number of metadata entries: {}", metadataMap.size()); int i = 0; for(Map.Entry<MetadataType, Metadata> entry : metadataMap.entrySet()) { LOGGER.info("Metadata entry {} - {}", i, entry.getKey()); entry.getValue().showMetadata(); i++; LOGGER.info("-----------------------------------------"); } LOGGER.info("End of metadata information."); FileInputStream fin = null; FileOutputStream fout = null; if(metadataMap.get(MetadataType.XMP) != null) { XMP xmp = (XMP)metadataMap.get(MetadataType.XMP); Document xmpDoc = xmp.getXmpDocument(); fin = new FileInputStream("images/1.jpg"); fout = new FileOutputStream("1-xmp-inserted.jpg"); if(!xmp.hasExtendedXmp()) Metadata.insertXMP(fin, fout, XMLUtils.serializeToString(xmpDoc.getDocumentElement(), "UTF-8")); else { Document extendedXmpDoc = xmp.getExtendedXmpDocument(); JPEGMeta.insertXMP(fin, fout, XMLUtils.serializeToString(xmpDoc.getDocumentElement(), "UTF-8"), XMLUtils.serializeToString(extendedXmpDoc)); } fin.close(); fout.close(); } Metadata.extractThumbnails("images/iptc-envelope.tif", "iptc-envelope"); fin = new FileInputStream("images/iptc-envelope.tif"); fout = new FileOutputStream("iptc-envelope-iptc-inserted.tif"); Metadata.insertIPTC(fin, fout, createIPTCDataSet(), true); fin.close(); fout.close(); fin = new FileInputStream("images/wizard.jpg"); fout = new FileOutputStream("wizard-iptc-inserted.jpg"); Metadata.insertIPTC(fin, fout, createIPTCDataSet(), true); fin.close(); fout.close(); fin = new FileInputStream("images/1.jpg"); fout = new FileOutputStream("1-irbthumbnail-inserted.jpg"); Metadata.insertIRBThumbnail(fin, fout, createThumbnail("images/1.jpg")); fin.close(); fout.close(); fin = new FileInputStream("images/f1.tif"); fout = new FileOutputStream("f1-irbthumbnail-inserted.tif"); Metadata.insertIRBThumbnail(fin, fout, createThumbnail("images/f1.tif")); fin.close(); fout.close(); fin = new FileInputStream("images/exif.tif"); fout = new FileOutputStream("exif-exif-inserted.tif"); Metadata.insertExif(fin, fout, populateExif(TiffExif.class), true); fin.close(); fout.close(); fin = new FileInputStream("images/12.jpg"); fout = new FileOutputStream("12-exif-inserted.jpg"); Metadata.insertExif(fin, fout, populateExif(JpegExif.class), true); fin.close(); fout.close(); fin = new FileInputStream("images/table.jpg"); fout = new FileOutputStream("table-metadata-removed.jpg"); Metadata.removeMetadata(fin, fout, MetadataType.IPTC, MetadataType.PHOTOSHOP, MetadataType.ICC_PROFILE, MetadataType.XMP, MetadataType.EXIF); fin.close(); fout.close(); fin = new FileInputStream("images/12.jpg"); fout = new FileOutputStream("12-photoshop-iptc-inserted.jpg"); Metadata.insertIRB(fin, fout, createPhotoshopIPTC(), true); fin.close(); fout.close(); fin = new FileInputStream("images/table.jpg"); JPEGMeta.extractDepthMap(fin, "table"); fin.close(); } private static List<IPTCDataSet> createIPTCDataSet() { List<IPTCDataSet> iptcs = new ArrayList<IPTCDataSet>(); iptcs.add(new IPTCDataSet(IPTCRecord.APPLICATION, IPTCApplicationTag.COPYRIGHT_NOTICE.getTag(), "Copyright 2014-2015, yuwen_66@yahoo.com")); iptcs.add(new IPTCDataSet(IPTCApplicationTag.CATEGORY.getTag(), "ICAFE")); iptcs.add(new IPTCDataSet(IPTCApplicationTag.KEY_WORDS.getTag(), "Welcome 'icafe' user!")); return iptcs; } private static List<_8BIM> createPhotoshopIPTC() { IPTC_NAA iptc = new IPTC_NAA(); iptc.addDataSet(new IPTCDataSet(IPTCRecord.APPLICATION, IPTCApplicationTag.COPYRIGHT_NOTICE.getTag(), "Copyright 2014-2015, yuwen_66@yahoo.com")); iptc.addDataSet(new IPTCDataSet(IPTCApplicationTag.KEY_WORDS.getTag(), "Welcome 'icafe' user!")); iptc.addDataSet(new IPTCDataSet(IPTCApplicationTag.CATEGORY.getTag(), "ICAFE")); return new ArrayList<_8BIM>(Arrays.asList(iptc)); } private static Bitmap createThumbnail(String filePath) throws IOException { FileInputStream fin = null; try { fin = new FileInputStream(filePath); } catch (FileNotFoundException e) { e.printStackTrace(); } Bitmap thumbnail = MetadataUtils.createThumbnail(fin); fin.close(); return thumbnail; } // This method is for testing only private static Exif populateExif(Class<?> exifClass) throws IOException { // Create an EXIF wrapper Exif exif = exifClass == (TiffExif.class)?new TiffExif() : new JpegExif(); exif.addImageField(TiffTag.WINDOWS_XP_AUTHOR, FieldType.WINDOWSXP, "Author"); exif.addImageField(TiffTag.WINDOWS_XP_KEYWORDS, FieldType.WINDOWSXP, "Copyright;Author"); DateFormat formatter = new SimpleDateFormat("yyyy:MM:dd HH:mm:ss"); exif.addExifField(ExifTag.EXPOSURE_TIME, FieldType.RATIONAL, new int[] {10, 600}); exif.addExifField(ExifTag.FNUMBER, FieldType.RATIONAL, new int[] {49, 10}); exif.addExifField(ExifTag.ISO_SPEED_RATINGS, FieldType.SHORT, new short[]{273}); //All four bytes should be interpreted as ASCII values - represents [0220] - new byte[]{48, 50, 50, 48} exif.addExifField(ExifTag.EXIF_VERSION, FieldType.UNDEFINED, "0220".getBytes()); exif.addExifField(ExifTag.DATE_TIME_ORIGINAL, FieldType.ASCII, formatter.format(new Date())); exif.addExifField(ExifTag.DATE_TIME_DIGITIZED, FieldType.ASCII, formatter.format(new Date())); exif.addExifField(ExifTag.FOCAL_LENGTH, FieldType.RATIONAL, new int[] {240, 10}); // Insert ThumbNailIFD // Since we don't provide thumbnail image, it will be created later from the input stream exif.setThumbnailRequired(true); return exif; } }