샘플 코드 : 아래의 Java 및 Python 예제는 이미지 API를 다음과 같이 사용합니다. 알파 채널이 포함 된 PNG 이미지 (즉, 이미지 부분이 투명 함)를 사용하여 원본 이미지가 원래 이미지 위에 겹쳐지고 폭의 절반만큼 오프셋 된 합성 이미지를 만듭니다.
주 다음 dev_appserver의 이미지 API의 에뮬레이션이 완전하지 않습니다. 투명도/불투명도와 같은 모든 기능이 SDK의 properly implemented은 아닙니다. 그러나 아래 예제는 모두 테스트를 거쳤으며 프로덕션 App Engine 환경에서 작동합니다.
자바 + 이미지 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); } }
파이썬 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)
파이썬 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)에서 특정 문제에 대한 링크를 추가 할 수 있다면 좋을 것입니다. –