Java dos formas de obtener la cadena de base64 de la imagen a través de la dirección URL de la imagen Java dos formas de obtener la cadena de base64 de la imagen a través de la dirección de la imagen url

En el trabajo, encontré la necesidad de obtener la base64 de la imagen a través de la URL de la imagen. Al principio, utilicé el método en línea a través de Toolkit. Aunque el código de implementación es relativamente corto, ocasionalmente encuentro la situación de que la imagen se convierte incorrectamente a base64 bit. No sé por qué.

Después de eso, me conecté en línea y busqué una manera de convertir el flujo binario de la imagen en base64. Ambos métodos son efectivos para la prueba profesional. De vez en cuando aparecen a través de Toolkit. Después de cambiar a base64, se muestra el problema de la visualización incompleta. Por lo tanto, se recomienda realizar la conversión descargando la conversión de flujo binario.

Adjunte el siguiente código:

Código de copia
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;


import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.net.HttpURLConnection;
import java.net.URL;


ImageUtils de clase pública {

    
    
    Cadena estática pública getBase64ByImgUrl (URL de cadena) {
        Sufijo de cadena = url.substring (url.lastIndexOf (".") + 1);
        tratar {
            URL URL = nueva URL (url);
            ByteArrayOutputStream baos = nuevo ByteArrayOutputStream ();
            Imagen imagen = Toolkit.getDefaultToolkit (). GetImage (urls);
            BufferedImage biOut = toBufferedImage (imagen);
            ImageIO.write (biOut, sufijo, baos);
            Cadena base64Str = Base64Util.encode (baos.toByteArray ());
            volver base64Str;
        } catch (Excepción e) {
            regreso "";
        }
        
    }
    
    Public BufferedImage toBufferedImage (Imagen de imagen) {  
        if (image instanceof BufferedImage) {  
            imagen de retorno (BufferedImage);  
        }  
        // Este código garantiza que se carguen todos los píxeles de la imagen.  
        imagen = nueva ImageIcon (imagen) .getImage ();  
        BufferedImage bimage = null;  
        GraphicsEnvironment ge = GraphicsEnvironment  
                .getLocalGraphicsEnvironment ();  
        tratar {  
            int transparencia = Transparencia.OPAQUE;  
            GraphicsDevice gs = ge.getDefaultScreenDevice ();  
            GraphicsConfiguration gc = gs.getDefaultConfiguration ();  
            bimage = gc.createCompatibleImage (image.getWidth (null),  
                    image.getHeight (nulo), transparencia);  
        } catch (HeadlessException e) {  
            // El sistema no tiene pantalla  
        }  
        if (bimage == null) {  
            // Crea una imagen almacenada usando el modelo de color predeterminado  
            int type = BufferedImage.TYPE_INT_RGB;  
            bimage = new BufferedImage (image.getWidth (null),  
                    image.getHeight (nulo), tipo);  
        }  
        // Copiar imagen a imagen almacenada  
        Gráficos g = bimage.createGraphics ();  
        // Pintar la imagen en la imagen almacenada  
        g.drawImage (imagen, 0, 0, nulo);  
        g.dispose ();  
        bimage de retorno;  
    }  
    / **
     * Obtenga la cadena base64 de la imagen a través de la url de la imagen
     * @param imgUrl url de imagen
     * @return devuelve la cadena de imagen base64
     * /
    Cadena estática pública image2Base64 (String imgUrl) {  

        URL url = nulo;  

        InputStream es = nulo;   

        ByteArrayOutputStream outStream = nulo;  

        HttpURLConnection httpUrl = nulo;  

        tratar{  

            url = nueva URL (imgUrl);  

            httpUrl = (HttpURLConnection) url.openConnection ();  

            httpUrl.connect ();  

            httpUrl.getInputStream ();  

            es = httpUrl.getInputStream ();            

              

            outStream = nuevo ByteArrayOutputStream ();  

            // Crear una cadena de búfer  

            byte [] buffer = nuevo byte [1024];  

            // La longitud de la cadena leída cada vez, si es -1, significa que todo es leído  

            int len ​​= 0;  

            // Use una secuencia de entrada para leer datos del búfer  

            while ((len = is.read (buffer))! = -1) {  

                // Use la secuencia de salida para escribir datos en el búfer, el parámetro del medio representa dónde comenzar a leer y len representa la duración de la lectura  

                outStream.write (buffer, 0, len);  

            }  

            // Base64 que codifica la matriz de bytes  

            return Base64Util.encode (outStream.toByteArray ());  

        } catch (Excepción e) {  

            e.printStackTrace ();  

        }  

        finalmente{  

            if (es! = nulo)  

            {  

                tratar {  

                    está cerca();  

                } catch (IOException e) {  

                    e.printStackTrace ();  

                }  

            }  

            if (outStream! = nulo)  

            {  

                tratar {  

                    outStream.close ();  

                } catch (IOException e) {  

                    e.printStackTrace ();  

                }  

            }  

            if (httpUrl! = nulo)  

            {  

                httpUrl.disconnect ();  

            }  

        }  

        return imgUrl;  

    }  
}    
Código de copia

