サンプルコード: 以下のJavaおよびPythonの例では、イメージAPIを次のように使用しています。アルファチャンネル(つまり、画像の一部が透明)を持つ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溶液をサポートpython27 third-party libraryとして入手PIL 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)の特定の問題へのリンクを追加することができれば素晴らしいと思います。 –