XnConvert を使用して WEBP に変換したアルファ付きの PNG 画像が多数あります。変換自体は正常に行われ、アルファ チャンネルは、にアップロードされるまで維持されます。BlobStore
ブロブストアにアップロードする前は、次のようになっています。
その後、次のようになります。
サービング URL によって JPG として提供されるため、アルファ チャネルは削除されます。App Engine コンソールの BlobStore ビューアでは、アップロードされたファイルのファイル拡張子が .webp であっても、コンテンツ タイプが application/octet-stream に設定されています。
Images API ドキュメントによると、WEBP をサポートするはずです。
画像をアップロードするとき、私は何も凝っていません:
List<BlobKey> blobs = blobstoreService.getUploads(req).get("file");
BlobKey blobKey = blobs.get(0);
ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions servingOptions = ServingUrlOptions.Builder.withBlobKey(blobKey);
String servingUrl = imagesService.getServingUrl(servingOptions);
EDIT:
これは配信 URL の例です: 配信 URL の 例
Chromeと Android クライアントを使用してアクセスしようとしました。Androidクライアントでアクセスするために使用されるコードは次のとおりですが、関連性はないと思います:
URL url = new URL(Assets.getServingUrl(resourceName));
URLConnection connection = url.openConnection();
connection.connect();
String contentType = connection.getContentType();
String fileExt;
if(contentType.contains("webp"))
fileExt = ".webp";
else if(contentType.contains("png"))
fileExt = ".png";
else if(contentType.contains("jpeg") || contentType.contains("jpg"))
fileExt = ".jpg";
// download the file
InputStream input = new BufferedInputStream(url.openStream(),8192);
OutputStream output = MyApp.getAppContext().openFileOutput(resourceName + fileExt,Activity.MODE_PRIVATE);
byte data[] = new byte[1024];
int count;
while ((count = input.read(data)) != -1) {
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
その場で画像のサイズを変更できる方法があるため、Google Images API を介して画像を提供したいと考えています。
これを解決するために正しい方向に私を向けるのを手伝ってくれる人はいますか?
EDIT2:
blobstoreService.serve(new BlobKey(assetEntity.blobKey), res);
画像サービスではなく、このようにブロブストアを介して直接ブロブを提供しようとしましたが、正常に動作しました。ただし、この方法でそれらを提供するためにかかるインスタンス時間の量が増えるため、これはオプションではありません。しかし、少なくともこれにより、問題が画像サービスに絞り込まれます。