Java Java imagem Compressão compressão de imagem

Java Compress Pictures

 

catálogo Leia

prefácio

Como o programador servidor mosca java, imaginar essa coisa tem sido uma dor de cabeça.

Agora em muitos sites, envio de fotos tem esse recurso, mas agora um monte de fotos para telefones móveis, imagens de alta definição são retirados da resolução é bastante elevado, é claro, o espaço de armazenamento também grande. Problemas serão criados, cada usuário fazer o upload de uma imagem 3M como fazer?

Mas o espaço de armazenamento em disco, aparentemente, agora duro é inútil, 1T, 2T casualmente, a loja é o dinheiro pode ser usado para resolver o problema.

Mas a velocidade é muito valiosa, se um usuário carrega sua página carrega todos os dias dias e meio, porque a imagem é muito grande causa não é o dinheiro pode resolver o problema.

Porque o ambiente de rede do usuário está incontrolável. Então você só pode considerar a qualidade das imagens comprimidas de forma a garantir a velocidade aberto site.

 

requisitos de compressão

compressão de imagem, na minha mente há os seguintes requisitos.

1, pode controlar o grau de compressão, comprimido em quão pequeno você pensa quão pequena.

2, após a compressão da imagem, tanto quanto possível, sem distorção.

3, a compressão mais rápido.

4, o código é simples, menos dependência.

 

realização

Com estes requisitos, em seguida, para encontrar, encontrar Thumbnailator, ferramentas de código aberto usar um google.

Esta classe ferramenta preenche todos os requisitos acima mencionados.

Ao mesmo tempo existe o outro método para o processamento de imagens, tais como a rotação e recorte, a adição de marca de água e assim por diante.

Github acima endereço é: https://github.com/coobird/thumbnailator

endereço maven

<dependency> 
   <groupId> net.coobird </ groupId> 
   <artifactId> thumbnailator </ artifactId> 
   <versão> 0.4.8 </ version> 
</ dependency>

Use simples especial: uma linha de código para obter

Thumbnails.of ( "caminho original do arquivo") 
        .scale (1F) 
        .outputQuality (0.5f) 
        .toFile ( "caminho do arquivo comprimido");

Em que a escala é especificado o tamanho da imagem, um valor entre 0 e 1, 1-F é o tamanho original de 0,5 é metade do tamanho da imagem original, o tamanho refere-se aqui ao comprimento e largura do quadro.

O outputQuality é a qualidade da imagem, o valor está no 0-1, mais próximo de 1, melhor a qualidade, o mais próximo de 0 pior a qualidade.

Para imagem comprimida acima, é o suficiente.

 

vantagem

1, simples e fácil de usar.

2, qualidade de compressão boa foto. Como se segue: onde é o original 100, é de 50 0.5f

3, boa qualidade de imagem Abaixo está uma comparação entre o original e 0.25f

Após o acima é comprimido, o seguinte é a imagem original, para ver com isso?

 

outras características

Por último, coloque as outras funções usando um exemplo simples

Copie o código
importação java.awt.image.BufferedImage; 
importação java.io.File; 
importação java.io.FileOutputStream; 
importação Java.io.IOException; 
importação java.io.OutputStream; 

importação javax.imageio.ImageIO; 

net.coobird.thumbnailator.Thumbnails importação; 
net.coobird.thumbnailator.geometry.Positions importação; 

