GAE - получить ширину и высоту изображения на стороне сервера

Я работаю с приложением, таким как галерея изображений. Это позволяет пользователю выбрать файл со своего компьютера и загрузить изображение. После загрузки изображения это изображение будет отображаться в галерее. Я сохраняю изображение в blobstore и получаю его по blobkey. Я хочу получить уменьшенное изображение (которое было изменено по сравнению с исходным изображением). На стороне сервера я пытаюсь использовать API-интерфейс изображения для изменения размера исходного изображения на основе его blobkey, например

public String getImageThumbnail(String imageKey) {
    BlobKey blobKey = new BlobKey(imageKey);
    Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey);
    /*
    * can not get width anf height of "oldImage"
    * then I try to get imageDate of old Image to create a new image like this
    */
    byte[] oldImageData = oldImage.getImageData();

   Image newImage1 = ImagesServiceFactory.makeImage(oldImageData);
/*
* however
* oldImage.getImageData(); return null/""
* and cause the Exception when call this ImagesServiceFactory.makeImage(oldImageData)
*/

}

Есть ли у кого-нибудь работа с API изображений на стороне сервера, пожалуйста, дайте мне знать, как получить ширину и высоту изображения, которое создается из blobkey или byte[]


person kelly Nguyen    schedule 08.12.2011    source источник
comment
Какой это будет язык?   -  person Jonny    schedule 29.06.2015


Ответы (2)


Спасибо всем за чтение, я решил свою проблему, используя это

    ImagesService imagesService = ImagesServiceFactory.getImagesService();
    BlobKey blobKey =  new BlobKey(imageKey);
    BlobInfo blobInfo = new BlobInfoFactory().loadBlobInfo(blobKey);
    byte[] bytes = blobstoreService.fetchData(blobKey, 0, blobInfo.getSize());
    Image oldImage = ImagesServiceFactory.makeImage(bytes);
    int w = oldImage.getWidth();
    int h = oldImage.getHeight();
person kelly Nguyen    schedule 09.12.2011
comment
Этот код вызовет исключение, если размер большого двоичного объекта превышает 1 МБ. Вам нужно прочитать блоб в несколько кусков. Как указал Игорь, прочитайте code.google.com/p/googleappengine /issues/detail?id=4757 - person Ena; 13.11.2012

Объект изображения имеет данные о высоте/весе:

int width = oldImage.getWidth();
int height = oldImage.getHeight();
person Igor Artamonov    schedule 08.12.2011
comment
Спасибо Splix за ответ, но я пытался использовать его, но безрезультатно. Я получил это ava.lang.UnsupportedOperationException: данные изображения недоступны .... - person kelly Nguyen; 09.12.2011
comment
О, да, это известная проблема, взгляните на code.google. com/p/googleappengine/issues/detail?id=4757 - person Igor Artamonov; 09.12.2011