>데이터 베이스 >MySQL 튜토리얼 >데이터베이스의 BufferedInputStream Blob을 표시 가능한 이미지로 변환하는 방법은 무엇입니까?

데이터베이스의 BufferedInputStream Blob을 표시 가능한 이미지로 변환하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-09 21:22:021014검색

How to Convert a BufferedInputStream Blob from a Database into a Visible Image?

BufferedInputStream을 이미지로 변환

데이터베이스에서 검색된 Blob을 표시 가능한 이미지로 변환하려고 할 때 문제가 발생합니다. 이 특정한 경우 Blob은 BufferedInputStream으로 저장되며 ImageIO.read를 통해 이미지로 직접 변환하면 null이 반환됩니다.

문제 해결

  1. InputStream 유효성 검사: Blob#getBytes 메서드가 올바른 길이를 반환하는지 확인합니다. 파일 내용이 잘리지 않았는지 확인하세요.
  2. 바이너리 데이터를 올바르게 추출: Blob#getBytes 대신 Blob#getBinaryStream을 사용하여 데이터베이스의 특정 특성을 고려하여 바이너리 데이터를 검색합니다(예: , H2).
  3. 바이패스 BufferedInputStream: ByteArrayOutputStream을 생성하고 여기에 바이너리 데이터를 작성하여 BufferedInputStream을 우회합니다. 그런 다음 ImageIO.read와 함께 사용할 ByteArrayOutputStream에서 ByteArrayInputStream을 생성합니다.

권장 코드 수정:

public BufferedImage getPhoto(Connection con) throws IOException, SQLException {
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    byte[] data;
    
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         InputStream is = blob.getBinaryStream()) {
        
        int nRead;
        byte[] buffer = new byte[4096];
        while ((nRead = is.read(buffer, 0, buffer.length)) != -1) {
            baos.write(buffer, 0, nRead);
        }
        
        data = baos.toByteArray();
        image = ImageIO.read(new ByteArrayInputStream(data));
    } catch (SQLException | IOException e2) {
        e2.printStackTrace();
    }
    
    return image;
}

이러한 수정을 구현하면 Blob은 다음과 같습니다. 올바르게 검색되어 ByteArrayInputStream으로 변환되고 다음을 사용하여 이미지로 읽혀집니다. ImageIO.read.

위 내용은 데이터베이스의 BufferedInputStream Blob을 표시 가능한 이미지로 변환하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.