2012-07-25 10 views
5

का उपयोग करते समय कोई छवि डेटा उपलब्ध नहीं है I App Engine BlobStore का उपयोग करके अपलोड की गई छवि की ऊंचाई और चौड़ाई को पुनर्प्राप्त करने की आवश्यकता है।त्रुटि: java.lang.UnsupportedOperationException: ऐप इंजन के ब्लॉबस्टोर और छवि API

try { 
      Image im = ImagesServiceFactory.makeImageFromBlob(blobKey); 

      if (im.getHeight() == ht && im.getWidth() == wd) { 
       flag = true; 
      } 
     } catch (UnsupportedOperationException e) { 

     } 

मैं छवि अपलोड करें और उत्पन्न कर सकते हैं BlobKey लेकिन जब makeImageFromBlob() के लिए Blobkey गुजरती हैं, यह निम्न त्रुटि उत्पन्न:

java.lang.UnsupportedOperationException: No image data is available

कैसे करें खोजने है कि मैं निम्नलिखित कोड का इस्तेमाल किया के लिए BlobKey से सीधे छवि ऊंचाई और चौड़ाई को खोजने के लिए इस समस्या या किसी अन्य तरीके को हल करें।

उत्तर

6

छवि पर अधिकांश विधियां वर्तमान में असमर्थितऑपरेशन अपवाद को फेंक देंगी। तो मैंने bl.googleKey से डेटा में हेरफेर करने के लिए com.google.appengine.api.blobstore.BlobstoreInputStream.BlobstoreInputStream का उपयोग किया। इस तरह मैं छवि चौड़ाई और ऊंचाई प्राप्त कर सकते हैं।

public static byte[] getData(BlobKey blobKey) { 
    BlobstoreInputStream input = null; 
    try { 
     input = new BlobstoreInputStream(blobKey); 
     return ByteStreams.toByteArray(input); 
    } catch (IOException e) { 
     throw new RuntimeException(e); 
    } finally { 
     Closeables.closeQuietly(input); 
    } 
} 

बाकी ही रहता है:

byte[] data = getData(blobKey); 
Image im = ImagesServiceFactory.makeImage(data); 
if (im.getHeight() == ht && im.getWidth() == wd) {} 
private byte[] getData(BlobKey blobKey) { 
    InputStream input; 
    byte[] oldImageData = null; 
    try { 
     input = new BlobstoreInputStream(blobKey); 
       ByteArrayOutputStream bais = new ByteArrayOutputStream(); 
     byte[] byteChunk = new byte[4096]; 
     int n; 
     while ((n = input.read(byteChunk)) > 0) { 
      bais.write(byteChunk, 0, n); 
     } 
     oldImageData = bais.toByteArray(); 
    } catch (IOException e) {} 

    return oldImageData; 

} 
3

आप अमरूद का उपयोग कर सकते हैं, तो कार्यान्वयन का पालन करने में आसान है।

0

एक और संभावना

Image oldImage = ImagesServiceFactory.makeImageFromFilename(### Filepath ###); 
Transform transform = ImagesServiceFactory.makeRotate(0); 
oldImage = imagesService.applyTransform(transform,oldImage); 

कि परिवर्तन के बाद छवि पर एक बेकार परिवर्तन बनाने के लिए (0 डिग्री से घूर्णन के रूप में) है, तो आप प्राप्त कर सकते हैं छवि की चौड़ाई & ऊंचाई अपेक्षा के अनुरूप:

oldImage.getWidth(); 

भले ही यह काम करता है, यह परिवर्तन नकारात्मक प्रदर्शन को प्रभावित करता है;)

संबंधित मुद्दे