Saya tidak pernah menanggapi pertanyaan forum apa pun, tetapi saya mendapat banyak manfaat terutama dari stackoverflow, jadi saya pikir saya harus memberikan sesuatu setidaknya sekali. Karena masalah di atas mengganggu saya sekarang selama hampir dua hari dan akhirnya saya menyatukan solusi, saya pikir ini akan menjadi topik yang baik untuk memberikan sesuatu kepada komunitas.
Saya memiliki masalah yang sama dalam mengambil gambar (.png) dari MongoDB/GridFS dengan driver Java. Pertama, seperti juga dijelaskan di atas, Anda perlu mengambil file objek Java:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
Bagian kode di atas mendapatkan koleksi dengan data gambar. Setelah itu, data gambar objek Java dapat diambil:
javaIObj = imgData.findOne('image_name.png');
Sekarang ByteArrayOutputStream diperlukan di mana aliran data dapat disalurkan alih-alih file:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
Aliran output perlu disalurkan lagi ke ByteArrayInputStream yang dapat digunakan untuk membuat objek ImageIO:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
Sekarang gambar Matlab yang sebenarnya sebagai matriks dapat diambil dan ditampilkan:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
Saya tidak tahu apakah ini solusi yang tepat, tetapi ini berhasil untuk saya.
Semangat!