Skip to content

Commit 8be2559

Browse files
melixfniephaus
authored andcommitted
Fix GraalWasm Micronaut Photon demo
- fixed a version mismatch which caused a method not found error at runtime - upgrades to Micronaut 4.8.2 - adds a default HTML page to play with effects
1 parent 7e0aae8 commit 8be2559

File tree

4 files changed

+100
-6
lines changed

4 files changed

+100
-6
lines changed

graalwasm/graalwasm-micronaut-photon/pom.xml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,18 @@
1010
<parent>
1111
<groupId>io.micronaut.platform</groupId>
1212
<artifactId>micronaut-parent</artifactId>
13-
<version>4.6.1</version>
13+
<version>4.8.2</version>
1414
</parent>
1515
<properties>
16-
<graal.languages.version>24.2.0</graal.languages.version>
16+
<graal.languages.version>24.2.1</graal.languages.version>
17+
<photon.version>0.1.30</photon.version>
1718
<photon.download.url>
18-
https://raw.githubusercontent.com/fineshopdesign/cf-wasm/dca69477657fe80e36989f1fe7dcc17700d81ee2/packages/photon/src/lib
19+
https://raw.githubusercontent.com/fineshopdesign/cf-wasm/refs/tags/%40cf-wasm/satori%40${photon.version}/packages/photon/src/lib
1920
</photon.download.url>
2021
<packaging>jar</packaging>
21-
<jdk.version>21</jdk.version>
22-
<release.version>21</release.version>
23-
<micronaut.version>4.6.1</micronaut.version>
22+
<jdk.version>24</jdk.version>
23+
<release.version>24</release.version>
24+
<micronaut.version>4.8.1</micronaut.version>
2425
<micronaut.runtime>netty</micronaut.runtime>
2526
<micronaut.aot.enabled>false</micronaut.aot.enabled>
2627
<micronaut.aot.packageName>com.example.aot.generated</micronaut.aot.packageName>

graalwasm/graalwasm-micronaut-photon/src/main/java/com/example/DemoController.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@
77
package com.example;
88

99
import io.micronaut.context.annotation.Parameter;
10+
import io.micronaut.http.HttpResponse;
1011
import io.micronaut.http.MediaType;
1112
import io.micronaut.http.annotation.Controller;
1213
import io.micronaut.http.annotation.Get;
1314
import io.micronaut.http.annotation.Produces;
1415
import io.micronaut.scheduling.TaskExecutors;
1516
import io.micronaut.scheduling.annotation.ExecuteOn;
1617

18+
import java.net.URI;
19+
import java.net.URISyntaxException;
20+
1721
@Controller
1822
public class DemoController {
1923
private final PhotonService photonService;
@@ -28,4 +32,9 @@ public DemoController(PhotonService photonService) {
2832
public byte[] renderPhoto(@Parameter String effectName) {
2933
return photonService.processImage(effectName);
3034
}
35+
36+
@Get("/")
37+
public HttpResponse<?> index() throws URISyntaxException {
38+
return HttpResponse.redirect(new URI("/index.html"));
39+
}
3140
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,6 @@
11
micronaut.application.name=demo
2+
micronaut.router.static-resources.default.paths=classpath:static
3+
micronaut.router.static-resources.default.mapping=/*.html
4+
micronaut.router.static-resources.default.enabled=true
5+
6+
micronaut.server.cors.enabled=true
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<title>Image Effects Demo</title>
7+
<style>
8+
body {
9+
font-family: Arial, sans-serif;
10+
text-align: center;
11+
}
12+
.effects-nav {
13+
margin-bottom: 20px;
14+
}
15+
.effects-nav a {
16+
margin: 0 10px;
17+
text-decoration: none;
18+
color: blue;
19+
}
20+
.effects-nav a:hover {
21+
text-decoration: underline;
22+
}
23+
#image-container {
24+
display: flex;
25+
justify-content: center;
26+
align-items: center;
27+
height: 80vh;
28+
}
29+
#image-container img {
30+
max-width: 100%;
31+
max-height: 100%;
32+
}
33+
#load-time {
34+
margin-top: 10px;
35+
}
36+
</style>
37+
</head>
38+
<body>
39+
40+
<div class="effects-nav">
41+
<a href="#" onclick="changeEffect('default')">Default</a>
42+
<a href="#" onclick="changeEffect('flipv')">Flip Vertical</a>
43+
<a href="#" onclick="changeEffect('fliph')">Flip Horizontal</a>
44+
<a href="#" onclick="changeEffect('solarize')">Solarize</a>
45+
<a href="#" onclick="changeEffect('neue')">Neue</a>
46+
<a href="#" onclick="changeEffect('lofi')">LoFi</a>
47+
<a href="#" onclick="changeEffect('duotone_lilac')">Duotone</a>
48+
<a href="#" onclick="changeEffect('ryo')">Ryo</a>
49+
<a href="#" onclick="changeEffect('dramatic')">Dramatic</a>
50+
</div>
51+
52+
<div id="image-container">
53+
<img id="effect-image" src="/photo/default" alt="Image with effect">
54+
</div>
55+
<div id="load-time"></div>
56+
57+
<script>
58+
function changeEffect(effectName) {
59+
const startTime = performance.now();
60+
const img = document.getElementById('effect-image');
61+
img.src = `/photo/${effectName}`;
62+
img.onload = () => {
63+
const endTime = performance.now();
64+
const loadTime = endTime - startTime;
65+
document.getElementById('load-time').innerText = `Loaded in ${loadTime.toFixed(2)} ms`;
66+
};
67+
img.onerror = () => {
68+
document.getElementById('load-time').innerText = 'Failed to load image';
69+
};
70+
}
71+
72+
// Initially load the image with the default effect
73+
document.addEventListener('DOMContentLoaded', (event) => {
74+
changeEffect('default');
75+
});
76+
</script>
77+
78+
</body>
79+
</html>

0 commit comments

Comments
 (0)