Donde

El método getBase64ByImgUrl se obtiene a través de Toolkit. En cuanto a por qué no hay comentarios, porque no entiendo el principio, lo copié.
El método image2Base64 es mediante la descarga de una secuencia binaria, que por supuesto se copia. Está escrito para resumir. La próxima vez que encuentre el mismo problema, no tiene que verificarlo en todas partes. 
Adjunte el código Base64Util:
Código de copia
 1 import java.io.ByteArrayOutputStream;
 2 import java.io.File;
 3 import java.io.IOException;
 4 import java.util.regex.Matcher;
 5 import java.util.regex.Pattern;
 6 6 
 7 import javax.imageio.stream.FileImageInputStream;
 8 
 9 import sun.misc.BASE64Decoder;
10 import sun.misc.BASE64Encoder;
11 
12 clase pública Base64Util {
13 / **
14 * Cadena para representar
15 * @param base64Str
16 * @ retorno
17 * /
18 decodificación de byte estático público [] (String base64Str) {
19 bytes [] b = nulo;
20 decodificador BASE64Decoder = nuevo BASE64Decoder ();
21 prueba {
22 b = decoder.decodeBuffer (replaceEnter (base64Str));
23} catch (IOException e) {
24 e.printStackTrace ();
25}
26 retorno b;
27}
28     
29 / **
30 * Imagen a cuerda
31 * @param imagen
32 * @ retorno
33 * /
34 codificación de cadena estática pública (byte [] imagen) {
35 Decodificador BASE64Encoder = nuevo BASE64Encoder ();
36 return replaceEnter (decoder.encode (imagen));
37}
38     
39 codificación pública de String estática (String uri) {
40 Codificador BASE64Encoder = nuevo BASE64Encoder ();
41 return replaceEnter (encoder.encode (uri.getBytes ()));
42}
43     
44 / **
45 * 
46 * ruta de imagen @path
47 * @return
48 * /
49     
50 byte estático público [] imageTobyte (ruta de cadena) {
51 bytes [] datos = nulo;
52 FileImageInputStream input = nulo;
53 probar {
54 input = nuevo FileImageInputStream (nuevo archivo (ruta));
55 ByteArrayOutputStream salida = nuevo ByteArrayOutputStream ();
56 byte [] buf = nuevo byte [1024];
57 int numBytesRead = 0;
58 while ((numBytesRead = input.read (buf))! = -1) {
59 output.write (buf, 0, numBytesRead);
60}
61 datos = output.toByteArray ();
62 output.close ();
63 input.close ();
64             
65} catch (Excepción e) {
66 e.printStackTrace ();
67}
68         
69 datos de retorno;
70}
71     
72     
73     
74 Public static String replaceEnter (String str) {
75 String reg = "[\ n- \ r]";
76 Patrón p = Pattern.compile (reg);
77 coincidencias m = p.matcher (str);
78 devuelven m.replaceAll ("");
79}
80     
81     
82}
Código de copia

