2

基本的に、ユーザーが選択した画像を使用してピクセルのヒストグラムを作成するために、matplotLib を使用しようとしています。ユーザーは JCROP を使用して画像の一部を選択し、送信ボタン PlotsHandlers を押すと、ポスト メソッドがパラメーターを取得します。次に、それをトリミングし、ここで説明する方法を使用してヒストグラムを表示してプロットします。デプロイしてテストしていますが、うまくいきません。GAE で matplotlib を使用してヒストグラム (またはその他のデータ) をプロットする方法を誰かが教えてくれますか?

import os
import webapp2
import re
import jinja2
import Image
import ImageOps
import logging
import numpy as np
import matplotlib.pyplot as plt

template_dir = os.path.join(os.path.dirname(__file__), 'templates')
jinja_env= jinja2.Environment(loader = jinja2.FileSystemLoader(template_dir), autoescape = True)
PAGE_RE = r'(/(?:[a-zA-Z0-9_-]+/?)*)'


def render_str(template, **params):
    t = jinja_env.get_template(template)
    return t.render(params)

#Opens the image and Grayscales it
def openAndGrayScaleImage(imageLocationString):
    OpenedImage = Image.open(imageLocationString)
    return ImageOps.grayscale(OpenedImage)

def cropImage(image, x1, y1, x2, y2):
    box = (x1, y1, x2, y2)
    return image.crop(box)  



class BaseHandler(webapp2.RequestHandler):
    def render(self, template, **kw):
        self.response.out.write(render_str(template, **kw))

    def write(self, *a, **kw):
        self.response.out.write(*a, **kw)


class MainHandler(BaseHandler):
    def get(self):
        self.render("mainPage.html")

class PlotsHandler(BaseHandler):
    def get(self):
        self.redirect('/')



def post(self):
        image1 = openAndGrayScaleImage("images.jpg")
        #Parameters for cropping. Verified that it's working
            x1 = int(self.request.get('x1'))
        y1 = int(self.request.get('y1'))
        x2 = int(self.request.get('x2'))
        y2 = int(self.request.get('y2'))
        image2 = cropImage(image1, x1, y1, x2, y2)
        #Get the sequence of pixels
            values_= list(image2.getdata())
        n, bins, patches = plt.hist(values_, 256/2, normed=1, facecolor ='blue', alpha = .75)
        plt.xlabel('Light Intensity')
        plt.ylabel('Probability')
        plt.title('Normalized distribution of light')
        plt.axis([0, 255, 0, .3])
        plt.grid(True)
        rv = StringIO.StringIO()
        plt.savefig(rv, format = "png")
        imgb64 = rv.getvalue().encode("base64").strip()
        plt.clf()
        rv.close()
        self.response.write("""<html><body>""")
        self.response.write("<img src='data:image/png;base64,%s'/>" % img_b64)
        self.response.write("""</body> </html>""")







app = webapp2.WSGIApplication([('/', MainHandler),
                                ('/plots', PlotsHandler)],
                              debug=True)
4

1 に答える 1

1

問題を解決しました。app.yaml でスレッドセーフを false に設定するのを忘れていました。

于 2013-02-27T06:55:59.493 に答える