Quiero comprimir (reducir) el tamaño de la imagen usando Java. Podemos subir imágenes en formatos jpg / jpeg / png. El formato general de las imágenes es PNG. Entonces, después de cargar la imagen en el servidor, debemos comprimir (reducir el tamaño del archivo) y convertirla a PNG.
Tengo el siguiente código para la imagen comprimida:
BufferedImage bufferedImage = ImageIO.read(inputStream);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
switch (imageType) {
case PNG:
case JPG:
// need Java 9+ for PNG writer support
ImageWriter writer = ImageIO.getImageWritersByFormatName(imageType.getExtension()).next();
ImageOutputStream ios = ImageIO.createImageOutputStream(outputStream);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
if (param.canWriteCompressed()) {
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.3f);
}
writer.write(null, new IIOImage(bufferedImage, null, null), param);
writer.dispose();
return new ByteArrayInputStream(outputStream.toByteArray());
default:
log.warn("Image type unknown");
return null;
}
El problema es que, después de procesar la imagen, obtuve el resultado: el tamaño del archivo aumentó en lugar de reducirse. La imagen original tiene un tamaño menor que la comprimida. ¿Alguna sugerencia sobre cómo solucionar este problema?
Desafortunadamente, la compresión JPEG con pérdida se comprime mucho mejor que la compresión PNG sin pérdida. Puede restringir el ancho y el alto de la imagen y escalar proporcionalmente.
Entonces cambiaría a JPEG y restringiría el tamaño.
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras