-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathImageIOConverter.java
130 lines (102 loc) · 3.12 KB
/
ImageIOConverter.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package qiwi.util.bean.converter;
import java.awt.image.RenderedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;
import org.apache.camel.Converter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;
@Converter
public class ImageIOConverter {
private static final Logger log = LoggerFactory.getLogger(ImageIOConverter.class);
@NotNull
@Converter
public static ImageReader toImageReader(@NotNull byte[] image) {
final InputStream io = new ByteArrayInputStream(image);
ImageInputStream input = null;
try {
final Iterator<ImageReader> iterator =
ImageIO.getImageReaders(input = toImageInputStream(io));
if (!iterator.hasNext()) {
throw new IllegalStateException("Input stream doesn't contain any graphics file...");
}
final ImageReader reader = iterator.next();
reader.setInput(input);
return reader;
} finally {
try {
io.close();
if (input != null) {
input.close();
}
} catch (IOException ignored) {
}
}
}
@NotNull
@Converter
public static ImageWriter toImageWriter(@NotNull byte[] image) {
final @NotNull ImageReader imageReader = toImageReader(image);
final @Nullable ImageWriter imageWriter = ImageIO.getImageWriter(imageReader);
if (imageWriter == null) {
throw new IllegalStateException("Unable to get ImageWriter from image...");
}
return imageWriter;
}
@NotNull
@Converter
public static RenderedImage toRenderedImage(@NotNull byte[] image) {
final InputStream io = new ByteArrayInputStream(image);
RenderedImage renderedImage;
try {
renderedImage = ImageIO.read(io);
} catch (IOException e) {
log.error("ImageIOConverter toRenderedImage exception", e);
throw new IllegalStateException(e);
} finally {
try {
io.close();
} catch (IOException ignored) {
}
}
if (renderedImage == null) {
throw new IllegalStateException("Unable to get RenderedImage from image...");
}
return renderedImage;
}
@NotNull
public static ImageInputStream toImageInputStream(@NotNull InputStream io) {
ImageInputStream input;
try {
input = ImageIO.createImageInputStream(io);
} catch (IOException e) {
throw new IllegalStateException("ImageIOConverter toImageInputStream exception", e);
}
if (input == null) {
throw new IllegalStateException("Unable to get ImageInputStream from image...");
}
return input;
}
@NotNull
public static ImageOutputStream toImageOutputStream(@NotNull OutputStream out) {
ImageOutputStream output;
try {
output = ImageIO.createImageOutputStream(out);
} catch (IOException e) {
throw new IllegalStateException("ImageIOConverter toImageInputStream exception", e);
}
if (output == null) {
throw new IllegalStateException("Unable to get ImageOutputStream from image...");
}
return output;
}
}