मैंने कभी किसी फोरम प्रश्न का उत्तर नहीं दिया है, लेकिन मुझे विशेष रूप से स्टैक ओवरफ्लो से बहुत लाभ हुआ है, इसलिए मैंने सोचा कि मुझे कम से कम एक बार कुछ वापस देना होगा। चूंकि उपरोक्त मुद्दा मुझे अब लगभग दो दिनों से परेशान कर रहा था और मैंने आखिरकार एक समाधान तैयार किया, मैंने सोचा कि यह समुदाय को कुछ वापस देने के लिए एक अच्छा विषय होगा।
मेरे पास जावा ड्राइवर के साथ एक मोंगोडीबी/ग्रिडएफएस से एक छवि (.पीएनजी) पुनर्प्राप्त करने का एक ही मुद्दा था। सबसे पहले, जैसा कि ऊपर वर्णित है, आपको फ़ाइल जावा ऑब्जेक्ट को पुनः प्राप्त करने की आवश्यकता है:
import com.mongodb.*;
import com.mongodb.gridfs.*;
mongoClient = MongoClient('server_name',27017);
db = mongoClient.getDB('database_name');
imgData = GridFS(db,'image_data');
उपरोक्त कोड भाग छवि डेटा के साथ संग्रह प्राप्त कर रहा है। बाद में, छवि डेटा जावा ऑब्जेक्ट को पुनः प्राप्त किया जा सकता है:
javaIObj = imgData.findOne('image_name.png');
अब ByteArrayOutputStream की जरूरत है जहां फ़ाइल के बजाय डेटा स्ट्रीम को पाइप किया जा सकता है:
import java.io.ByteArrayOutputStream;
baos = ByteArrayOutputStream();
javaIObj.writeTo(baos);
आउटपुट स्ट्रीम को फिर से एक ByteArrayInputStream में पाइप करने की आवश्यकता होती है जिसका उपयोग ImageIO ऑब्जेक्ट बनाने के लिए किया जा सकता है:
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
bais = ByteArrayInputStream(baos.toByteArray());
jbi = ImageIO.read(bais);
अब वास्तविक मैटलैब छवि को मैट्रिक्स के रूप में पुनर्प्राप्त और प्रदर्शित किया जा सकता है:
nrows = jbi.getHeight; ncols = jbi.getWidth;
data = jbi.getData.getPixels(0,0,ncols,nrows,[]);
matImg = reshape(data,ncols,nrows)';
imagesc(matImg);
मुझे नहीं पता कि यह सही समाधान है, लेकिन इसने मेरे लिए काम किया।
चीयर्स!