示例代碼: 下面的Java和Python示例使用圖像API,如下所示。我們拍攝帶有alpha通道的PNG圖像(即圖像的一部分是透明的),以創建一個合成圖像,其中原始圖像疊加在其頂部,偏移寬度的一半。
![sample image](https://i.stack.imgur.com/Lvg88.png)
注意:在dev_appserver圖片API的 仿真是不完整的。並非SDK中的所有功能(如透明度/不透明度)都是properly implemented。但是,下面的示例都經過測試並在生產App Engine環境中工作。
的Java +圖像API:
package img;
import com.google.appengine.api.images.Composite;
import com.google.appengine.api.images.Image;
import com.google.appengine.api.images.ImagesService;
import com.google.appengine.api.images.ImagesServiceFactory;
import com.google.appengine.api.images.Transform;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Arrays;
import java.util.Collection;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@SuppressWarnings("serial")
public class ImgServlet extends HttpServlet {
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
RandomAccessFile file = new RandomAccessFile("image.png", "r");
byte[] data = new byte[(int) file.length()];
file.read(data);
file.close();
ImagesService imagesService = ImagesServiceFactory.getImagesService();
Image image = ImagesServiceFactory.makeImage(data);
Transform resize = ImagesServiceFactory.makeResize(50, 50);
image = imagesService.applyTransform(resize, image);
Composite composite1 =
ImagesServiceFactory.makeComposite(image, 0, 0, 1.0F,
Composite.Anchor.TOP_LEFT);
Composite composite2 =
ImagesServiceFactory.makeComposite(image, 25, 0, 1.0F,
Composite.Anchor.TOP_LEFT);
Collection<Composite> composites =
Arrays.asList(new Composite[] {composite1, composite2});
image = imagesService.composite(
composites, 75, 50, 0, ImagesService.OutputEncoding.PNG);
data = image.getImageData();
resp.setContentType("image/png");
resp.getOutputStream().write(data);
}
}
的Python 2.7 +圖像API:
import webapp2
from google.appengine.api import images
class MainHandler(webapp2.RequestHandler):
def get(self):
img = images.Image(open("image.png").read())
img.resize(50, 50)
result = img.execute_transforms(output_encoding=images.PNG)
t1 = (result, 0, 0, 1.0, images.TOP_LEFT)
t2 = (result, 25, 0, 1.0, images.TOP_LEFT)
result = images.composite([t1, t2], 75, 50, color=0,
output_encoding=images.PNG, quality=None)
self.response.headers['content-type'] = 'image/png'
self.response.write(result)
app = webapp2.WSGIApplication([
('/.*', MainHandler),
], debug=True)
的Python 2。7 + PIL:
另一個python27解決方案是使用PIL library,作爲支持的python27 third-party library提供。
import webapp2
from StringIO import StringIO
from PIL import Image
class MainHandler(webapp2.RequestHandler):
def get(self):
image1 = Image.open("image1.png")
image2 = Image.open("image2.png")
image = Image.composite(image1, image2, image1)
result = StringIO()
image.save(result, "PNG")
self.response.headers['content-type'] = 'image/png'
self.response.write(result.getvalue())
app = webapp2.WSGIApplication([
('/.*', MainHandler),
], debug=True)
如果您可以在問題跟蹤器(http://code.google.com/p/googleappengine/issues/list)中添加指向特定問題的鏈接,那將會很不錯。 – 2012-10-30 17:04:39