En el trabajo, encontré la necesidad de obtener la base64 de la imagen a través de la URL de la imagen. Al principio, utilicé el método en línea a través de Toolkit. Aunque el código de implementación es relativamente corto, ocasionalmente encuentro la situación de que la imagen se convierte incorrectamente a base64 bit. No sé por qué.

Después de eso, me conecté en línea y busqué una manera de convertir el flujo binario de la imagen en base64. Ambos métodos son efectivos para la prueba profesional. De vez en cuando aparecen a través de Toolkit. Después de cambiar a base64, se muestra el problema de la visualización incompleta. Por lo tanto, se recomienda realizar la conversión descargando la conversión de flujo binario.

Adjunte el siguiente código:

Código de copia
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;


import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Transparency;
import java.net.HttpURLConnection;
import java.net.URL;


ImageUtils de clase pública {

    
    
    Cadena estática pública getBase64ByImgUrl (URL de cadena) {
        Sufijo de cadena = url.substring (url.lastIndexOf (".") + 1);
        tratar {
            URL URL = nueva URL (url);
            ByteArrayOutputStream baos = nuevo ByteArrayOutputStream ();
            Imagen imagen = Toolkit.getDefaultToolkit (). GetImage (urls);
            BufferedImage biOut = toBufferedImage (imagen);
            ImageIO.write (biOut, sufijo, baos);
            Cadena base64Str = Base64Util.encode (baos.toByteArray ());
            volver base64Str;
        } catch (Excepción e) {
            regreso "";
        }
        
    }
    
    Public BufferedImage toBufferedImage (Imagen de imagen) {  
        if (image instanceof BufferedImage) {  
            imagen de retorno (BufferedImage);  
        }  
        // Este código garantiza que se carguen todos los píxeles de la imagen.  
        imagen = nueva ImageIcon (imagen) .getImage ();  
        BufferedImage bimage = null;  
        GraphicsEnvironment ge = GraphicsEnvironment  
                .getLocalGraphicsEnvironment ();  
        tratar {  
            int transparencia = Transparencia.OPAQUE;  
            GraphicsDevice gs = ge.getDefaultScreenDevice ();  
            GraphicsConfiguration gc = gs.getDefaultConfiguration ();  
            bimage = gc.createCompatibleImage (image.getWidth (null),  
                    image.getHeight (nulo), transparencia);  
        } catch (HeadlessException e) {  
            // El sistema no tiene pantalla  
        }  
        if (bimage == null) {  
            // Crea una imagen almacenada usando el modelo de color predeterminado  
            int type = BufferedImage.TYPE_INT_RGB;  
            bimage = new BufferedImage (image.getWidth (null),  
                    image.getHeight (nulo), tipo);  
        }  
        // Copiar imagen a imagen almacenada  
        Gráficos g = bimage.createGraphics ();  
        // Pintar la imagen en la imagen almacenada  
        g.drawImage (imagen, 0, 0, nulo);  
        g.dispose ();  
        bimage de retorno;  
    }  
    / **
     * Obtenga la cadena base64 de la imagen a través de la url de la imagen
     * @param imgUrl url de imagen
     * @return devuelve la cadena de imagen base64
     * /
    Cadena estática pública image2Base64 (String imgUrl) {  

        URL url = nulo;  

        InputStream es = nulo;   

        ByteArrayOutputStream outStream = nulo;  

        HttpURLConnection httpUrl = nulo;  

        tratar{  

            url = nueva URL (imgUrl);  

            httpUrl = (HttpURLConnection) url.openConnection ();  

            httpUrl.connect ();  

            httpUrl.getInputStream ();  

            es = httpUrl.getInputStream ();            

              

            outStream = nuevo ByteArrayOutputStream ();  

            // Crear una cadena de búfer  

            byte [] buffer = nuevo byte [1024];  

            // La longitud de la cadena leída cada vez, si es -1, significa que todo es leído  

            int len ​​= 0;  

            // Use una secuencia de entrada para leer datos del búfer  

            while ((len = is.read (buffer))! = -1) {  

                // Use la secuencia de salida para escribir datos en el búfer, el parámetro del medio representa dónde comenzar a leer y len representa la duración de la lectura  

                outStream.write (buffer, 0, len);  

            }  

            // Base64 que codifica la matriz de bytes  

            return Base64Util.encode (outStream.toByteArray ());  

        } catch (Excepción e) {  

            e.printStackTrace ();  

        }  

        finalmente{  

            if (es! = nulo)  

            {  

                tratar {  

                    está cerca();  

                } catch (IOException e) {  

                    e.printStackTrace ();  

                }  

            }  

            if (outStream! = nulo)  

            {  

                tratar {  

                    outStream.close ();  

                } catch (IOException e) {  

                    e.printStackTrace ();  

                }  

            }  

            if (httpUrl! = nulo)  

            {  

                httpUrl.disconnect ();  

            }  

        }  

        return imgUrl;  

    }  
}    
Código de copia

