【问题标题】:Getting the original image back with ImageServices getServingUrl使用 ImageServices getServingUrl 取回原始图像
【发布时间】:2012-12-09 00:11:48
【问题描述】:

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 的图像,但它已被转换 - 如果将其与原始图像进行比较,您会看到图像中的伪影。

由于我发现here 将图像裁剪为原始大小,服务器正在适当地存储图像:

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 提供原始图像更好的解决方案?

【问题讨论】:

标签: google-app-engine


【解决方案1】:

您可以在生成的 URL 末尾添加=s0 以获取原始图像。

默认情况下,如果您不添加任何参数,则图像的最大尺寸为 512 像素(与添加 =s512 相同)。您可以在文档和您拥有的选项中阅读有关 getServingUrl 的更多信息。

【讨论】:

  • 嗯,我在本地运行它,如果我尝试看到:“错误 500 ApplicationError:2:无效的调整大小:宽度和高度不能都为 0。”我正在使用 GAE 1.7.3...
  • @BenFlynn hmm.. 适用于 Python.. 你可以尝试部署它以查看它是否适用于那里吗?!
  • @BenFlynn goo.gl/R69zu 尝试在此 URL 中添加一些参数:=s0, =s128, =s256-c
  • 这适用于您的网站。进行初始部署以查看是否可以使其正常工作...
  • @BenFlynn 您可以提交一个问题,因为在文档中他们说该值可以从 0 到 1600 并且在您的情况下,它在 java 中本地不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2013-02-10
  • 2016-05-21
相关资源
最近更新 更多