我有许多带有 alpha 的 PNG 图像,我已使用 XnConvert 将它们转换为 WEBP。转换本身进行得很顺利,并且保持 alpha 通道,直到上传到BlobStore
在上传到 blobstore 之前,它看起来像这样:
在它看起来像这样之后:
它由服务网址作为 JPG 提供,因此删除了 alpha 通道。在 App Engine 控制台的 BlobStore 查看器中,它已将内容类型设置为 application/octet-stream,即使上传的文件具有 .webp 文件扩展名。
根据图像 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:
这是一个示例服务网址: 示例服务网址
我尝试使用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 图片 API 提供图片,因为图片可以动态调整大小。
谁能帮我指出正确的方向来解决这个问题?
EDIT2:
我尝试像这样直接通过 blobstore 提供 blob:blobstoreService.serve(new BlobKey(assetEntity.blobKey), res);
而不是通过图像服务,然后它就可以正常工作了。但是,这不是一种选择,因为以这种方式为它们提供服务所需的实例时间会增加。但至少这将问题缩小到图像服务。