Java Java Compresión de imagen Compresión de imagen

Comprimir imágenes de Java

 

catálogo de lectura

prefacio

A medida que el programador de Java del servidor mosca, imagen esto ha sido un dolor de cabeza.

Ahora en muchos sitios, subir fotos tienen esta característica, pero ahora una gran cantidad de imágenes para teléfonos móviles, imágenes de alta definición están sacados de la resolución es bastante alto, por supuesto, el espacio de almacenamiento también grande. Se crearán problemas, cada usuario que cargue una imagen 3M cómo hacerlo?

Pero el espacio de almacenamiento en disco duro es ahora aparentemente sin valor, 1T, 2T casualmente, la tienda es el dinero puede ser usado para resolver el problema.

Pero la velocidad es demasiado valioso, si un usuario carga su página se carga cada día y un día y medio, porque la imagen es demasiado grande causa de que no es el dinero puede resolver el problema.

Debido entorno de red del usuario que está incontrolable. Por lo que sólo puede considerar la calidad de las imágenes comprimidas a fin de garantizar la velocidad de apertura sitio.

 

requisitos de compresión

compresión de la imagen, en mi mente están los siguientes requisitos.

1, se puede controlar el grado de compresión, comprimidos en lo pequeño que piensa lo pequeño.

2, después de la compresión de la imagen tanto como sea posible sin distorsión.

3, una compresión más rápida.

4, el código es simple, una menor dependencia.

 

realización

Con estos requisitos, entonces para encontrar, encontrar Thumbnailator, herramientas de código abierto utilizan un google.

Esta clase de herramienta cumple con todos los requisitos antes mencionados.

Al mismo tiempo, hay otro método para el tratamiento de imágenes, como la rotación, recorte, añadir marcas de agua y así sucesivamente.

Github domicilio indicado anteriormente es: https://github.com/coobird/thumbnailator

dirección del experto

<dependency> 
   <groupId> net.coobird </ groupId> 
   <artifactId> thumbnailator </ artifactId> 
   <versión> 0.4.8 </ version> 
</ dependency>

Utilice especial simple: una línea de código para obtener

Thumbnails.of ( "ruta original archivo") 
        .scale (1F) 
        .outputQuality (0.5f) 
        .toFile ( "ruta del archivo comprimido");

En el que la escala se especifica tamaño de la imagen, un valor entre 0 y 1, 1f es el tamaño original de 0,5 es la mitad del tamaño de la imagen original, el tamaño se refiere aquí a la longitud y anchura de la imagen.

El outputQuality es la calidad de la imagen, el valor está en el 0-1, más cerca de 1 mejor será la calidad, el más próximo a 0 el peor es la calidad.

Por encima de imagen comprimida es suficiente.

 

ventaja

1, simple y fácil de usar.

2, la calidad de compresión buena foto. Como sigue: donde es el original 100, es 50 0.5f

3, buena calidad de imagen A continuación se muestra una comparación del original y 0.25f

Después se comprime lo anterior, la siguiente es la imagen original, para ver salir de ella?

 

otras características

Finalmente, conecte las otras funciones usando un ejemplo sencillo

Copiar el código
java.awt.image.BufferedImage importación; 
java.io.File importación; 
java.io.FileOutputStream importación; 
java.io.IOException importación; 
java.io.OutputStream importación; 

javax.imageio.ImageIO importación; 

net.coobird.thumbnailator.Thumbnails de importación; 
net.coobird.thumbnailator.geometry.Positions de importación; 

public class ThumbnailatorTest { 

    / ** 
     * 
     * @param args 
     * @throws IOException 
     * / 
    void main (String [] args) throws IOException public static { 
        ThumbnailatorTest thumbnailatorTest = new ThumbnailatorTest (); 
        thumbnailatorTest.test1 (); 
        thumbnailatorTest.test2 ();
        thumbnailatorTest.test3 (); 
        thumbnailatorTest.test4 (); 
        thumbnailatorTest.test5 (); 
        thumbnailatorTest.test6 (); 
        thumbnailatorTest.test7 (); 
        thumbnailatorTest.test8 (); 
        thumbnailatorTest.test9 (); 
    } 