classe pública ThumbnailatorTest { 

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

    / ** 
     * tamanhos especificados zoom 
     * 
     * @throws IOException 
     * / 
    privado test1 void () throws IOException { 
        / * 
         * tamanho (largura, altura) do que se a-picture cruz 200 é pequena, menos de 300, constante 
         * Se uma cruz-retratos menor do que 200, superior a 300 grande, de alta para baixo para 300, na mesma proporção da imagem se a imagem for maior do que a cruz 200, superior a 300 pequeno para baixo cruz, a 200, a mesma proporção fotos 
         * Se a imagem for maior do que a cruz 200, superior a 300 retrato grande escala para baixo, horizontal ou alta 300 200 
         * /
        . Thumbnails.of ( "imagens / test.jpg") de tamanho (200, 300) .toFile ( "C: /image_200x300.jpg"); 
        Thumbnails.of ( "imagens / test.jpg") tamanho (2560, 2048) .toFile ( "C: /image_2560x2048.jpg");. 
    } 

    / ** 
     *按照比例进行缩放
     * 
     * @throws IOException 
     * / 
    test2 private void () throws IOException { 
        / ** 
         * escala (比例) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Escala (0,25 f) .toFile ( "C: /image_25%.jpg"); 
        Thumbnails.of ( "imagens / test.jpg") escala (1.10f) .toFile ( "C: /image_110%.jpg");.
 
    vazio privada Test3 () throws IOException { 
        / **
         * KeepAspectRatio (falso) de acordo com o padrão escalonado 
         * / 
        tamanho (120, 120) .keepAspectRatio (a falsa) .toFile Thumbnails.of ( "Imagens / test.jpg") ( "C: /image_120x120.jpg").; 
    } 

    / ** 
     * rotativa 
     * 
     * @throws IOException 
     * / 
    private void Test4 () você joga IOException { 
        / ** 
         * Rotate (ângulo) de positivo: no sentido horário negativo: contador 
         * / 
        Thumbnails.of ( "Images / Teste. . JPG ") tamanho (1280, 1024) .rotate (90) .toFile (" C: /image+90.jpg "); 
        Thumbnails.of (" Imagens / test.jpg ") tamanho (1280, 1024) .. Rodar (-90) .toFile ( "C : /iamge-90.jpg");
    } 

    / ** 
     * Watermark
     *  
     * @throws IOException
     * / 
    Test5 private void () throws IOException { 
        / ** 
         * marca d'água (位置,水印图,透明度) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Size (1280, 1024) .watermark (Posições. BOTTOM_RIGHT, ImageIO.read (new File ( "images / watermark.png")), 0.5f) 
                .outputQuality (0.8f) .toFile ( "C: /image_watermark_bottom_right.jpg"); 
        Thumbnails.of ( "images / test.jpg"). Tamanho (1280, 1024) .watermark (Positions.CENTER, ImageIO.read (new File ( "images / watermark.png")), 0.5f) 
                .outputQuality (0,8 f) .toFile ( "C: /image_watermark_center.jpg");

        / **  
        ** / 
         *图片中心400 * 400的区域
         * 400 * região centro 400 da imagem 
         * / 
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.CENTER, 400, 400) .size (200, 200) .keepAspectRatio (false) 
        Thumbnails.of ( "Images / test.jpg"). sourceRegion (Positions.CENTER, 400, 400) .size (200 é, 200 é ) .keepAspectRatio (false) 
                .toFile ( "C: /image_region_center.jpg"); 
                .toFile ( "C: /image_region_center.jpg"); 
        / ** 
        / ** 
         *图片右下400 * 400的区域
         * imagem área inferior direita da 400 * 400 
         * / 
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.BOTTOM_RIGHT, 400, 400) .size (200, 200) .keepAspectRatio (false) 
        . Thumbnails.of ( "ImagesRF Royalty Free / test.jpg") sourceRegion (as posições. BOTTOM_RIGHT, 400, 400) .size (200 é, 200 é) .keepAspectRatio (a falsa) 
                . TOFILE ( "C: /image_region_bootom_right.jpg"); 
                .toFile ( "C: /image_region_bootom_right.jpg"); 
        / ** 
        / ** 
         *指定坐标
         * coordenadas designadas 
         * /
        . Thumbnails.of ( "imagens / test.jpg") sourceRegion (600, 500, 400, 400) .size (200, 200) .keepAspectRatio (falso) .toFile ( "C: /image_region_coord.jpg"); 
    } 

    / **
     *转化图像格式
     * 
     * @throws IOException 
     * / 
    test7 private void () throws IOException { 
        / ** 
         * outputFormat (图像格式) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Tamanho (1280, 1024). outputFormat ( "PNG") TOFILE ( "C: /image_1280x1024.png");. 
        Thumbnails.of ( "imagens / test.jpg") tamanho (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 ( "images / test.jpg") tamanho (1280, 1024) .toOutputStream (os); 
    } 

    / ** 
     *输出到BufferedImage 
     * 
     * @throws IOException 
     * / 
    test9 private void () throws IOException { 
        / ** 
         * asBufferedImage ()返回BufferedImage 
         * / 
        BufferedImage miniaturas = Thumbnails.of ( "images / test.jpg"). tamanho (1280, 1024) .asBufferedImage (); 
        ImageIO.write (miniatura, "jpg", new File ( "C: /image_1280x1024_BufferedImage.jpg")); 
    } 
}
 
