python怎么在上傳圖片后壓縮圖片大小
問題描述
我用的是flask框架,圖片處理用的是pillow。
一般上傳都是在循環(huán)files,然后逐個file.save()我希望在save完成后,執(zhí)行pillow的壓縮邏輯。
但是似乎save是一個I/O操作,存在延遲性,如果直接在file.save()下面直接調(diào)用pillow的Image.open,會出錯,因為圖片數(shù)據(jù)還沒有寫入圖片。
咋辦?
問題解答
回答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中,然后調(diào)用特別的后綴進行指定的圖片處理,未來也訪問OSS上處理后的地址。這樣既可以規(guī)避用自己服務(wù)器處理圖片的負荷,而且也降低了訪問的壓力,對于降低程序的復(fù)雜度也是大有好處的。
回答3:樓主看看Image.open 的fp參數(shù),也可以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.
相關(guān)文章:
1. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項2. html按鍵開關(guān)如何提交我想需要的值到數(shù)據(jù)庫3. 用TP6寫的HTML,我的layui樣式為什么出不來,路徑?jīng)]錯,頁面報錯:不允許加載本地資源:fil4. javascript - 求助關(guān)于call和apply的問題,反柯里化5. css3 - 圖文響應(yīng)式樣式6. macos - mac下docker如何設(shè)置代理7. css3怎么讓img上下左右居中8. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯誤9. PHP類屬性聲明?10. javascript - 求助大問題!!!!!這輸出為什么能不一樣
