我正试图绕过Go + Appengine。我一直在使用Blobstore来存储用户图片上传。无论如何我可以从BlobStore下载图像并进行操作吗?
还是有另一种解决方案吗?
image lib有点受限。我还想将其他格式转换为jpeg。
答案 0 :(得分:7)
是的,您可以将文件从blobstore中提取出来,并利用Go 1中包含的图像包,包括image/draw和image/jpeg。有关概述和The Go image package,请参阅image/draw blog post。假设您已经拥有了要操作的图像的BlobInfo,则可以通过将嵌入的BlobKey传递给blobstore.NewReader来获取其原始数据,从而为您提供io.Reader对象。将其传递给例如png.Decode获得image.Image。做任何你喜欢的操作,然后将它保存回blobstore,从blobstore.Create获取一个Writer并将其交给jpeg.Encode。最后调用blobstore.Close和.Key以获取要保存在数据存储区中的新BlobKey。
如果您想进行更复杂的操作,可以使用您的应用程序上传几个pure-Go库,并与image.Image一起使用。请参阅graphics-go和Libraries Written in Go的“图像和图形”部分。
答案 1 :(得分:0)
我希望有一个能够自动完成优化blobstore图像的魔力的软件包。结果可以在GitHub找到:https://github.com/TomiHiltunen/GAE-Go-image-optimizer
算法本身就像Adam Thomason所描述的那样。这个软件包只是隐藏了丑陋的部分并自动化了这个过程。
您可以像使用blobstore.ParseUploads()一样使用它。它的作用是它通过上传的blob运行并优化图像,使所有其他类型的blob保持不变。它还将返回从blobstore.ParseUploads()传递的所有其他值。