From d7598dbb1d719877a6074bcce7eea91e429eed09 Mon Sep 17 00:00:00 2001 From: Morteza Allahyari Date: Wed, 31 Jul 2024 10:59:09 +0330 Subject: [PATCH] Add support to encode existing WebP image files --- build.gradle | 1 + src/main/java/io/trbl/blurhash/Base83.java | 2 +- src/main/java/io/trbl/blurhash/BlurHash.java | 23 ++++++++++++++++---- src/main/java/io/trbl/blurhash/Utils.java | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index a75fa43..8cc190c 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ repositories { } dependencies { + implementation "com.twelvemonkeys.imageio:imageio-webp:3.11.0" testImplementation "junit:junit:4.12" } diff --git a/src/main/java/io/trbl/blurhash/Base83.java b/src/main/java/io/trbl/blurhash/Base83.java index bb92f0d..723a0cf 100644 --- a/src/main/java/io/trbl/blurhash/Base83.java +++ b/src/main/java/io/trbl/blurhash/Base83.java @@ -39,4 +39,4 @@ static int decode(String value) { private Base83() { } -} +} \ No newline at end of file diff --git a/src/main/java/io/trbl/blurhash/BlurHash.java b/src/main/java/io/trbl/blurhash/BlurHash.java index 295cb1b..c946d65 100644 --- a/src/main/java/io/trbl/blurhash/BlurHash.java +++ b/src/main/java/io/trbl/blurhash/BlurHash.java @@ -1,6 +1,8 @@ package io.trbl.blurhash; +import javax.imageio.ImageIO; import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; import static io.trbl.blurhash.Utils.*; @@ -16,8 +18,8 @@ private static void applyBasisFunction(int[] pixels, int width, int height, for (int x = 0; x < width; x++) { for (int y = 0; y < height; y++) { double basis = normalisation - * Math.cos((Math.PI * i * x) / width) - * Math.cos((Math.PI * j * y) / height); + * Math.cos((Math.PI * i * x) / width) + * Math.cos((Math.PI * j * y) / height); int pixel = pixels[y * width + x]; r += basis * sRGBToLinear((pixel >> 16) & 0xff); g += basis * sRGBToLinear((pixel >> 8) & 0xff); @@ -64,10 +66,23 @@ public static String encode(BufferedImage bufferedImage) { public static String encode(BufferedImage bufferedImage, int componentX, int componentY) { int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); - int[] pixels = bufferedImage.getRGB(0, 0, width, height, null, 0, width); + int[] pixels = getRGBArrayFromImage(bufferedImage); return encode(pixels, width, height, componentX, componentY); } + private static int[] getRGBArrayFromImage(BufferedImage image) { + int width = image.getWidth(); + int height = image.getHeight(); + int[] pixels = new int[width * height]; + image.getRGB(0, 0, width, height, pixels, 0, width); + return pixels; + } + + public static BufferedImage decodeWebPImage(byte[] webpData) throws Exception { + ByteArrayInputStream inputStream = new ByteArrayInputStream(webpData); + return ImageIO.read(inputStream); + } + /** * Calculates the blur hash from the given pixels. * @@ -124,4 +139,4 @@ public static String encode(int[] pixels, int width, int height, int componentX, private BlurHash() { } -} +} \ No newline at end of file diff --git a/src/main/java/io/trbl/blurhash/Utils.java b/src/main/java/io/trbl/blurhash/Utils.java index 43597c3..4bacdb5 100644 --- a/src/main/java/io/trbl/blurhash/Utils.java +++ b/src/main/java/io/trbl/blurhash/Utils.java @@ -39,4 +39,4 @@ static double max(double[][] values, int from, int endExclusive) { private Utils() { } -} +} \ No newline at end of file