Donde

El método getBase64ByImgUrl se obtiene a través de Toolkit. En cuanto a por qué no hay comentarios, porque no entiendo el principio, lo copié.
El método image2Base64 es mediante la descarga de una secuencia binaria, que por supuesto se copia. Está escrito para resumir. La próxima vez que encuentre el mismo problema, no tiene que verificarlo en todas partes. 
Adjunte el código Base64Util:
Código de copia
 1 import java.io.ByteArrayOutputStream;
 2 import java.io.File;
 3 import java.io.IOException;
 4 import java.util.regex.Matcher;
 5 import java.util.regex.Pattern;
 6 6 
 7 import javax.imageio.stream.FileImageInputStream;
 8 
 9 import sun.misc.BASE64Decoder;
10 import sun.misc.BASE64Encoder;
11 
12 clase pública Base64Util {
13 / **
14 * Cadena para representar
15 * @param base64Str
16 * @ retorno
17 * /
18 decodificación de byte estático público [] (String base64Str) {
19 bytes [] b = nulo;
20 decodificador BASE64Decoder = nuevo BASE64Decoder ();
21 prueba {
22 b = decoder.decodeBuffer (replaceEnter (base64Str));
23} catch (IOException e) {
24 e.printStackTrace ();
25}
26 retorno b;
27}
28     
29 / **
30 * Imagen a cuerda
31 * @param imagen
32 * @ retorno
33 * /
34 codificación de cadena estática pública (byte [] imagen) {
35 Decodificador BASE64Encoder = nuevo BASE64Encoder ();
36 return replaceEnter (decoder.encode (imagen));
37}
38     
39 codificación pública de String estática (String uri) {
40 Codificador BASE64Encoder = nuevo BASE64Encoder ();
41 return replaceEnter (encoder.encode (uri.getBytes ()));
42}
43     
44 / **
45 * 
46 * ruta de imagen @path
47 * @return
48 * /
49     
50 byte estático público [] imageTobyte (ruta de cadena) {
51 bytes [] datos = nulo;
52 FileImageInputStream input = nulo;
53 probar {
54 input = nuevo FileImageInputStream (nuevo archivo (ruta));
55 ByteArrayOutputStream salida = nuevo ByteArrayOutputStream ();
56 byte [] buf = nuevo byte [1024];
57 int numBytesRead = 0;
58 while ((numBytesRead = input.read (buf))! = -1) {
59 output.write (buf, 0, numBytesRead);
60}
61 datos = output.toByteArray ();
62 output.close ();
63 input.close ();
64             
65} catch (Excepción e) {
66 e.printStackTrace ();
67}
68         
69 datos de retorno;
70}
71     
72     
73     
74 Public static String replaceEnter (String str) {
75 String reg = "[\ n- \ r]";
76 Patrón p = Pattern.compile (reg);
77 coincidencias m = p.matcher (str);
78 devuelven m.replaceAll ("");
79}
80     
81     
82}
Código de copia

Supongo que te gusta

Origin www.cnblogs.com/Anonyme/p/12704304.html
Recomendado
Clasificación