getServingUrl 是一种从 AppEngine 数据存储中获取图像的便捷方式,但它似乎想要自动转换图像。
例如,如果我这样做:
ServingUrlOptions servingUrlOptions = ServingUrlOptions.Builder.withBlobKey(blobKey);
String payload = "{ \"image\" : \"" + mImagesService.getServingUrl(servingUrlOptions) + "\" }";
我得到一个尺寸调整后的图像的 URL。例如,如果我上传一张 960 x 640 的图片,默认 URL 将指向一张 512 x 341 的图片。
所以,你说,在 URL 中应用一个转换并设置 s960。这确实会返回一个 960 x 640 的图像,但它已经过转换——如果将其与原始图像进行比较,您会看到图像中的伪影。
服务器正在适当地存储图像,这要归功于我在这里找到的一种对原始大小进行裁剪的技术:
Image image = ImagesServiceFactory.makeImageFromBlob(blobKey);
Transform noOpCrop = ImagesServiceFactory.makeCrop(0, 0, 1, 1);
image = mImagesService.applyTransform(noOpCrop, image);
LOGGER.info("Stored image " + image.getWidth() + ", " + image.getHeight());
我实际上并没有查看它是否包含原始字节,但这并不重要,因为如果我只是要发送回字节,我还不如直接从存储中提取数据并将其设置为自定义图像服务 servlet 的有效负载。
写这篇文章我意识到这听起来更像是一个功能请求而不是一个问题,所以我会这样提出:有没有比通过自定义 servlet 提供原始图像更好的解决方案?