4

我有许多带有 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);而不是通过图像服务,然后它就可以正常工作了。但是,这不是一种选择,因为以这种方式为它们提供服务所需的实例时间会增加。但至少这将问题缩小到图像服务。

4

1 回答 1

5

您可以将选项附加=-rw到您的网址。所以你会有类似的东西

http://lh3.ggpht.com/MvNZDvZcBaq_B2MuAj0-Y74sc24WAsOVIQiJzsowu1rVG-ACzGO80xxD9y5OI5dWSCa_Nt41aMmWSSYAbpFE8dW7BhxozH2ikcVLjw=s600-rw

您得到的是 jpeg 缩略图,因为这是使用 webp 时的默认设置,因为该格式尚未被所有浏览器完全支持。

于 2013-06-03T19:34:39.500 回答