python怎么在上传图片后压缩图片大小
问题描述
我用的是flask框架,图片处理用的是pillow。
一般上传都是在循环files,然后逐个file.save()我希望在save完成后,执行pillow的压缩逻辑。
但是似乎save是一个I/O操作,存在延迟性,如果直接在file.save()下面直接调用pillow的Image.open,会出错,因为图片数据还没有写入图片。
咋办?
问题解答
回答1:def save(self, dst, buffer_size=16384):'''Save the file to a destination path or file object. If thedestination is a file object you have to close it yourself after thecall. The buffer size is the number of bytes held in memory duringthe copy process. It defaults to 16KB.For secure file saving also have a look at :func:`secure_filename`.:param dst: a filename or open file object the uploaded file is saved to.:param buffer_size: the size of the buffer. This works the same as the `length` parameter of :func:`shutil.copyfileobj`.'''from shutil import copyfileobjclose_dst = Falseif isinstance(dst, string_types): dst = open(dst, ’wb’) close_dst = Truetry: copyfileobj(self.stream, dst, buffer_size)finally: if close_dst:dst.close()
你看save操作不是异步的吖
更新
copyfileobj是个阻塞操作
https://github.com/pallets/we...
回答2:其实这类图片处理,直接使用阿里云的OSS或者七牛等类似的存储功能更好,直接将图片上传到OOS中,然后调用特别的后缀进行指定的图片处理,未来也访问OSS上处理后的地址。这样既可以规避用自己服务器处理图片的负荷,而且也降低了访问的压力,对于降低程序的复杂度也是大有好处的。
回答3:楼主看看Image.open 的fp参数,也可以A filename (string), pathlib.Path object or a file object PIL.Image.open(fp, mode=’r’)
你直接传file给Image.open(file)就可以了吧!
PIL.Image.open(fp, mode=’r’)Opens and identifies the given image file.This is a lazy operation; this function identifies the file, but the file remains open and the actual image data is not read from the file until you try to process the data (or call the load() method). See new().Parameters: fp – A filename (string), pathlib.Path object or a file object. The file object must implement read(), seek(), and tell() methods, and be opened in binary mode.mode – The mode. If given, this argument must be “r”.Returns: An Image object.Raises: IOError – If the file cannot be found, or the image cannot be opened and identified.
相关文章:
1. javascript - 修改表单多选项时和后台同事配合的问题。2. macos - mac下docker如何设置代理3. docker绑定了nginx端口 外部访问不到4. angular.js使用$resource服务把数据存入mongodb的问题。5. javascript - 怎么实现点击表格中的某一行然后就在表单处出现表格中的对应的属性值啊6. redis - 究竟是选择微信小程序自带的统计工具还是自己开发一个数据统计的代码?7. docker 下面创建的IMAGE 他们的 ID 一样?这个是怎么回事????8. angular.js - angular ui bootstrap 中文显示问题9. Docker for Mac 创建的dnsmasq容器连不上/不工作的问题10. docker-machine添加一个已有的docker主机问题

网公网安备