Tôi chưa bao giờ trả lời bất kỳ câu hỏi nào trên diễn đàn, nhưng tôi đã được hưởng lợi rất nhiều, đặc biệt là từ stackoverflow, vì vậy tôi nghĩ mình phải trả lại điều gì đó ít nhất một lần. Vì vấn đề ở trên đã làm phiền tôi gần hai ngày nay và cuối cùng tôi đã kết hợp lại một giải pháp, tôi nghĩ đây sẽ là một chủ đề hay để trả lại điều gì đó cho cộng đồng.
Tôi đã gặp vấn đề tương tự khi truy xuất hình ảnh (.png) từ MongoDB / GridFS bằng trình điều khiển Java. Đầu tiên, như đã mô tả ở trên, bạn cần truy xuất tệp đối tượng Java:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Phần mã trên là nhận được bộ sưu tập với dữ liệu hình ảnh. Sau đó, đối tượng Java dữ liệu hình ảnh có thể được truy xuất:
javaIObj = imgData.findOne('image_name.png');
Bây giờ ByteArrayOutputStream là cần thiết, nơi luồng dữ liệu có thể được chuyển vào thay vì một tệp:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
Luồng đầu ra cần được chuyển lại vào một ByteArrayInputStream có thể được sử dụng để tạo đối tượng ImageIO:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Bây giờ hình ảnh Matlab thực tế dưới dạng ma trận có thể được truy xuất và hiển thị:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Tôi không biết liệu đây có phải là giải pháp hoàn hảo hay không, nhưng nó đã hiệu quả với tôi.
Chúc mừng!