File imageFile = (File) images.get(i);
Debug.debug("imageFile", imageFile);
Debug.debug();
ByteSource byteSource = new ByteSourceFile(imageFile);
// Debug.debug("Segments:");
// new JpegUtils().dumpJFIF(byteSource);
Map params = new HashMap();
boolean ignoreImageData = isPhilHarveyTestImage(imageFile);
params
.put(PARAM_KEY_READ_THUMBNAILS, new Boolean(
!ignoreImageData));
// params.put(PARAM_KEY_VERBOSE, Boolean.TRUE);
// params.put(PARAM_KEY_VERBOSE, Boolean.TRUE);
JpegPhotoshopMetadata metadata = new JpegImageParser()
.getPhotoshopMetadata(byteSource, params);
assertNotNull(metadata);
metadata.dump();
File noIptcFile = createTempFile(imageFile.getName()
+ ".iptc.remove.", ".jpg");
{
// test remove
OutputStream os = null;
try
{
os = new FileOutputStream(noIptcFile);
os = new BufferedOutputStream(os);
new JpegIptcRewriter().removeIPTC(byteSource, os);
} finally
{
if (os != null) {
os.close();
}
os = null;
}
// Debug.debug("Source Segments:");
// new JpegUtils().dumpJFIF(new ByteSourceFile(noIptcFile));
JpegPhotoshopMetadata outMetadata = new JpegImageParser()
.getPhotoshopMetadata(new ByteSourceFile(noIptcFile),
params);
assertTrue(outMetadata == null
|| outMetadata.getItems().size() == 0);
}
{
// test no-change update
List newBlocks = metadata.photoshopApp13Data.getNonIptcBlocks();
List oldRecords = metadata.photoshopApp13Data.getRecords();
List newRecords = new ArrayList();
for (int j = 0; j < oldRecords.size(); j++)
{
IPTCRecord record = (IPTCRecord) oldRecords.get(j);
if (record.iptcType.type != IPTCConstants.IPTC_TYPE_CITY.type
&& record.iptcType.type != IPTCConstants.IPTC_TYPE_CREDIT.type)
newRecords.add(record);
}
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CITY,
"Albany, NY"));
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CREDIT,
"William Sorensen"));
PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
newBlocks);
File updated = createTempFile(imageFile.getName()
+ ".iptc.update.", ".jpg");
OutputStream os = null;
try
{
os = new FileOutputStream(updated);
os = new BufferedOutputStream(os);
new JpegIptcRewriter().writeIPTC(byteSource, os, newData);
} finally
{
if (os != null) {
os.close();
}
os = null;
}
// Debug.debug("Source Segments:");
// new JpegUtils().dumpJFIF(new ByteSourceFile(updated));
ByteSource updateByteSource = new ByteSourceFile(updated);
JpegPhotoshopMetadata outMetadata = new JpegImageParser()
.getPhotoshopMetadata(updateByteSource, params);
// Debug.debug("outMetadata", outMetadata.toString());
// Debug.debug("hasIptcSegment", new JpegImageParser()
// .hasIptcSegment(updateByteSource));
assertNotNull(outMetadata);
assertTrue(outMetadata.getItems().size() == newRecords.size());
// assertEquals(metadata.toString(), outMetadata.toString());
}
{
// test update
List newBlocks = metadata.photoshopApp13Data.getNonIptcBlocks();
List newRecords = new ArrayList();
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CITY,
"Albany, NY"));
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CREDIT,
"William Sorensen"));
PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
newBlocks);
File updated = createTempFile(imageFile.getName()
+ ".iptc.update.", ".jpg");
OutputStream os = null;
try
{
os = new FileOutputStream(updated);
os = new BufferedOutputStream(os);
new JpegIptcRewriter().writeIPTC(byteSource, os, newData);
} finally
{
if (os != null) {
os.close();
}
os = null;
}
// Debug.debug("Source Segments:");
// new JpegUtils().dumpJFIF(new ByteSourceFile(updated));
ByteSource updateByteSource = new ByteSourceFile(updated);
JpegPhotoshopMetadata outMetadata = new JpegImageParser()
.getPhotoshopMetadata(updateByteSource, params);
// Debug.debug("outMetadata", outMetadata.toString());
// Debug.debug("hasIptcSegment", new JpegImageParser()
// .hasIptcSegment(updateByteSource));
assertNotNull(outMetadata);
assertTrue(outMetadata.getItems().size() == 2);
// assertEquals(metadata.toString(), outMetadata.toString());
}
{
// test insert
List newBlocks = new ArrayList();
List newRecords = new ArrayList();
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CITY,
"Albany, NY"));
newRecords.add(new IPTCRecord(IPTCConstants.IPTC_TYPE_CREDIT,
"William Sorensen"));
PhotoshopApp13Data newData = new PhotoshopApp13Data(newRecords,
newBlocks);
File updated = createTempFile(imageFile.getName()
+ ".iptc.insert.", ".jpg");
OutputStream os = null;
try
{
os = new FileOutputStream(updated);
os = new BufferedOutputStream(os);
new JpegIptcRewriter().writeIPTC(new ByteSourceFile(
noIptcFile), os, newData);
} finally
{
if (os != null) {
os.close();
}
os = null;
}
// Debug.debug("Source Segments:");
// new JpegUtils().dumpJFIF(new ByteSourceFile(updated));
ByteSource updateByteSource = new ByteSourceFile(updated);
JpegPhotoshopMetadata outMetadata = new JpegImageParser()
.getPhotoshopMetadata(updateByteSource, params);
// Debug.debug("outMetadata", outMetadata.toString());
// Debug.debug("hasIptcSegment", new JpegImageParser()