Project

General

Profile

« Previous | Next » 

Revision 5a407e53

Added by Andreas Müller over 3 years ago

update image imports to new apache commons imaging

View differences:

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