All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.graphenee.util.TRImageUtil Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2016, 2018 Farrukh Ijaz
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *******************************************************************************/
package io.graphenee.util;

import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Iterator;

import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.FileCopyUtils;
import org.springframework.util.StreamUtils;

public class TRImageUtil {

	private static final Logger L = LoggerFactory.getLogger(TRImageUtil.class);

	public static boolean resizeImage(File sourceFile, File targetFile) {
		try {
			// scale image on disk
			BufferedImage originalImage = ImageIO.read(sourceFile);
			if (originalImage.getWidth() < 1024)
				return false;
			int type = originalImage.getType() == 0 ? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
			BufferedImage resizeImageJpg = resizeImage(originalImage, type, 1024);
			String ext = TRFileContentUtil.getExtensionFromFilename(sourceFile.getName());
			ImageIO.write(resizeImageJpg, ext, targetFile);
			return true;
		} catch (IOException e) {
			System.out.println(e.getMessage());
			return false;
		}
	}

	public static void compressImage(File sourceFile, File targetFile) {
		boolean compressed = false;
		try {
			String mimeType = TRFileContentUtil.getMimeType(sourceFile.getName());
			if (mimeType != null) {
				Iterator writers = ImageIO.getImageWritersByMIMEType(mimeType);
				if (writers.hasNext()) {
					ImageWriter writer = writers.next();
					FileInputStream sourceStream = new FileInputStream(sourceFile);
					FileOutputStream targetStream = new FileOutputStream(targetFile);
					compressImage(sourceStream, targetStream, writer);
					compressed = true;
				}
			}
		} catch (Exception ex) {
			L.warn("Compression Failed:", ex);
		}
		if (!compressed) {
			try {
				FileCopyUtils.copy(sourceFile, targetFile);
			} catch (IOException ex) {
				L.warn("Compression Failed:", ex);
			}
		}
	}

	public static void compressImage(File sourceFile, OutputStream targetStream) {
		boolean compressed = false;
		try {
			String mimeType = TRFileContentUtil.getMimeType(sourceFile.getName());
			if (mimeType != null) {
				Iterator writers = ImageIO.getImageWritersByMIMEType(mimeType);
				if (writers.hasNext()) {
					ImageWriter writer = writers.next();
					FileInputStream sourceStream = new FileInputStream(sourceFile);
					compressImage(sourceStream, targetStream, writer);
					compressed = true;
				}
			}
		} catch (Exception ex) {
			L.warn("Compression Failed:", ex);
		}
		if (!compressed) {
			try {
				StreamUtils.copy(new FileInputStream(sourceFile), targetStream);
			} catch (IOException ex) {
				L.warn("Compression Failed:", ex);
			}
		}
	}

	public static void compressImage(InputStream sourceStream, File targetFile) {
		boolean compressed = false;
		try {
			String mimeType = TRFileContentUtil.getMimeType(targetFile.getName());
			if (mimeType != null) {
				Iterator writers = ImageIO.getImageWritersByMIMEType(mimeType);
				if (writers.hasNext()) {
					ImageWriter writer = writers.next();
					FileOutputStream targetStream = new FileOutputStream(targetFile);
					compressImage(sourceStream, targetStream, writer);
					compressed = true;
				}
			}
		} catch (Exception ex) {
			L.warn("Compression Failed:", ex);
		}
		if (!compressed) {
			try {
				StreamUtils.copy(sourceStream, new FileOutputStream(targetFile));
			} catch (IOException ex) {
				L.warn("Compression Failed:", ex);
			}
		}
	}

	public static void compressImage(InputStream sourceStream, OutputStream targetStream, ImageWriter imageWriter) {
		try {
			float imageQuality = 0.3f;

			//Create the buffered image
			BufferedImage bufferedImage = ImageIO.read(sourceStream);

			ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(targetStream);
			imageWriter.setOutput(imageOutputStream);

			ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();

			//Set the compress quality metrics
			imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
			imageWriteParam.setCompressionQuality(imageQuality);

			//Created image
			imageWriter.write(null, new IIOImage(bufferedImage, null, null), imageWriteParam);

			// close all streams
			sourceStream.close();
			targetStream.close();
			imageOutputStream.close();
			imageWriter.dispose();
		} catch (Exception ex) {
			L.warn("Compression Failed:", ex);
		}
	}

	public static BufferedImage resizeImage(BufferedImage originalImage, int type, Integer targetWidth) {
		int width = originalImage.getWidth();
		int height = originalImage.getHeight();
		double aspectRatio = (height * 1.0) / (width * 1.0);
		int targetHeight = Double.valueOf(targetWidth * aspectRatio).intValue();
		BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, type);
		Graphics2D g = resizedImage.createGraphics();
		g.drawImage(originalImage, 0, 0, targetWidth, targetHeight, null);
		g.dispose();

		return resizedImage;
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy