【发布时间】:2015-03-03 23:40:14
【问题描述】:
就我而言,有两种方法可以让图像调整大小/裁剪。
- 上传普通图片文件
- 给出图片的base64字符串数据
在 1. 情况下,调整大小和裁剪效果很好:
f = Image.open(uploaded_image)
new_width, new_height = 1200, 630
wpercent = (new_width / float(f.size[0]))
hsize = int((float(f.size[1]) * float(wpercent)))
if f.mode != "RGB":
f = f.convert('RGB')
og_img = None
if f.size[0] < new_width:
#upscale
og_img = f.resize((new_width, hsize), Image.BICUBIC)
elif f.size[0] >= new_width:
#downscale
og_img = f.resize((new_width, hsize), Image.ANTIALIAS)
og_img = og_img.crop((0, 0, 1200, 630))
调整大小/裁剪图像:
在2.情况下,代码同上,略有改动:
base64_image = str(request.POST.get('base64_image')).split(',')[1]
imgfile = open('/'.join([settings.MEDIA_ROOT, 'test.png' ]), 'w+b')
imgfile.write(decodestring(base64_image))
imgfile.seek(0)
f = Image.open(imgfile)
#.. as above
但调整大小/裁剪的图像:
为什么 2.case 质量和尺寸都不好? (黑色底部..)我做错了什么?我是否以错误的方式读取 base64 字符串?
【问题讨论】:
-
您是否检查了情况 2 中写入磁盘的实际文件(操作之前)?这将告诉传输或解码是否失败,将问题减少一半。
标签: python django image python-imaging-library pillow