如何在没有图像库的情况下转换或操作存储为blob的JPEG?

4

我有一个存储在内存中的JPEG图像作为blob,并希望对其应用一些基本的变换(例如调整大小,转换为灰度,旋转等)。

我目前正在使用Google脚本,据我所知,它没有本地图像库。

是否有标准算法或类似方法可以让我使用原始二进制数组来处理表示JPEG图像,以实现这样的转换?


我猜你提到的二进制原始数组是指像素的原始集合?如果是这样的话,你需要一个解码器将blob解压成原始二进制数组。难道不能将blob刷新到服务器并在响应中获取原始像素集吗? - Gary Tsui
@GaryTsui 不是像位图一样的原始像素,而是编码后的JPEG图像的二进制表示。 - Widor
在这种情况下,您基本上拥有完整的JPEG图像(包括头文件、量化表等)? - Gary Tsui
我会建议先阅读这份T.81文件,链接为http://www.w3.org/Graphics/JPEG/itu-t81.pdf。 - jodag
1
在标准的JavaScript中,您可以使用画布来完成此操作。有一个问题正在等待Google将画布支持添加到应用脚本中,但似乎还没有实现:https://code.google.com/p/google-apps-script-issues/issues/detail?id=425 - Nathan Breit
2个回答

1
我猜你不是在寻找答案,但是...
为了能够使用JPEG文件进行图像处理,您需要对图像进行解码。实际上,90/180/270度旋转、翻转和裁剪可以作为无损操作实现,因此无需解码图像数据。但是,如果需要更高级的操作,例如调整大小,则需要使用解码后的图像。
标准JPEG格式中用于压缩图像数据的文件结构(JIF/JFIF)和算法都有明确定义并得到适当记录。但同时,规范相当复杂。如果您有时间并知道自己在做什么,那么肯定是可行的。如果您很幸运,并且您的JPEG块都以相同的方式编写,那么您可能只需要实现规范的某些部分。但即使如此,您仍然需要重新实现规范的大部分内容,这可能并不值得。
如果您需要快速解决方案,并且对性能没有太严格的要求,使用第三方服务进行转换或创建自己的服务(例如使用已知库,如libjpeg或Java的ImageIO等)可能是最好的选择。

3
这里有一个JavaScript JPG解码库,稍加调整可能可作为App脚本运行:https://github.com/notmasteryet/jpgjs - Nathan Breit
@Nathan 实际上,那看起来是一个非常有前途的开始! - Harald K

0

在Apps Script中没有直接的图像处理功能。您需要将Python公开为Web服务并从Apps Script中调用它,或使用Drive REST API访问来自Python应用程序的文件,或使用任何API Web服务。

GAE Python具有图像处理功能,请查看下面的网址:

https://developers.google.com/appengine/docs/python/images/

可用的图像转换

Images服务可以调整大小、旋转、翻转和裁剪图像,并增强照片。它还可以将多个图像合成为单个图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接