Skip to content

Commit d2852ed

Browse files
committed
add image codec
1 parent 546a3f6 commit d2852ed

5 files changed

Lines changed: 34 additions & 5 deletions

File tree

binary/src/main/java/alpine/binary/BinaryCodec.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package alpine.binary;
22

3-
import alpine.Either;
43
import io.netty.buffer.ByteBuf;
54
import org.jetbrains.annotations.Nullable;
65

binary/src/main/java/alpine/Either.java renamed to binary/src/main/java/alpine/binary/Either.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package alpine;
1+
package alpine.binary;
22

33
import java.util.Objects;
44
import java.util.Optional;

binary/src/main/java/alpine/binary/EitherBinaryCodec.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package alpine.binary;
22

3-
import alpine.Either;
43
import io.netty.buffer.ByteBuf;
54

65
/**

binary/src/main/java/alpine/binary/StandardBinaryCodecs.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,16 @@
11
package alpine.binary;
22

3+
import io.netty.buffer.ByteBuf;
4+
5+
import javax.imageio.ImageIO;
6+
import java.awt.image.BufferedImage;
7+
import java.io.ByteArrayInputStream;
8+
import java.io.ByteArrayOutputStream;
9+
import java.io.IOException;
310
import java.nio.charset.StandardCharsets;
411
import java.util.UUID;
512

13+
import static alpine.binary.ArrayBinaryCodecs.BYTE_ARRAY;
614
import static alpine.binary.BinaryCodec.LONG;
715

816
/**
@@ -20,4 +28,29 @@ interface StandardBinaryCodecs {
2028
LONG, java.util.UUID::getMostSignificantBits,
2129
LONG, java.util.UUID::getLeastSignificantBits,
2230
UUID::new);
31+
32+
/**
33+
* Returns binary codec which serializes an image.
34+
* @return A binary codec which serializes an image.
35+
* @see java.awt.image.BufferedImage
36+
*/
37+
static BinaryCodec<BufferedImage> image(String format) {
38+
return BYTE_ARRAY.map(
39+
array -> {
40+
try (var stream = new ByteArrayInputStream(array)) {
41+
return ImageIO.read(stream);
42+
} catch (IOException e) {
43+
throw new RuntimeException("Failed to read image!", e);
44+
}
45+
},
46+
image -> {
47+
try {
48+
var stream = new ByteArrayOutputStream();
49+
ImageIO.write(image, format, stream);
50+
return stream.toByteArray();
51+
} catch (IOException e) {
52+
throw new RuntimeException("Failed to write image!", e);
53+
}
54+
});
55+
}
2356
}

binary/src/test/java/alpine/binary/CodecTest.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package alpine.binary;
22

3-
import alpine.Either;
43
import io.netty.buffer.Unpooled;
54
import org.junit.jupiter.params.ParameterizedTest;
65
import org.junit.jupiter.params.provider.Arguments;
76
import org.junit.jupiter.params.provider.MethodSource;
87

9-
import java.nio.charset.StandardCharsets;
108
import java.util.Arrays;
119
import java.util.Objects;
1210
import java.util.Optional;

0 commit comments

Comments
 (0)