googleAppEngineであそんでみました。今回やってみたかったのは、写真をバラまくサービスをウェブでやってみたかったという事です。
調べてみるとレンサバではpythonは使えるものの、PythonImageLibraryなんかが使えなさそうなので、GAEでやってみる事にしました。ですが、GAEもimagesというgoogleのapiしか無くてPILそのものは使えませんで、透過するとか画像を画像にペーストするとかそういうメソッドが無かったのでやれるとこまでやってみました。
今回作ったのは、zipファイルをアップロードすると中身の画像ファイルが表示されるというものです。ただそれだけでなんの面白みもありませんが、pythonの勉強という位置づけです。
調べてみるとレンサバではpythonは使えるものの、PythonImageLibraryなんかが使えなさそうなので、GAEでやってみる事にしました。ですが、GAEもimagesというgoogleのapiしか無くてPILそのものは使えませんで、透過するとか画像を画像にペーストするとかそういうメソッドが無かったのでやれるとこまでやってみました。
今回作ったのは、zipファイルをアップロードすると中身の画像ファイルが表示されるというものです。ただそれだけでなんの面白みもありませんが、pythonの勉強という位置づけです。
#!/usr/bin/env python
#!-*- coding:utf-8 -*-
import wsgiref.handlers
from google.appengine.ext import webapp, db
from google.appengine.api import images
from StringIO import StringIO
import zipfile
class ArchiveImg(db.Model):
imgData = db.BlobProperty()
# application
class Home( webapp.RequestHandler ):
def get( self ):
self.response.out.write( """<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><form action="/" enctype="multipart/form-data" method="post"><input type="file" name="archive"><input type="submit" value="upload"></form></body></html>""" )
def post( self ):
archive = self.request.get( 'archive' )
if archive:
bin = db.Blob( archive )
zp = zipfile.ZipFile( StringIO( bin ) )
imgLst = [ fn for fn in zp.namelist() if fn.split(".")[ -1 ] in "bmp jpg jpeg png gif BMP JPG JPEG PNG GIF" ]
imgFp = [ zp.read( fileName ) for fileName in imgLst ]
for img in imgFp:
arcImg = ArchiveImg()
arcImg.imgData = db.Blob( img )
arcImg.put()
self.response.out.write( "<img src='/img/%s'/><br />" % arcImg.key() )
else:
self.redirect("/")
class Img(webapp.RequestHandler):
def get( self, imgId ):
imgId = ArchiveImg.get( imgId )
if imgId:
self.response.out.write( imgId.imgData )
return
else:
self.error( 404 )
return self.response.out.write('404 not found')
def main():
application = webapp.WSGIApplication(
[ ('/', Home),('/img/([^/]+)', Img) ],
debug=True)
wsgiref.handlers.CGIHandler().run( application )
if __name__ == "__main__":
main()










