【问题标题】:Java JFileChooser .png files to byte[] black imageJava JFileChooser .png 文件到 byte[] 黑色图像
【发布时间】:2019-03-01 12:33:36
【问题描述】:

我需要将图像 .png 上传到服务器并将其显示给 Swing GUI,我正在使用 JFileChooser,用户选择一个 .png 图像并将其存储在一个字节 [] 中。后来当我尝试显示图像时,它都是黑色的。 .jpg 文件不会发生这种情况。我对 .png 图像的透明度有疑问。这是我的代码:

将图像保存到字节[]:

public byte[] AvatarToByte(String url){
    byte[] data = null;
    String extension = "";
    try{            
        BufferedImage bImage = ImageIO.read(new File(url));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if(url.toString().toLowerCase().contains(".png")){
            extension = "png";
        }else{
            extension = "jpg";
        }
        ImageIO.write(bImage, extension, bos );
        data = bos.toByteArray();
    }catch(Exception e){
        e.printStackTrace();
    }
    return data;
}

从 byte[] 到 java swing:

public ByteToAvatar(byte[] data){
    BufferedImage img = null;                       
    img = ImageIO.read(new ByteArrayInputStream(data));

    JLabel lblURL = new JLabel();
    lblURL.setBorder(new LineBorder(Color.GRAY));
    lblURL.setBackground(SystemColor.controlLtHighlight);
    lblURL.setBounds(10, 10, 80, 80);           
    lblURL.setIcon(Resize(img));
}

调整大小:

private ImageIcon Resize(Image img){
    Image newImg = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
    ImageIcon image = new ImageIcon(newImg);
    return image;
}

edit:尝试在调整大小之前显示图像,并且显示正确。 Resize(Image img) 一定有问题。

【问题讨论】:

  • 所以做一些故障排除 - 不是所有的煎饼 - 它在缩放之前显示吗?开箱时会显示吗??做一些工作不要只是问问题

标签: java image byte png


【解决方案1】:

我已经测试了您的代码,它可以正常运行。

import java.awt.Color;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.SystemColor;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.border.LineBorder;


public class Test {
    static GraphicsConfiguration gc;
    static JFrame frame;

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        frame= new JFrame(gc);  
        frame.setSize(200, 200);
        frame.setVisible(true);

        byte[] b=  AvatarToByte("e:/dog.png");
        ByteToAvatar(b);
        System.out.println();
    }

    public static byte[] AvatarToByte(String url){
        byte[] data = null;
        String extension = "";
        try{            
        BufferedImage bImage = ImageIO.read(new File(url));
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        if(url.toString().toLowerCase().contains(".png")){
            extension = "png";
        }else{
            extension = "jpg";
        }
        ImageIO.write(bImage, extension, bos );
        data = bos.toByteArray();
        }catch(Exception e){
        e.printStackTrace();
        }
        return data;
    }

    public static void ByteToAvatar(byte[] data) throws IOException{
        BufferedImage img = null;                       
        img = ImageIO.read(new ByteArrayInputStream(data));

        JLabel lblURL = new JLabel();
        lblURL.setBorder(new LineBorder(Color.GRAY));
        lblURL.setBackground(SystemColor.controlLtHighlight);
        lblURL.setBounds(10, 10, 80, 80);           
        lblURL.setIcon(Resize(img));

        frame.getContentPane().add(lblURL);
        frame.pack();
    }

    private static ImageIcon Resize(Image img){
        Image newImg = img.getScaledInstance(80, 80, Image.SCALE_SMOOTH);
        ImageIcon image = new ImageIcon(newImg);
        return image;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-17
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多