3

blobstoreからの一連の画像をサーバーするアプリがあります。例はここにあります:

http://lh4.ggpht.com/f76xUkRZLRkb_Qz5uu82TX3LoBRh4eYb9hxYwMRMLCk5ghO_OL0DW2v4rRnkewUyDWfBuBttgbUvuJJXwtFQosEB=s0

それは巨大なpngだったので、これは536Kでダウンロードされます。

サイズを400に変更しても、それでも巨大です(263k)。

http://lh4.ggpht.com/f76xUkRZLRkb_Qz5uu82TX3LoBRh4eYb9hxYwMRMLCk5ghO_OL0DW2v4rRnkewUyDWfBuBttgbUvuJJXwtFQosEB=s400

ある種のより良い圧縮で画像を要求または保存するにはどうすればよいですか?アプリ用のモバイルクライアントがあり、273Kを待つと非常に遅くなります。

4

4 に答える 4

10

ImagesAPIがあります。画像を圧縮およびサイズ変更するには:

// get image from blobstore
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image oldImage = ImagesServiceFactory.makeImageFromBlob(blobKey); 

// compress & resize it
OutputSettings settings = new OutputSettings(ImagesService.OutputEncoding.JPEG);
settings.setQuality(90);
Transform transform = ImagesServiceFactory.makeResize(newWidth, newHeight) 
Image newImage = imagesService.applyTransform(transform, oldImage, settings);
byte[] blobData = newImage.getImageData();

//save data to blobstore
FileService fileService = FileServiceFactory.getFileService();
AppEngineFile file = fileService.createNewBlobFile("image/jpeg", someFilename);
FileWriteChannel writeChannel = fileService.openWriteChannel(file, true);
writeChannel.write(ByteBuffer.wrap(blobData));
writeChannel.closeFinally();

// get the blobKey to newly written data
BlobKey blobKey = fileService.getBlobKey(file);
于 2012-12-05T20:33:20.897 に答える
0

画像の異なるバージョン(異なる圧縮率)をblobstoreまたはクラウドストレージにアップロードし、クライアント側を表示するバージョンを選択できます(CSSまたはクライアント側のロジックを使用)。

于 2012-12-05T17:09:55.003 に答える
0

Pagespeed サービスを有効にして、その場で画像を再圧縮できます。

于 2012-12-05T16:52:46.987 に答える
0

PILを使用して、再圧縮された画像をフロントエンド インスタンスから動的に提供できます。

于 2012-12-05T17:08:57.873 に答える