    / ** 
     * tamaños especificados zoom 
     * 
     * @throws IOException 
     * / 
    privada test1 vacío () throws IOException { 
        / * 
         * tamaño (ancho, altura) que si la imagen transversal 200 es pequeña, menos de 300, constante 
         * Si un cruce de imágenes menor de 200, superior a 300 grande, de alta a 300, la misma proporción de la imagen si la imagen es más grande que la cruz 200, superior a 300 pequeña abajo, transversal a 200, la misma proporción imágenes 
         * Si la imagen es mayor que la cruz 200, superior a 300 panorama reducir la amplitud horizontal o alto 300 200 
         * /
        . Thumbnails.of ( "imágenes / test.jpg") tamaño (200, 300) .toFile ( "C: /image_200x300.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg") tamaño (2560, 2048) .toFile ( "C: /image_2560x2048.jpg."); 
    } 

    / ** 
     *按照比例进行缩放
     * 
     * @throws IOException 
     * / 
    test2 private void () throws IOException { 
        / ** 
         * Escala (比例) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Escala (0,25 f) .toFile ( "C: /image_25%.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg") escala (1.10f) .toFile ( "C: /image_110%.jpg.");
 
    void privada test3 () throws IOException { 
        / ** 
         * keepAspectRatio (false) de acuerdo con el valor por defecto en escala 
         * / 
        Thumbnails.of ( "Images / test.jpg"). tamaño (120, 120) .keepAspectRatio (false) .toFile ( "C : /image_120x120.jpg "); 
    } 

    / ** 
     * giratorio 
     * 
     * @throws IOException 
     * / 
    Test4 void privada () throws IOException { 
        / ** 
         , * rotate positivo (ángulo): negativo hacia la derecha: la izquierda 
         * / 
        miniaturas . .de ( "Images / test.jpg") tamaño (1280, 1024) .rotate (90) .toFile ( "C: /image+90.jpg"); 
        Thumbnails.of ( "Images / test.jpg") .size (1280, 1024) .rotate ( -90) .toFile ( "C: /iamge-90.jpg");
    } 

    / ** 
     * Marca de agua
     * 
     * @throws IOException
     * / 
    Test5 private void () throws IOException { 
        / ** 
         * marca de agua (位置,水印图,透明度) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280, 1024) .watermark (Positions.BOTTOM_RIGHT , ImageIO.read (nuevo archivo ( "images / watermark.png")), 0.5f) 
                .outputQuality (0.8f) .toFile ( "C: /image_watermark_bottom_right.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280, 1024) .watermark (Positions.CENTER, ImageIO.read (nuevo archivo ( "images / watermark.png")), 0.5f) 
                .outputQuality (0,8 f) .toFile ( "C: /image_watermark_center.jpg");

        / ** 
         *图片中心400 * 400的区域
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). SourceRegion (Positions.CENTER, 400, 400) .size (200, 200) .keepAspectRatio (falso) 
                .toFile ( "C: /image_region_center.jpg"); 
        / ** 
         *图片右下400 * 400的区域
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.BOTTOM_RIGHT, 400, 400) .size (200, 200) .keepAspectRatio (falso) 
                . TOFILE ( "C: /image_region_bootom_right.jpg"); 
        / ** 
         *指定坐标 
         * /
        . Thumbnails.of ( "imágenes / test.jpg") sourceRegion (600, 500, 400, 400) .size (200, 200) .keepAspectRatio (false) .toFile ( "C: /image_region_coord.jpg"); 
    } 

    / ** 
     *转化图像格式
     * 
     * @throws IOException 
     * / 
    test7 private void () throws IOException { 
        / ** 
         * outputFormat (图像格式) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280 , 1024) .outputFormat ( "PNG") TOFILE (. "C: /image_1280x1024.png"); 
        Thumbnails.of ( "imágenes / test.jpg") tamaño (1280, 1024) .outputFormat ( "gif") TOFILE ( "C: /image_1280x1024.gif");..

     * / 
    Test8 private void () throws IOException { 
        / ** 
         * toOutputStream (流对象)  
         * / 
        OutputStream OS = new FileOutputStream ( "C: / image_1280x1024_OutputStream.
        Thumbnails.of ( "imágenes / test.jpg") tamaño (1280, 1024) .toOutputStream (OS).; 
    } 

    / ** 
     *输出到BufferedImage 
     * 
     * @throws IOException 
     * / 
    privada test9 vacío () throws IOException { 
        / ** 
         * asBufferedImage ()返回BufferedImage 
         * / 
        BufferedImage miniatura = Thumbnails.of ( "images / test.jpg"). tamaño (1280, 1024) .asBufferedImage (); 
        ImageIO.write (miniatura, "jpg", el nuevo archivo ( "C: /image_1280x1024_BufferedImage.jpg")); 
    } 
}
 
Copiar el código

Otros detalles específicos del método pueden ir a ver a la API oficial u otros recursos en la red.

catálogo de lectura

prefacio

