2
ImagesService imagesService = ImagesServiceFactory.getImagesService();
BlobKey bk = currentProfile.getProfileBlobKey();
Image oldImage = ImagesServiceFactory.makeImageFromBlob(bk);
Transform resize = ImagesServiceFactory.makeResize(500, 500);
Image newImage = imagesService.applyTransform(resize, oldImage);
int imageWidth = newImage.getWidth();
int imageHeight = newImage.getHeight();

ImagesServiceFactory.makeImageFromBlob(bk);実際の画像を返さないため、このコードは機能していないようです。誰かがこれの回避策を知っていますか?これは予想される動作のようです。この問題についてはここで説明しますが、高さと幅をbyte[]だけで取得するための解決策はありません。

4

2 に答える 2

2

これを試して:

FileService fileService = FileServiceFactory.getFileService();
AppEngineFile blobFile = fileService.getBlobFile(blobKey);
FileReadChannel readChannel = fileService.openReadChannel(blobFile, false);
byte[] imageData = getBytes(Channels.newInputStream(readChannel));
Image oldImage = ImagesServiceFactory.makeImage(imageData);
// now you have the real Image

入力ストリームを読み取るためのこの小さなスニペット:

public static byte[] getBytes(InputStream is) throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    int len;
    byte[] data = new byte[10000];
    while ((len = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, len);
    }

    buffer.flush();
    return buffer.toByteArray();
}
于 2013-01-24T23:30:14.617 に答える
0

ImageReaderクラスを試しましたか?

于 2013-01-24T20:53:09.603 に答える