【问题标题】:BufferedImage to File with black backgroundBufferedImage 到具有黑色背景的文件
【发布时间】:2014-01-06 02:16:40
【问题描述】:

我正在尝试将 BufferedImage(来自 byte[])保存到文件中,但它会生成没有图像的黑色背景。我正在使用 primefaces 的 photoCam。

这是我的 ManagedBean 方法:

public void webcamCapture(CaptureEvent captureEvent) {
        try {
            byte[] data = captureEvent.getData();
            InputStream in = new ByteArrayInputStream(data);
            BufferedImage fotoBuffered = ImageIO.read(in);
            String idImagem = ImagemHelper.getInstance().salvarImagemFromImageObject(fotoBuffered);
            paciente.getPessoaFisica().setFoto(idImagem);

        } catch (Exception e) {
            addErrorMessage("Erro ao capturar imagem da webcam");
            FacesContext.getCurrentInstance().validationFailed();
        }
    }

方法“salvarImagemFromImageObject”简单地创建一个“ImageIO.write(image,"jpg",destFile)”来保存一个文件,但是这个文件什么都没有,只是一个黑色的背景。

【问题讨论】:

    标签: java jsf primefaces


    【解决方案1】:

    Primefaces PhotoCam 组件渲染 PNG 图像。 PNG 格式是设计使然。如果要使用其他文件格式,则需要对 PF 组件渲染的 PNG 图像进行后处理。

    使用.png destFile 重构您的salvarImagemFromImageObject 函数:

    ImageIO.write(fotoBuffered, "png", destFile);
    

    编辑

    将生成的 png 数据写入 jpeg 格式:

    //Converts PNG image to plain RGB format
    BufferedImage newBufferedImage = new BufferedImage(fotoBuffered.getWidth(), fotoBuffered.getHeight(), BufferedImage.TYPE_INT_RGB);
    newBufferedImage.createGraphics().drawImage(fotoBuffered , 0, 0, Color.WHITE, null);
    
    //Then, writes to jpeg file
    ImageIO.write(newBufferedImage, "jpg", destFile);
    

    【讨论】:

    • 但我需要另存为“JPG”,我无法另存为 PNG。我该怎么做?
    猜你喜欢
    • 2012-07-01
    • 2012-03-05
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2013-04-23
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多