A medida que el programador de Java del servidor mosca, imagen esto ha sido un dolor de cabeza.

Ahora en muchos sitios, subir fotos tienen esta característica, pero ahora una gran cantidad de imágenes para teléfonos móviles, imágenes de alta definición están sacados de la resolución es bastante alto, por supuesto, el espacio de almacenamiento también grande. Se crearán problemas, cada usuario que cargue una imagen 3M cómo hacerlo?

Pero el espacio de almacenamiento en disco duro es ahora aparentemente sin valor, 1T, 2T casualmente, la tienda es el dinero puede ser usado para resolver el problema.

Pero la velocidad es demasiado valioso, si un usuario carga su página se carga cada día y un día y medio, porque la imagen es demasiado grande causa de que no es el dinero puede resolver el problema.

Debido entorno de red del usuario que está incontrolable. Por lo que sólo puede considerar la calidad de las imágenes comprimidas a fin de garantizar la velocidad de apertura sitio.

 

requisitos de compresión

compresión de la imagen, en mi mente están los siguientes requisitos.

1, se puede controlar el grado de compresión, comprimidos en lo pequeño que piensa lo pequeño.

2, después de la compresión de la imagen tanto como sea posible sin distorsión.

3, una compresión más rápida.

4, el código es simple, una menor dependencia.

 

realización

Con estos requisitos, entonces para encontrar, encontrar Thumbnailator, herramientas de código abierto utilizan un google.

Esta clase de herramienta cumple con todos los requisitos antes mencionados.

Al mismo tiempo, hay otro método para el tratamiento de imágenes, como la rotación, recorte, añadir marcas de agua y así sucesivamente.

Github domicilio indicado anteriormente es: https://github.com/coobird/thumbnailator

dirección del experto

<dependency> 
   <groupId> net.coobird </ groupId> 
   <artifactId> thumbnailator </ artifactId> 
   <versión> 0.4.8 </ version> 
</ dependency>

Utilice especial simple: una línea de código para obtener

Thumbnails.of ( "ruta original archivo") 
        .scale (1F) 
        .outputQuality (0.5f) 
        .toFile ( "ruta del archivo comprimido");

En el que la escala se especifica tamaño de la imagen, un valor entre 0 y 1, 1f es el tamaño original de 0,5 es la mitad del tamaño de la imagen original, el tamaño se refiere aquí a la longitud y anchura de la imagen.

El outputQuality es la calidad de la imagen, el valor está en el 0-1, más cerca de 1 mejor será la calidad, el más próximo a 0 el peor es la calidad.

Por encima de imagen comprimida es suficiente.

 

ventaja

1, simple y fácil de usar.

2, la calidad de compresión buena foto. Como sigue: donde es el original 100, es 50 0.5f

3, buena calidad de imagen A continuación se muestra una comparación del original y 0.25f

Después se comprime lo anterior, la siguiente es la imagen original, para ver salir de ella?

 

otras características

Finalmente, conecte las otras funciones usando un ejemplo sencillo

Copiar el código
java.awt.image.BufferedImage importación; 
java.io.File importación; 
java.io.FileOutputStream importación; 
java.io.IOException importación; 
java.io.OutputStream importación; 

javax.imageio.ImageIO importación; 

net.coobird.thumbnailator.Thumbnails de importación; 
net.coobird.thumbnailator.geometry.Positions de importación; 

public class ThumbnailatorTest { 

    / ** 
     * 
     * @param args 
     * @throws IOException 
     * / 
    void main (String [] args) throws IOException public static { 
        ThumbnailatorTest thumbnailatorTest = new ThumbnailatorTest (); 
        thumbnailatorTest.test1 (); 
        thumbnailatorTest.test2 ();
        thumbnailatorTest.test3 ();
        thumbnailatorTest.test4 (); 
        thumbnailatorTest.test5 (); 
        thumbnailatorTest.test6 (); 
        thumbnailatorTest.test7 (); 
        thumbnailatorTest.test8 (); 
        thumbnailatorTest.test9 (); 
    } 

    / ** 
     * escalado tamaño especificado 
     * 
     * @throws IOException 
     * / 
    privada test1 void () throws IOException { 
        / * 
         * tamaño (anchura, altura) de 200 horas cuando la imagen lateral, menor que 300, constante 
         * Si una imagen cruz, es mayor que 200 a menos de 300, 300 a una alta reducción , si la misma proporción de la imagen 200 horizontal de la imagen, alta relación de menos de 300, el abajo cruz a 200, la misma proporción imágenes 
         * Si la imagen es más grande que la cruz 200, superior a 300 panorama reducir la amplitud horizontal o alto como 200 300
         * /
        . Thumbnails.of ( "imágenes / test.jpg") tamaño (200, 300) .toFile ( "C: /image_200x300.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg") tamaño (2560, 2048) .toFile ( "C: /image_2560x2048.jpg."); 
    } 

