Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

chuyển đổi Hình ảnh trong bộ nhớ thành Blob

java.awt.Image khá đơn giản. Nó không cung cấp bất kỳ phương tiện nào để hình ảnh có thể được ghi / lưu cũng như không cung cấp bất kỳ phương tiện nào để có quyền truy cập vào dữ liệu pixel cơ bản của hình ảnh.

Bước đầu tiên, là chuyển đổi java.awt.Image đến thứ gì đó ImageIO có thể hỗ trợ. Điều này sẽ cho phép bạn ghi dữ liệu hình ảnh ra ngoài ...

ImageIO yêu cầu RenderedImage vì nó là nguồn hình ảnh chính. BufferedImage là cách triển khai duy nhất của giao diện này trong các thư viện mặc định ...

Thật không may, không có phương pháp đơn giản để chuyển đổi từ cái này sang cái kia. May mắn thay, nó không khó.

Image img = ...;

BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();

Về cơ bản, điều này chỉ vẽ java.awt.Image ban đầu vào BufferedImage

Tiếp theo, chúng ta cần lưu hình ảnh theo một cách nào đó để nó có thể tạo ra một InputStream ...

Điều này ít hơn một chút so với tối ưu, nhưng sẽ hoàn thành công việc.

ByteArrayOutputStream baos = null;
try {
    baos = new ByteArrayOutputStream();
    ImageIO.write(bi, "png", baos);
} finally {
    try {
        baos.close();
    } catch (Exception e) {
    }
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());

Về cơ bản, chúng tôi ghi hình ảnh ra ByteArrayOutputStream và sử dụng kết quả để tạo ByteArrayInputStream

Hiện nay. Nếu bộ nhớ có vấn đề hoặc hình ảnh khá lớn, trước tiên bạn có thể ghi hình ảnh vào File và sau đó chỉ cần đọc File quay lại thông qua một số loại InputStream thay vào đó ...

Cuối cùng, chúng tôi đặt InputStream vào cột bắt buộc ...

PreparedStatement stmt = null;
//...    
stmt.setBlob(parameterIndex, bais);

Và Blob là chú của bạn ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sử dụng tính năng bộ nhớ đệm ẩn của trình điều khiển JDBC của Oracle

  2. Spring StoredProcedure với mảng Oracle:ORA-01000:vượt quá con trỏ mở tối đa

  3. Đặt lại tổng tích lũy?

  4. Giới thiệu về Sao lưu cơ sở dữ liệu Oracle

  5. ORA-01034:ORACLE không khả dụng ORA-27101:vùng bộ nhớ chia sẻ không tồn tại