Step 1: Create a Quarkus project
You can use the Quarkus Maven archetype to create a new Quarkus project with the following command:
mvn io.quarkus:quarkus-maven-plugin:2.6.3:create \
-DprojectGroupId=com.example \
-DprojectArtifactId=image-resizer \
-DclassName=com.example.ImageResizer \
-Dextensions="quarkus-amazon-s3"
This will create a Quarkus project with the artifactId "image-resizer" and a Java class called "ImageResizer" in the package "com.example".
Step 2: Add dependencies
Open the pom.xml file of your Quarkus project and add the following dependencies:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-amazon-s3</artifactId>
</dependency>
<dependency>
<groupId>com.drew</groupId>
<artifactId>metadata-extractor</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_core</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>javax.media</groupId>
<artifactId>jai_imageio</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.imgscalr</groupId>
<artifactId>imgscalr-lib</artifactId>
<version>4.2</version>
</dependency>
Step 3: Implement the ImageResizer class
Replace the contents of the "ImageResizer" class with the following code:
package com.example;
import io.quarkus.amazon.s3.runtime.S3Event;
import io.quarkus.runtime.annotations.RegisterForReflection;
import org.imgscalr.Scalr;
import org.jboss.logging.Logger;
import javax.enterprise.context.ApplicationScoped;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
@ApplicationScoped
@RegisterForReflection // Required for Quarkus to serialize/deserialize S3 events
public class ImageResizer {
private static final Logger LOGGER = Logger.getLogger(ImageResizer.class);
public void resizeImageHandler(S3Event event) {
LOGGER.info("Received S3 event: " + event.toJson());
try {
for (S3Event.NotificationRecord record : event.getRecords()) {
String bucketName = record.getS3().getBucket().getName();
String objectKey = record.getS3().getObject().getKey();
LOGGER.info("Processing object: " + objectKey + " in bucket: " + bucketName);
resizeImage(bucketName, objectKey);
}
} catch (IOException e) {
LOGGER.error("Error processing S3 event: " + e.getMessage(), e);
}
}
private void resizeImage(String bucketName, String objectKey) throws IOException {
// Load the original image from S3
InputStream input = S3Client.getInstance().getObject(bucketName, objectKey);
BufferedImage image = ImageIO.read(input);
// Get the desired percentage for resizing
int percentage = 50; // Change this to the desired
mvn quarkus:add-extension -Dextensions="quarkus-amazon-sqs"