Copie o código

Outros detalhes específicos do método pode ir verificar a API oficial ou outros recursos na rede.

catálogo Leia

prefácio

Como o programador servidor mosca java, imaginar essa coisa tem sido uma dor de cabeça.

Agora em muitos sites, envio de fotos tem esse recurso, mas agora um monte de fotos para telefones móveis, imagens de alta definição são retirados da resolução é bastante elevado, é claro, o espaço de armazenamento também grande. Problemas serão criados, cada usuário fazer o upload de uma imagem 3M como fazer?

Mas o espaço de armazenamento em disco, aparentemente, agora duro é inútil, 1T, 2T casualmente, a loja é o dinheiro pode ser usado para resolver o problema.

Mas a velocidade é muito valiosa, se um usuário carrega sua página carrega todos os dias dias e meio, porque a imagem é muito grande causa não é o dinheiro pode resolver o problema.

Porque o ambiente de rede do usuário está incontrolável. Então você só pode considerar a qualidade das imagens comprimidas de forma a garantir a velocidade aberto site.

 

requisitos de compressão

compressão de imagem, na minha mente há os seguintes requisitos.

1, pode controlar o grau de compressão, comprimido em quão pequeno você pensa quão pequena.

2, após a compressão da imagem, tanto quanto possível, sem distorção.

3, a compressão mais rápido.

4, o código é simples, menos dependência.

 

realização

Com estes requisitos, em seguida, para encontrar, encontrar Thumbnailator, ferramentas de código aberto usar um google.

Esta classe ferramenta preenche todos os requisitos acima mencionados.

Ao mesmo tempo existe o outro método para o processamento de imagens, tais como a rotação e recorte, a adição de marca de água e assim por diante.

Github acima endereço é: https://github.com/coobird/thumbnailator

endereço maven

<dependency> 
   <groupId> net.coobird </ groupId> 
   <artifactId> thumbnailator </ artifactId> 
   <versão> 0.4.8 </ version> 
</ dependency>

Use simples especial: uma linha de código para obter

Thumbnails.of ( "caminho original do arquivo") 
        .scale (1F) 
        .outputQuality (0.5f) 
        .toFile ( "caminho do arquivo comprimido");

Em que a escala é especificado o tamanho da imagem, um valor entre 0 e 1, 1-F é o tamanho original de 0,5 é metade do tamanho da imagem original, o tamanho refere-se aqui ao comprimento e largura do quadro.

O outputQuality é a qualidade da imagem, o valor está no 0-1, mais próximo de 1, melhor a qualidade, o mais próximo de 0 pior a qualidade.

Para imagem comprimida acima, é o suficiente.

 

vantagem

1, simples e fácil de usar.

2, qualidade de compressão boa foto. Como se segue: onde é o original 100, é de 50 0.5f

3, boa qualidade de imagem Abaixo está uma comparação entre o original e 0.25f

Após o acima é comprimido, o seguinte é a imagem original, para ver com isso?

 

outras características

Por último, coloque as outras funções usando um exemplo simples

Copie o código
importação java.awt.image.BufferedImage; 
importação java.io.File; 
importação java.io.FileOutputStream; 
importação Java.io.IOException; 
importação java.io.OutputStream; 

importação javax.imageio.ImageIO; 

net.coobird.thumbnailator.Thumbnails importação; 
net.coobird.thumbnailator.geometry.Positions importação; 

