Skip to content

Commit d77348b

Browse files
committed
✨ Aspect Ratio, with dimension extrapolation
1 parent 6b50a72 commit d77348b

3 files changed

Lines changed: 145 additions & 0 deletions

File tree

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package io.graversen.replicate.common;
2+
3+
import lombok.AccessLevel;
4+
import lombok.Getter;
5+
import lombok.RequiredArgsConstructor;
6+
7+
import java.util.Arrays;
8+
import java.util.Optional;
9+
10+
@Getter
11+
@RequiredArgsConstructor(access = AccessLevel.PACKAGE)
12+
public enum AspectRatios {
13+
RATIO_1_BY_1(1, 1),
14+
RATIO_16_BY_9(16, 9),
15+
RATIO_21_BY_9(21, 9),
16+
RATIO_3_BY_2(3, 2),
17+
RATIO_2_BY_3(2, 3),
18+
RATIO_4_BY_5(4, 5),
19+
RATIO_5_BY_4(5, 4),
20+
RATIO_3_BY_4(3, 4),
21+
RATIO_4_BY_3(4, 3),
22+
RATIO_9_BY_16(9, 16),
23+
RATIO_9_BY_21(9, 21);
24+
25+
private final int widthRatio;
26+
private final int heightRatio;
27+
28+
public static Optional<AspectRatios> fromValue(String value) {
29+
return Arrays.stream(AspectRatios.values())
30+
.filter(ratio -> ratio.getAspectRatio().equals(value))
31+
.findFirst();
32+
}
33+
34+
public String getAspectRatio() {
35+
return widthRatio + ":" + heightRatio;
36+
}
37+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package io.graversen.replicate.common;
2+
3+
import lombok.NonNull;
4+
import lombok.Value;
5+
6+
@Value
7+
public class TextToImageAspectRatio {
8+
@NonNull Integer height;
9+
@NonNull AspectRatios aspectRatio;
10+
11+
public Integer getWidth() {
12+
return (int) Math.round(height * ((double) aspectRatio.getWidthRatio() / aspectRatio.getHeightRatio()));
13+
}
14+
15+
public String getAspectRatioAsString() {
16+
return aspectRatio.getAspectRatio();
17+
}
18+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package io.graversen.replicate.common;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import static org.junit.jupiter.api.Assertions.assertEquals;
6+
7+
class TextToImageAspectRatioTest {
8+
@Test
9+
public void testAspectRatio_1By1() {
10+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(100, AspectRatios.RATIO_1_BY_1);
11+
assertEquals(100, aspectRatio.getWidth());
12+
assertEquals(100, aspectRatio.getHeight());
13+
}
14+
15+
@Test
16+
public void testAspectRatio_16By9() {
17+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(180, AspectRatios.RATIO_16_BY_9);
18+
assertEquals(320, aspectRatio.getWidth());
19+
assertEquals(180, aspectRatio.getHeight());
20+
}
21+
22+
@Test
23+
public void testAspectRatio_21By9() {
24+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(180, AspectRatios.RATIO_21_BY_9);
25+
assertEquals(420, aspectRatio.getWidth());
26+
assertEquals(180, aspectRatio.getHeight());
27+
}
28+
29+
@Test
30+
public void testAspectRatio_3By2() {
31+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(200, AspectRatios.RATIO_3_BY_2);
32+
assertEquals(300, aspectRatio.getWidth());
33+
assertEquals(200, aspectRatio.getHeight());
34+
}
35+
36+
@Test
37+
public void testAspectRatio_2By3() {
38+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(300, AspectRatios.RATIO_2_BY_3);
39+
assertEquals(200, aspectRatio.getWidth());
40+
assertEquals(300, aspectRatio.getHeight());
41+
}
42+
43+
@Test
44+
public void testAspectRatio_4By5() {
45+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(1350, AspectRatios.RATIO_4_BY_5);
46+
assertEquals(1080, aspectRatio.getWidth());
47+
assertEquals(1350, aspectRatio.getHeight());
48+
}
49+
50+
@Test
51+
public void testAspectRatio_5By4() {
52+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(1080, AspectRatios.RATIO_5_BY_4);
53+
assertEquals(1350, aspectRatio.getWidth());
54+
assertEquals(1080, aspectRatio.getHeight());
55+
}
56+
57+
@Test
58+
public void testAspectRatio_3By4() {
59+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(300, AspectRatios.RATIO_3_BY_4);
60+
assertEquals(225, aspectRatio.getWidth());
61+
assertEquals(300, aspectRatio.getHeight());
62+
}
63+
64+
@Test
65+
public void testAspectRatio_4By3() {
66+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(120, AspectRatios.RATIO_4_BY_3);
67+
assertEquals(160, aspectRatio.getWidth());
68+
assertEquals(120, aspectRatio.getHeight());
69+
}
70+
71+
@Test
72+
public void testAspectRatio_9By16() {
73+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(320, AspectRatios.RATIO_9_BY_16);
74+
assertEquals(180, aspectRatio.getWidth());
75+
assertEquals(320, aspectRatio.getHeight());
76+
}
77+
78+
@Test
79+
public void testAspectRatio_9By21() {
80+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(420, AspectRatios.RATIO_9_BY_21);
81+
assertEquals(180, aspectRatio.getWidth());
82+
assertEquals(420, aspectRatio.getHeight());
83+
}
84+
85+
@Test
86+
public void testGetAspectRatioAsString() {
87+
TextToImageAspectRatio aspectRatio = new TextToImageAspectRatio(100, AspectRatios.RATIO_4_BY_3);
88+
assertEquals("4:3", aspectRatio.getAspectRatioAsString());
89+
}
90+
}

0 commit comments

Comments
 (0)