1

次のコードを使用して、GoogleAppEngineアプリケーションに画像を正常に投稿しています。

  def post(self):

    image_data = self.request.get('file')
    file_name = files.blobstore.create(mime_type='image/png')

    # Open the file and write to it
    with files.open(file_name, 'a', exclusive_lock=True) as f:
      f.write(image_data)

    # Finalize the file. Do this before attempting to read it.
    files.finalize(file_name)

    # Get the file's blob key
    blob_key = files.blobstore.get_blob_key(file_name)
    self.response.out.write(images.get_serving_url( blob_key ))

ただし、によって出力されたURLを参照するget_serving_url()と、画像は常に低解像度になります。なんで?投稿されている画像が正しいサイズであることを確認し、再確認しました(iPhoneカメラからの場合、解像度は約3200x2400です)。ただし、提供される画像は常に512x384です。

私はGAEにかなり慣れていませんが、上記のコードは1 MBの制限を回避して、データストアではなくBlobStoreに画像を保存する必要があると思いました。

誰かが何が起こっているのか考えていますか?

乾杯、ブレット

4

2 に答える 2

3

解決策を見つけました。または少なくとも私のために働く何か。提供されるURLの最後に追加=sXXすると、AppEngineはXX解像度で画像を提供します。たとえば、次の行の場合:

self.response.out.write(images.get_serving_url( blob_key ))

戻り値: http://appengine.sample.com/appengineurlkey

次に、上記のURLを呼び出すと、画像は低解像度の画像になります。

次に、URLを呼び出します。 http://appengine.sample.com/appengineurlkey**=s1600**

結果として提供される画像は、1600x1200解像度(またはアスペクト比を維持することによって制限される同様の解像度)になります。

于 2012-08-08T16:40:27.330 に答える
0

表示されている内容の説明は、 https://developers.google.com/appengine/docs/python/images/functionsで説明されています。

のドキュメントget_serving_url

画像のサイズ変更またはトリミングを行う場合は、0〜1600の整数を使用して新しいサイズを指定する必要があります。最大サイズはIMG_SERVING_SIZES_LIMITで定義されています。APIは、指定されたサイズに画像のサイズを変更し、指定されたサイズを画像の最長の寸法に適用し、元のアスペクト比を維持します。

フルサイズの画像を提供する場合の別のアプローチは、画像をブロブストアに直接アップロードし、そこから提供することです。(つまり、イメージAPIを完全にバイパスします。)https://developers.google.com/appengine/docs/python/blobstore/overviewを参照してください

于 2012-08-08T17:18:05.970 に答える