【发布时间】:2015-01-28 07:36:05
【问题描述】:
代码如下:
app.config['DEBUG']= True
if request.method == 'POST' and request.form['file_submit']:
print request.form
print request.files['image']
if request.files['image']:
print 'foshhh'
image_file = request.files['image']
img = PIL.Image.open(image_file.stream)
print img
if request.form['make_transparent']:
threshold=100
print 'changin sizesd'
dist=5
# np.asarray(img) is read only. Wrap it in np.array to make it modifiable.
arr=np.array(np.asarray(img))
r,g,b,a=np.rollaxis(arr,axis=-1)
mask=((r>threshold)
& (g>threshold)
& (b>threshold)
& (np.abs(r-g)<dist)
& (np.abs(r-b)<dist)
& (np.abs(g-b)<dist)
)
arr[mask,3]=0
img=Image.fromarray(arr,mode='RGBA')
if request.form['change_size']:
img = Image.open('out.png')
img.thumbnail(size,Image.ANTIALIAS)
img.save('out.png',"PNG")
img.save('out.png',"PNG")
print os.path.getsize("out.png") #from answer
assert os.path.isfile("out.png") #from answer
conn = S3Connection(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)
b = conn.get_bucket('snappie.watermarks')
k = Key(b)
k.key = "test.png"
k.set_metadata('Content-Type', 'image/png')
k.set_contents_from_filename("out.png")
print "got file"
return redirect("https://s3.amazonaws.com/snappie.watermarks/"+filename)
else:
print 'please upload a file to submit the form!'
这里是html表单:
<form method="POST" enctype="multipart/form-data" name="file_submit">
<label>Choose png here.<input type="file" name="image"></label>
<input type="hidden" name="file_submit" value="yes">
Change size?<input type="checkbox" name="change_size" value="yes"/>
Make Background Transparent?<input type="checkbox" name="make_transparent" value="yes"\><br><br>
<input type="submit" value="submit">
</form>
问题的一部分是它并没有真正给我一个错误日志。您可以看到这个想法是有 2 个复选框可以修改图像文件。如果第一个被选中,它“变得透明”,如果第二个被选中,它会改变大小。
我认为图像对象在转换和修改时的类型存在问题,尤其是当它被传递到此对象时:k.set_contents_from_filename("out.png")
这里有什么帮助吗?这是服务器日志给我的唯一输出:
GET
127.0.0.1 - - [18/Jan/2015 15:42:26] "GET / HTTP/1.1" 200 -
POST
ImmutableMultiDict([('file_submit', u'yes')])
<FileStorage: u'birnam_wood.jpg' ('image/jpeg')>
foshhh
<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=100x100 at 0x7FDDF4CA6C68>
127.0.0.1 - - [18/Jan/2015 15:42:32] "POST / HTTP/1.1" 400 -
【问题讨论】:
-
我是否错过了您问题中清楚说明问题所在的部分?也就是说,您想要实现什么、预期的行为以及您观察到什么?
-
现在提交照片时,出现服务器错误。很明显,某处存在错误。最重要的是,我不相信我正确地传递了文件。在 if 语句中以及在完成更改后将其保存为“out.png”是正确的方法吗?这个“out.png”会与所有图像信息一起临时存储在服务器上吗?我觉得我可以将其保存为“文件”而不是文件名。无论如何,显然目前有问题,因此错误
-
您是否将您的 Web 应用程序(Flask)置于开发模式?也就是说,当您的代码引发未处理的异常时,您是否看到回溯?
-
你的意思是 app.config['DEBUG'] = True?我没有设置它,因为我被告知不要在我的 Web 服务器主机 (pythonanywhere.com) 上设置,还是您的意思是不同的开发模式选项?
-
在生产中,你永远不应该这样做,对吧(这主要是一种安全措施)。出于开发目的,您必须能够查看回溯。否则应该如何调试?所以,是的,出于调查目的,您必须将
app.config['DEBUG']设置为True。
标签: python amazon-s3 flask boto