classe pública ThumbnailatorTest { 

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

    / ** 
     * tamanhos especificados zoom 
     * 
     * @throws IOException 
     * / 
    privado test1 void () throws IOException { 
        / * 
         * tamanho (largura, altura) do que se a-picture cruz 200 é pequena, menos de 300, constante 
         * Se uma cruz-retratos menor do que 200, superior a 300 grande, de alta para baixo para 300, na mesma proporção da imagem se a imagem for maior do que a cruz 200, superior a 300 pequeno para baixo cruz, a 200, a mesma proporção fotos 
         * Se a imagem for maior do que a cruz 200, superior a 300 retrato grande escala para baixo, horizontal ou alta 300 200 
         * /
        . Thumbnails.of ( "imagens / test.jpg") de tamanho (200, 300) .toFile ( "C: /image_200x300.jpg"); 
        Thumbnails.of ( "imagens / test.jpg") tamanho (2560, 2048) .toFile ( "C: /image_2560x2048.jpg");. 
    } 

    / ** 
     *按照比例进行缩放
     * 
     * @throws IOException 
     * / 
    test2 private void () throws IOException { 
        / ** 
         * escala (比例) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Escala (0,25 f) .toFile ( "C: /image_25%.jpg"); 
        Thumbnails.of ( "imagens / test.jpg") escala (1.10f) .toFile ( "C: /image_110%.jpg");.
 
    vazio privada Test3 () throws IOException { 
        / ** 
         * keepAspectRatio (para falso) de acordo com o padrão escalado 
         * / 
        Thumbnails.of ( "Images / test.jpg"). size (120, 120) .keepAspectRatio (para falso) .toFile ( "C : /image_120x120.jpg "); 
    } 

    / ** 
     * rotativa 
     * 
     * @throws IOException 
     * / 
    private void Test4 () throws IOException { 
        / ** 
         , * rotação positiva (ângulo): negativo no sentido horário: horário 
         * / 
        Miniaturas . .de ( "Imagens / test.jpg") tamanho (1280, 1024) .rotate (90) .toFile ( "C: /image+90.jpg"); 
        Thumbnails.of ( "Imagens / test.jpg") .size (1280, 1024) .rotate ( -90) .toFile ( "C: /iamge-90.jpg");
    } 

    / ** 
     * Watermark
     *  
     * @throws IOException
     * / 
    Test5 private void () throws IOException { 
        / ** 
         * marca d'água (位置,水印图,透明度) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Size (1280, 1024) .watermark (Posições. BOTTOM_RIGHT, ImageIO.read (new File ( "images / watermark.png")), 0.5f) 
                .outputQuality (0.8f) .toFile ( "C: /image_watermark_bottom_right.jpg"); 
        Thumbnails.of ( "images / test.jpg"). Tamanho (1280, 1024) .watermark (Positions.CENTER, ImageIO.read (new File ( "images / watermark.png")), 0.5f) 
                .outputQuality (0,8 f) .toFile ( "C: /image_watermark_center.jpg");

        / ** 
         *图片中心400 * 400的区域
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.CENTER, 400, 400) .size (200, 200) .keepAspectRatio (false) 
                .toFile ( "C: /image_region_center.jpg"); 
        / ** 
         *图片右下400 * 400的区域
         * / 
        Thumbnails.of ( "images / test.jpg"). SourceRegion (Positions.BOTTOM_RIGHT, 400, 400) .size (200, 200) .keepAspectRatio (false) 
                . TOFILE ( "C: /image_region_bootom_right.jpg"); 
        / ** 
         *指定坐标 
         * /
        Thumbnails.of ( "imagens / test.jpg") sourceRegion (600, 500, 400, 400) .size (200, 200) .keepAspectRatio (falso) .toFile ( "C:. Image_region_coord /. jpg ");
 
     *转化图像格式
     * 
     * @throws IOException 
     * / 
    test7 private void () throws IOException { 
        / ** 
         * outputFormat (图像格式) 
         * / 
        Thumbnails.of ( "images / test.jpg"). Tamanho (1280 , 1024) .outputFormat ( "PNG") TOFILE (. "C: /image_1280x1024.png"); 
        Thumbnails.of ( "imagens / test.jpg") tamanho (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 ( "images / test.jpg") tamanho (1280, 1024) .toOutputStream (os); 
    } 

    / ** 
     *输出到BufferedImage 
     * 
     * @throws IOException 
     * / 
    test9 private void () throws IOException { 
        / ** 
         * asBufferedImage ()返回BufferedImage 
         * / 
        BufferedImage miniaturas = Thumbnails.of ( "images / test.jpg"). tamanho (1280, 1024) .asBufferedImage (); 
        ImageIO.write (miniatura, "jpg", new File ( "C: /image_1280x1024_BufferedImage.jpg")); 
    } 
}
 
Copie o código

Outros detalhes específicos do método pode ir verificar a API oficial ou outros recursos na rede.

Acho que você gosta

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