2

クライアントから撮影したいくつかの画像を管理する必要があります。

今まで、私のコードは次のとおりです。

    Image oldImage = null;
    try {
        oldImage = ImagesServiceFactory.makeImage(imageBuf);
    } catch (Exception e) {
        log.severe("Cannot make the image due to " + e);
        return;
    }
    int newWidth = ??; //how can I guess this value to reach a size < 1MB??
    int newHeight= ??; //how can I guess this value to reach a size < 1MB??
    Transform resize = ImagesServiceFactory.makeResize(newWidth, newHeight);
    Image newImage = imagesService.applyTransform(resize, oldImage); //Exception if > 1MB

このような画像は GAE のサイズ制限 (1 MB) を超える可能性があるため、1 MB 弱 (たとえば 950kB) のサイズになるようにサイズ変更またはトリミングしたいと考えています。

どうすればこの目標を達成できますか?

画像のサイズを変更する正確な幅と高さがわからないため、サイズ変更方法を直接使用することはできません。

さらに、画像のエンコーディング (png、jpeg など) によっては、固定の高さと幅を使用しても画像のサイズが異なる場合があります。

この問題に対処する方法について、私は本当に効率的なアイデアを持っていません。解決策を確認できる唯一の方法は、適切なサイズの画像が得られるまで、より低い次元で試し続けることですが、これは明らかにパフォーマンスの観点から受け入れられません。 ..

私を助けてください!!

どうもありがとうございました

さよなら

シゲルシ

4

1 に答える 1

2

画像をblobstoreに保存すると、関数を使用して、アプリサーバー経由で画像を渡すよりもはるかに大きな画像のサイズを変更できgetServingUrl()ます。これは API を介してデータを渡さないため、API 応答サイズの制限によって制限されません。

于 2011-09-23T21:52:32.603 に答える