Revision 5a407e53
Added by Andreas Müller over 3 years ago
app-import/src/main/java/eu/etaxonomy/cdm/io/PalmaeImageImport.java | ||
---|---|---|
18 | 18 |
import java.util.List; |
19 | 19 |
import java.util.Map; |
20 | 20 |
|
21 |
import org.apache.commons.imaging.ImageInfo; |
|
22 |
import org.apache.commons.imaging.ImageReadException; |
|
23 |
import org.apache.commons.imaging.Imaging; |
|
24 |
import org.apache.commons.imaging.common.GenericImageMetadata.GenericImageMetadataItem; |
|
25 |
import org.apache.commons.imaging.common.ImageMetadata; |
|
26 |
import org.apache.commons.imaging.common.ImageMetadata.ImageMetadataItem; |
|
27 |
import org.apache.commons.imaging.formats.jpeg.JpegImageMetadata; |
|
21 | 28 |
import org.apache.log4j.Logger; |
22 |
import org.apache.sanselan.ImageInfo; |
|
23 |
import org.apache.sanselan.ImageReadException; |
|
24 |
import org.apache.sanselan.Sanselan; |
|
25 |
import org.apache.sanselan.common.IImageMetadata; |
|
26 |
import org.apache.sanselan.common.ImageMetadata.Item; |
|
27 |
import org.apache.sanselan.formats.jpeg.JpegImageMetadata; |
|
28 | 29 |
import org.springframework.stereotype.Component; |
29 | 30 |
|
30 | 31 |
import eu.etaxonomy.cdm.app.images.AbstractImageImporter; |
... | ... | |
90 | 91 |
public String retrieveTaxonNameFromImageMetadata(File imageFile){ |
91 | 92 |
String name = null; |
92 | 93 |
|
93 |
IImageMetadata metadata = null;
|
|
94 |
ImageMetadata metadata = null; |
|
94 | 95 |
|
95 | 96 |
try { |
96 |
metadata = Sanselan.getMetadata(imageFile);
|
|
97 |
metadata = Imaging.getMetadata(imageFile);
|
|
97 | 98 |
} catch (ImageReadException e) { |
98 | 99 |
logger.error("Error reading image" + " in " + imageFile.getName(), e); |
99 | 100 |
} catch (IOException e) { |
... | ... | |
103 | 104 |
if(metadata instanceof JpegImageMetadata){ |
104 | 105 |
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata; |
105 | 106 |
|
106 |
for (Object object : jpegMetadata.getItems()){ |
|
107 |
|
|
108 |
Item item = (Item) object; |
|
109 |
|
|
110 |
if(item.getKeyword().equals("ObjectName")){ |
|
111 |
logger.debug("File: " + imageFile.getName() + ". ObjectName string is: " + item.getText()); |
|
112 |
String[] objectNameSplit = item.getText().split(";"); |
|
113 |
|
|
114 |
try { |
|
115 |
name = objectNameSplit[1].trim(); |
|
116 |
} catch (ArrayIndexOutOfBoundsException e) { |
|
117 |
logger.warn("ObjectNameSplit has no second part: " + item.getText() + " in " + imageFile.getName()); |
|
118 |
//throw e; |
|
119 |
} |
|
120 |
} |
|
107 |
for (ImageMetadataItem metadataItem : jpegMetadata.getItems()){ |
|
108 |
if (metadataItem instanceof GenericImageMetadataItem){ |
|
109 |
GenericImageMetadataItem item = (GenericImageMetadataItem) metadataItem; |
|
110 |
if(item.getKeyword().equals("ObjectName")){ |
|
111 |
logger.debug("File: " + imageFile.getName() + ". ObjectName string is: " + item.getText()); |
|
112 |
String[] objectNameSplit = item.getText().split(";"); |
|
113 |
|
|
114 |
try { |
|
115 |
name = objectNameSplit[1].trim(); |
|
116 |
} catch (ArrayIndexOutOfBoundsException e) { |
|
117 |
logger.warn("ObjectNameSplit has no second part: " + item.getText() + " in " + imageFile.getName()); |
|
118 |
//throw e; |
|
119 |
} |
|
120 |
} |
|
121 |
}else{ |
|
122 |
throw new IllegalStateException("Unsupported ImageMetadataItem type: " + metadataItem.getClass().getName()); |
|
123 |
} |
|
121 | 124 |
} |
122 | 125 |
} |
123 | 126 |
|
... | ... | |
128 | 131 |
private Map<MetaData, String> getMetaData(File imageFile, List<MetaData> metaData){ |
129 | 132 |
HashMap<MetaData, String> result = new HashMap<>(); |
130 | 133 |
|
131 |
IImageMetadata metadata = null;
|
|
134 |
ImageMetadata metadata = null; |
|
132 | 135 |
List<String> metaDataStrings = new ArrayList<>(); |
133 | 136 |
|
134 | 137 |
for (MetaData data: metaData){ |
135 | 138 |
metaDataStrings.add(data.name().toLowerCase()); |
136 | 139 |
} |
137 | 140 |
|
138 |
|
|
139 | 141 |
try { |
140 |
metadata = Sanselan.getMetadata(imageFile);
|
|
142 |
metadata = Imaging.getMetadata(imageFile);
|
|
141 | 143 |
} catch (ImageReadException e) { |
142 | 144 |
logger.error("Error reading image" + " in " + imageFile.getName(), e); |
143 | 145 |
} catch (IOException e) { |
144 | 146 |
logger.error("Error reading file" + " in " + imageFile.getName(), e); |
145 | 147 |
} |
146 | 148 |
|
147 |
|
|
148 |
|
|
149 | 149 |
if(metadata instanceof JpegImageMetadata){ |
150 | 150 |
JpegImageMetadata jpegMetadata = (JpegImageMetadata) metadata; |
151 | 151 |
|
152 |
for (Object object : jpegMetadata.getItems()){ |
|
153 |
Item item = (Item) object; |
|
154 |
|
|
155 |
if(metaDataStrings.contains(item.getKeyword().toLowerCase())){ |
|
156 |
logger.debug("File: " + imageFile.getName() + ". "+ item.getKeyword() +"string is: " + item.getText()); |
|
157 |
result.put(MetaData.valueOf(item.getKeyword().toUpperCase()), item.getText()); |
|
158 |
} |
|
152 |
for (ImageMetadataItem metadataItem : jpegMetadata.getItems()){ |
|
153 |
if (metadataItem instanceof GenericImageMetadataItem){ |
|
154 |
GenericImageMetadataItem item = (GenericImageMetadataItem) metadataItem; |
|
155 |
if(metaDataStrings.contains(item.getKeyword().toLowerCase())){ |
|
156 |
logger.debug("File: " + imageFile.getName() + ". "+ item.getKeyword() +"string is: " + item.getText()); |
|
157 |
result.put(MetaData.valueOf(item.getKeyword().toUpperCase()), item.getText()); |
|
158 |
} |
|
159 |
}else{ |
|
160 |
throw new IllegalStateException("Unsupported ImageMetadataItem type: " + metadataItem.getClass().getName()); |
|
161 |
} |
|
159 | 162 |
} |
160 | 163 |
} |
161 | 164 |
|
... | ... | |
213 | 216 |
//MetaDataFactory metaDataFactory = MetaDataFactory.getInstance(); |
214 | 217 |
//ImageMetaData imageMetaData = (ImageMetaData) metaDataFactory.readMediaData(file.toURI(), MimeType.IMAGE); |
215 | 218 |
try{ |
216 |
ImageInfo imageinfo = Sanselan.getImageInfo(file);
|
|
219 |
ImageInfo imageinfo = Imaging.getImageInfo(file);
|
|
217 | 220 |
|
218 | 221 |
String mimeType = imageinfo.getMimeType(); |
219 | 222 |
String suffix = "jpg"; |
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaImageImport.java | ||
---|---|---|
11 | 11 |
import java.io.File; |
12 | 12 |
import java.io.IOException; |
13 | 13 |
import java.net.URI; |
14 |
import java.util.ArrayList; |
|
15 | 14 |
import java.util.List; |
16 | 15 |
|
16 |
import org.apache.commons.imaging.ImageReadException; |
|
17 |
import org.apache.commons.imaging.Imaging; |
|
18 |
import org.apache.commons.imaging.common.GenericImageMetadata.GenericImageMetadataItem; |
|
19 |
import org.apache.commons.imaging.common.ImageMetadata; |
|
20 |
import org.apache.commons.imaging.common.ImageMetadata.ImageMetadataItem; |
|
17 | 21 |
import org.apache.log4j.Logger; |
18 |
import org.apache.sanselan.ImageReadException; |
|
19 |
import org.apache.sanselan.Sanselan; |
|
20 |
import org.apache.sanselan.common.IImageMetadata; |
|
21 |
import org.apache.sanselan.common.ImageMetadata.Item; |
|
22 | 22 |
import org.joda.time.DateTime; |
23 | 23 |
import org.joda.time.DateTimeZone; |
24 | 24 |
import org.joda.time.format.DateTimeFormat; |
... | ... | |
120 | 120 |
//image metadata |
121 | 121 |
URI uri = URI.create(fullThumbUrl + fileStr); |
122 | 122 |
try{ |
123 |
IImageMetadata metadata = Sanselan.getMetadata(uri.toURL().openStream(), null); |
|
124 |
ArrayList<?> items = metadata.getItems(); |
|
125 |
for (Object object : items){ |
|
126 |
Item item = (Item) object; |
|
127 |
// System.out.println(item.getKeyword() + ": " + item.getText()); |
|
128 |
String keyword = item.getKeyword().toLowerCase(); |
|
129 |
String value = removeQuots(item.getText()); |
|
130 |
if("image description".equals(keyword)){ |
|
131 |
media.putDescription(Language.DEFAULT(), value); |
|
132 |
}else if ("artist".equals(keyword)){ |
|
133 |
if (isNotBlank(artistStr) && ! value.contains(artistStr)){ |
|
134 |
logger.warn("Artist and artistStr are different: " + artistStr + "; " + value); |
|
123 |
ImageMetadata metadata = Imaging.getMetadata(uri.toURL().openStream(), null); |
|
124 |
List<? extends ImageMetadataItem> items = metadata.getItems(); |
|
125 |
for (ImageMetadataItem metadataItem : items){ |
|
126 |
if (metadataItem instanceof GenericImageMetadataItem){ |
|
127 |
GenericImageMetadataItem item = (GenericImageMetadataItem) metadataItem; |
|
128 |
|
|
129 |
// System.out.println(item.getKeyword() + ": " + item.getText()); |
|
130 |
String keyword = item.getKeyword().toLowerCase(); |
|
131 |
String value = removeQuots(item.getText()); |
|
132 |
if("image description".equals(keyword)){ |
|
133 |
media.putDescription(Language.DEFAULT(), value); |
|
134 |
}else if ("artist".equals(keyword)){ |
|
135 |
if (isNotBlank(artistStr) && ! value.contains(artistStr)){ |
|
136 |
logger.warn("Artist and artistStr are different: " + artistStr + "; " + value); |
|
137 |
} |
|
138 |
artistStr = value; |
|
139 |
}else if ("date time original".equalsIgnoreCase(item.getKeyword())){ |
|
140 |
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss"); |
|
141 |
DateTime created = f.withZone(DateTimeZone.forID("Europe/Athens")).parseDateTime(value); |
|
142 |
media.setMediaCreated(TimePeriod.NewInstance(created)); |
|
135 | 143 |
} |
136 |
artistStr = value; |
|
137 |
}else if ("date time original".equalsIgnoreCase(item.getKeyword())){ |
|
138 |
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss"); |
|
139 |
DateTime created = f.withZone(DateTimeZone.forID("Europe/Athens")).parseDateTime(value); |
|
140 |
media.setMediaCreated(TimePeriod.NewInstance(created)); |
|
144 |
}else{ |
|
145 |
throw new IllegalStateException("Unsupported ImageMetadataItem type: " + metadataItem.getClass().getName()); |
|
141 | 146 |
} |
142 | 147 |
} |
143 | 148 |
} catch (ImageReadException | IOException e1) { |
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/ImageImportTest.java | ||
---|---|---|
11 | 11 |
import java.io.File; |
12 | 12 |
import java.io.IOException; |
13 | 13 |
import java.net.URI; |
14 |
import java.util.ArrayList;
|
|
14 |
import java.util.List; |
|
15 | 15 |
|
16 |
import org.apache.commons.imaging.ImageReadException; |
|
17 |
import org.apache.commons.imaging.Imaging; |
|
18 |
import org.apache.commons.imaging.common.GenericImageMetadata.GenericImageMetadataItem; |
|
19 |
import org.apache.commons.imaging.common.ImageMetadata; |
|
20 |
import org.apache.commons.imaging.common.ImageMetadata.ImageMetadataItem; |
|
16 | 21 |
import org.apache.http.HttpException; |
17 | 22 |
import org.apache.log4j.Logger; |
18 |
import org.apache.sanselan.ImageReadException; |
|
19 |
import org.apache.sanselan.Sanselan; |
|
20 |
import org.apache.sanselan.common.IImageMetadata; |
|
21 |
import org.apache.sanselan.common.ImageMetadata.Item; |
|
22 | 23 |
import org.joda.time.DateTime; |
23 | 24 |
import org.joda.time.DateTimeZone; |
24 | 25 |
import org.joda.time.format.DateTimeFormat; |
... | ... | |
74 | 75 |
|
75 | 76 |
//image metadata |
76 | 77 |
File imageFile = new File(""); |
77 |
IImageMetadata metadata;
|
|
78 |
ImageMetadata metadata; |
|
78 | 79 |
try { |
79 |
metadata = Sanselan.getMetadata(uri.toURL().openStream(), null); |
|
80 |
ArrayList<?> items = metadata.getItems(); |
|
81 |
for (Object object : items){ |
|
82 |
Item item = (Item) object; |
|
83 |
System.out.println(item.getKeyword() + ": " + item.getText()); |
|
84 |
String value = removeQuots(item.getText()); |
|
85 |
if("Image Description".equalsIgnoreCase(item.getKeyword())){ |
|
86 |
// media.putDescription(Language.DEFAULT(), item.getText()); |
|
87 |
}else if ("date time original".equalsIgnoreCase(item.getKeyword())){ |
|
88 |
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss"); |
|
89 |
DateTime created = f.withZone(DateTimeZone.forID("Europe/Athens")).parseDateTime(value); |
|
90 |
System.out.println(created); |
|
91 |
|
|
80 |
metadata = Imaging.getMetadata(uri.toURL().openStream(), null); |
|
81 |
List<? extends ImageMetadataItem> items = metadata.getItems(); |
|
82 |
for (ImageMetadataItem metadataItem : items){ |
|
83 |
if (metadataItem instanceof GenericImageMetadataItem){ |
|
84 |
GenericImageMetadataItem item = (GenericImageMetadataItem) metadataItem; |
|
85 |
// System.out.println(item.getKeyword() + ": " + item.getText()); |
|
86 |
String value = removeQuots(item.getText()); |
|
87 |
if("Image Description".equalsIgnoreCase(item.getKeyword())){ |
|
88 |
// media.putDescription(Language.DEFAULT(), item.getText()); |
|
89 |
}else if ("date time original".equalsIgnoreCase(item.getKeyword())){ |
|
90 |
DateTimeFormatter f = DateTimeFormat.forPattern("yyyy:MM:dd HH:mm:ss"); |
|
91 |
DateTime created = f.withZone(DateTimeZone.forID("Europe/Athens")).parseDateTime(value); |
|
92 |
System.out.println(created); |
|
93 |
} |
|
94 |
}else{ |
|
95 |
throw new IllegalStateException("Unsupported ImageMetadataItem type: " + metadataItem.getClass().getName()); |
|
92 | 96 |
} |
93 | 97 |
} |
94 | 98 |
} catch (ImageReadException | IOException e1) { |
Also available in: Unified diff
update image imports to new apache commons imaging