diff options
Diffstat (limited to 'juick-server')
-rw-r--r-- | juick-server/build.gradle | 2 | ||||
-rw-r--r-- | juick-server/src/main/java/com/juick/server/util/ImageUtils.java | 66 |
2 files changed, 68 insertions, 0 deletions
diff --git a/juick-server/build.gradle b/juick-server/build.gradle index 3e6c8ccd..8f23e8db 100644 --- a/juick-server/build.gradle +++ b/juick-server/build.gradle @@ -41,6 +41,8 @@ dependencies { compile "rocks.xmpp:xmpp-core-client:0.7.4" compile "rocks.xmpp:xmpp-extensions-client:0.7.4" + compile 'org.imgscalr:imgscalr-lib:4.2' + providedCompile "javax.servlet:javax.servlet-api:3.1.0" providedRuntime "commons-fileupload:commons-fileupload:1.3.3" diff --git a/juick-server/src/main/java/com/juick/server/util/ImageUtils.java b/juick-server/src/main/java/com/juick/server/util/ImageUtils.java new file mode 100644 index 00000000..61677750 --- /dev/null +++ b/juick-server/src/main/java/com/juick/server/util/ImageUtils.java @@ -0,0 +1,66 @@ + +package com.juick.server.util; + +import org.apache.commons.io.FilenameUtils; +import org.imgscalr.Scalr; + +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + +public class ImageUtils { + + /** + * Move attached image from temp folder to image folder. + * Create preview images in corresponding folders. + * + * @param tempFilename Name of the image file in temp folder. + * @param outputFilename Name that will be used in in image folder. + * @param tmpDir Path string for the temp folder. + * @param imgDir Path string for the image folder. + */ + public static void saveImageWithPreviews(String tempFilename, String outputFilename, String tmpDir, String imgDir) + throws IOException { + String ext = FilenameUtils.getExtension(outputFilename); + + Path outputImagePath = Paths.get(imgDir, "p", outputFilename); + Files.move(Paths.get(tmpDir, tempFilename), outputImagePath); + BufferedImage originalImage = ImageIO.read(outputImagePath.toFile()); + + int width = originalImage.getWidth(); + int height = originalImage.getHeight(); + int maxDimension = (width > height) ? width : height; + BufferedImage image1024 = (maxDimension > 1024) ? Scalr.resize(originalImage, 1024) : originalImage; + BufferedImage image0512 = (maxDimension > 512) ? Scalr.resize(originalImage, 512) : originalImage; + BufferedImage image0160 = (maxDimension > 160) ? Scalr.resize(originalImage, 160) : originalImage; + ImageIO.write(image1024, ext, Paths.get(imgDir, "photos-1024", outputFilename).toFile()); + ImageIO.write(image0512, ext, Paths.get(imgDir, "photos-512", outputFilename).toFile()); + ImageIO.write(image0160, ext, Paths.get(imgDir, "ps", outputFilename).toFile()); + } + + /** + * Save new avatar in all required sizes. + * + * @param tempFilename Name of the image file in temp folder. + * @param uid User id that is used to build image file names. + * @param tmpDir Path string for the temp folder. + * @param imgDir Path string for the image folder. + */ + public static void saveAvatar(String tempFilename, int uid, String tmpDir, String imgDir) + throws IOException { + String ext = FilenameUtils.getExtension(tempFilename); + String originalName = String.format("%s.%s", uid, ext); + Path originalPath = Paths.get(imgDir, "ao", originalName); + Files.move(Paths.get(tmpDir, tempFilename), originalPath, StandardCopyOption.REPLACE_EXISTING); + BufferedImage originalImage = ImageIO.read(originalPath.toFile()); + + String targetExt = "png"; + String targetName = String.format("%s.%s", uid, targetExt); + ImageIO.write(Scalr.resize(originalImage, 96), targetExt, Paths.get(imgDir, "a", targetName).toFile()); + ImageIO.write(Scalr.resize(originalImage, 32), targetExt, Paths.get(imgDir, "as", targetName).toFile()); + } +}
\ No newline at end of file |