Apresenta code snippets a fim de facilitar os processos de tratamento de imagens
Encode e Decode Image
import java.io.IOException;
import java.util.Base64;
Decodifica uma imagem a partir de uma string.
public byte[] decodeB64(String b64img) throws ImageDecodingException {
if (b64img == null || b64img.trim().isEmpty()) {
throw new ImageDecodingException("Base64 string is null or empty in payload");
}
try {
return Base64.getDecoder().decode(b64img);
} catch (IllegalArgumentException e) {
throw new ImageDecodingException("Error decoding Base64 string", e);
}
}
Descrição | |
---|---|
param b64img | String em base64 representando a imagem; |
return | Array de bytes da imagem decodificada; |
throws | Se a string em base64 for nula, vazia ou não puder ser decodificada. |
Codifica uma array de bytes em uma string base64.
public String encodeB64(byte[] imgArray) {
return Base64.getEncoder().encodeToString(imgArray);
}
Descrição | |
---|---|
param imgArray | O array de bytes representando a imagem; |
return | A string Base64 resultante. |
Exceção personalizada para indicar problemas durante a decodificação de imagens.
class ImageDecodingException extends IOException {
public ImageDecodingException(String message) {
super(message);
}
public ImageDecodingException(String message, Throwable cause) {
super(message, cause);
}
}
Converte to JPEG
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Iterator;
Codifica um array de bytes em uma imagem JPEG com o nível de qualidade especificado.
private static synchronized byte[] encodeToJPEG(byte[] data, float qualityLevel)
throws ImageEncodingException, IllegalArgumentException {
if (data == null || data.length == 0) {
throw new IllegalArgumentException("O array de bytes da imagem não pode ser nulo ou vazio.");
}
if (qualityLevel < 0.0 || qualityLevel > 1.0) {
throw new IllegalArgumentException("O nível de qualidade deve estar entre 0.0 e 1.0.");
}
try {
BufferedImage rawImage = ImageIO.read(new ByteArrayInputStream(data));
BufferedImage image = new BufferedImage(rawImage.getWidth(), rawImage.getHeight(), BufferedImage.TYPE_INT_RGB);
ColorConvertOp xformOp = new ColorConvertOp(null);
xformOp.filter(rawImage, image);
Iterator < ImageWriter > iter = ImageIO.getImageWritersByFormatName("jpeg");
ImageWriter writer = iter.next();
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
ImageOutputStream ios = ImageIO.createImageOutputStream(bytes);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(qualityLevel);
if (qualityLevel == 1.0) {
param.setSourceSubsampling(1, 1, 0, 0);
}
IIOImage iioImage = new IIOImage(image, null, null);
writer.write(null, iioImage, param);
ios.close();
writer.dispose();
return bytes.toByteArray();
} catch (IOException e) {
throw new ImageEncodingException("Erro durante a codificação da imagem.", e);
}
}
Descrição | |
---|---|
param data | O array de bytes representando a imagem |
param qualityLevel | O nível de qualidade da codificação (entre 0.0 e 1.0); |
return | O array de bytes da imagem JPEG codificada; |
throws | Se houver um problema durante a codificação da imagem; |
throws | Se a qualidade estiver fora do intervalo permitido. |
Exceção personalizada para indicar problemas durante a codificação de imagens
class ImageEncodingException extends IOException {
public ImageEncodingException(String message) {
super(message);
}
public ImageEncodingException(String message, Throwable cause) {
super(message, cause);
}
}
Resize Image
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
Redimensiona uma imagem pela escala fornecida.
public BufferedImage resizeByScale(BufferedImage original, int scale) {
if (original == null) {
throw new IllegalArgumentException("A imagem original não pode ser nula.");
}
if (scale != 0) {
int newWidth = original.getWidth() / scale;
int newHeight = original.getHeight() / scale;
return resizeBySize(original, newWidth, newHeight);
} else {
return original;
}
}
Descrição | |
---|---|
param original | A imagem original; |
param scale | A escala desejada; |
scale | A imagem redimensionada. |
Redimensiona uma imagem para as dimensões fornecidas
public BufferedImage resizeBySize(BufferedImage original, int newWidth, int newHeight) {
return resizeBySize(original, newWidth, newHeight, BufferedImage.TYPE_INT_ARGB);
}
Descrição | |
---|---|
param original | A imagem original; |
param newWidth | A nova largura desejada; |
param newHeight | A nova altura desejada; |
return | A imagem redimensionada. |
Redimensiona uma imagem para as dimensões fornecidas com opções de tipo adicionais.
public BufferedImage resizeBySize(BufferedImage original, int newWidth, int newHeight, int type) {
if (original == null) {
throw new IllegalArgumentException("A imagem original não pode ser nula.");
}
int oldWidth = original.getWidth();
int oldHeight = original.getHeight();
BufferedImage resized = new BufferedImage(newWidth, newHeight, type);
try (Graphics2D graphics2D = resized.createGraphics()) {
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(original,
0, 0, newWidth, newHeight,
0, 0, oldWidth, oldHeight,
null);
}
return resized;
}
Descrição | |
---|---|
param original | A imagem original; |
param newWidth | A nova largura desejada; |
param newHeight | A nova altura desejada; |
param type | O tipo da imagem resultante; |
return | A imagem redimensionada. |
Redimensiona um array de bytes de imagem para as dimensões fornecidas.
public byte[] resizeBytesBySize(byte[] original, int newWidth, int newHeight) {
if (original == null) {
throw new IllegalArgumentException("O array de bytes da imagem original não pode ser nulo.");
}
try {
BufferedImage input = ImageIO.read(new ByteArrayInputStream(original));
BufferedImage resized = resizeBySize(input, newWidth, newHeight, BufferedImage.TYPE_INT_RGB);
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) {
ImageIO.write(resized, "jpg", byteArrayOutputStream);
return byteArrayOutputStream.toByteArray();
}
} catch (IOException e) {
log.warn("IOException durante o redimensionamento - {}", e.toString());
return original;
}
}
Descrição | |
---|---|
param original | A imagem original; |
param newWidth | A nova largura desejada; |
param newHeight | A nova altura desejada; |
return | Os bytes da imagem redimensionada. |