    / ** 
     *按照比例进行缩放
     * 
     * @throws IOException 
     * / 
    test2 private void () throws IOException { 
        / ** 
         * Escala (比例) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Escala (0,25 f) .toFile ( "C: /image_25%.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg") escala (1.10f) .toFile ( "C: /image_110%.jpg.");
 
    void privada test3 () throws IOException { 
        / ** 
         * keepAspectRatio (false) de acuerdo con el valor por defecto en escala 
         * / 
        Thumbnails.of ( "Images / test.jpg"). tamaño (120, 120) .keepAspectRatio (false) .toFile ( "C : /image_120x120.jpg "); 
    } 

    / ** 
     * giratorio 
     * 
     * @throws IOException 
     * / 
    Test4 void privada () throws IOException { 
        / ** 
         , * rotate positivo (ángulo): negativo hacia la derecha: la izquierda 
         * / 
        miniaturas . .de ( "Images / test.jpg") tamaño (1280, 1024) .rotate (90) .toFile ( "C: /image+90.jpg"); 
        Thumbnails.of ( "Images / test.jpg") .size (1280, 1024) .rotate ( -90) .toFile ( "C: /iamge-90.jpg");
    } 

    / ** 
     * Marca de agua
     * 
     * @throws IOException
     * / 
    Test5 private void () throws IOException { 
        / ** 
         * marca de agua (位置,水印图,透明度) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280, 1024) .watermark (Positions.BOTTOM_RIGHT , ImageIO.read (nuevo archivo ( "images / watermark.png")), 0.5f) 
                .outputQuality (0.8f) .toFile ( "C: /image_watermark_bottom_right.jpg"); 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280, 1024) .watermark (Positions.CENTER, ImageIO.read (nuevo archivo ( "images / watermark.png")), 0.5f) 
                .outputQuality (0,8 f) .toFile ( "C: /image_watermark_center.jpg");

        / ** 
         *图片中心400 * 400的区域
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). SourceRegion (Positions.CENTER, 400, 400) .size (200, 200) .keepAspectRatio (falso) 
                .toFile ( "C: /image_region_center.jpg"); 
        / ** 
         *图片右下400 * 400的区域
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.BOTTOM_RIGHT, 400, 400) .size (200, 200) .keepAspectRatio (falso) 
                . TOFILE ( "C: /image_region_bootom_right.jpg"); 
        / ** 
         *指定坐标 
         * /
        . Thumbnails.of ( "imágenes / test.jpg") sourceRegion (600, 500, 400, 400) .size (200, 200) .keepAspectRatio (false) .toFile ( "C: /image_region_coord.jpg"); 
    } 

    / ** 
     *转化图像格式
     * 
     * @throws IOException 
     * / 
    test7 private void () throws IOException { 
        / ** 
         * outputFormat (图像格式) 
         * / 
        Thumbnails.of ( "imágenes / test.jpg"). Tamaño (1280 , 1024) .outputFormat ( "PNG") TOFILE (. "C: /image_1280x1024.png"); 
        Thumbnails.of ( "imágenes / test.jpg") tamaño (1280, 1024) .outputFormat ( "gif") TOFILE ( "C: /image_1280x1024.gif");..
 
     * / 
    privada test8 vacío () throws IOException { 
        / ** 
         * toOutputStream (流对象) 
         * / 
        OutputStream OS = new FileOutputStream ( "C: / image_1280x1024_OutputStream.
        Thumbnails.of ( "imágenes / test.jpg") tamaño (1280, 1024) .toOutputStream (OS).; 
    } 

    / ** 
     *输出到BufferedImage 
     * 
     * @throws IOException 
     * / 
    privada test9 vacío () throws IOException { 
        / ** 
         * asBufferedImage ()返回BufferedImage 
         * / 
        BufferedImage miniatura = Thumbnails.of ( "images / test.jpg"). tamaño (1280, 1024) .asBufferedImage (); 
        ImageIO.write (miniatura, "jpg", el nuevo archivo ( "C: /image_1280x1024_BufferedImage.jpg")); 
    } 
}
 
Copiar el código

Otros detalles específicos del método pueden ir a ver a la API oficial u otros recursos en la red.

Supongo que te gusta

Origin www.cnblogs.com/wpcnblog/p/12503839.html
Recomendado
Clasificación