Restore image-thumbnail-samples

This commit is contained in:
David Turanski
2020-08-17 16:16:38 -04:00
parent 6ec63325dd
commit 35e94eb1e2
41 changed files with 3125 additions and 1 deletions

View File

@@ -0,0 +1,73 @@
/*
* Copyright 2020-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.example.image.thumbnail.processor;
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.function.Function;
import javax.imageio.ImageIO;
public class ThumbnailProcessor implements Function<byte[], byte[]> {
ImageScaler imageScaler = new ImageScaler();
public byte[] apply(byte[] bytes) {
return imageScaler
.resize(new ByteArrayInputStream(bytes), 100, 100, "JPEG").toByteArray();
}
/**
* From https://stackoverflow.com/a/39313627/1743446
*/
static class ImageScaler {
public ByteArrayOutputStream resize(InputStream inputStream, int IMG_WIDTH,
int IMG_HEIGHT, String format) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
BufferedImage originalImage = ImageIO.read(inputStream);
int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB
: originalImage.getType();
BufferedImage resizedImage = new BufferedImage(IMG_WIDTH, IMG_HEIGHT,
type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, IMG_WIDTH, IMG_HEIGHT, null);
g.dispose();
g.setComposite(AlphaComposite.Src);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
ImageIO.write(resizedImage, format, bos);
}
catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
return bos;
}
}
}

View File

@@ -0,0 +1,54 @@
/*
* Copyright 2020-2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.example.image.thumbnail.processor;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import static org.assertj.core.api.Assertions.assertThat;
public class ThumbnailProcessorTests {
@TempDir
File tempDir;
@Test
void test() throws IOException {
Resource resource = new ClassPathResource("firetruck.jpg");
byte[] data = readAllBytes(resource);
byte[] thumbnail = new ThumbnailProcessor().apply(data);
Path path = Paths.get(tempDir.getAbsolutePath(), "thumbnail.jpg");
Files.write(path, thumbnail);
assertThat(Files.exists(path)).isTrue();
}
private byte[] readAllBytes(Resource resource) throws IOException {
InputStream is = resource.getInputStream();
byte[] bytes = new byte[is.available()];
is.read(bytes);
return bytes;
}
}