代碼核心思路
- 循環(huán)降低圖片質(zhì)量quality
- 直至圖片質(zhì)量大小符合目標(biāo)質(zhì)量后退出循環(huán)
pillow壓縮失真嚴(yán)重
'''
pip install pillow
'''
from io import BytesIO
from PIL import Image
def pic_compress(pic_path, out_path, target_size, quality=90, step=5):
# 讀取圖片bytes
with open(pic_path, 'rb') as f:
pic_byte = f.read()
current_size = len(pic_byte) / 1024 # 圖片當(dāng)前質(zhì)量大小
print("圖片壓縮前的大小為(KB):", current_size)
while current_size > target_size: # 當(dāng)達(dá)到目標(biāo)壓縮大小后退出循環(huán)
img = Image.open(BytesIO(pic_byte))
buf = BytesIO()
img.save(buf, format=img.format, quality=quality)
pic_byte = buf.getvalue()
if quality - step < 0: # 以降低到最小質(zhì)量
break
quality -= step
current_size = len(pic_byte) / 1024
# 保存圖片
with open(out_path, 'wb') as f:
f.write(pic_byte)
return len(pic_byte) / 1024
def main():
pic_size = pic_compress('test.jpg', 'new_test.jpg', target_size=100)
print("圖片壓縮后的大小為(KB):", pic_size)
if __name__ == '__main__':
main()
pillow處理后和原圖片的對比文章來源:http://www.zghlxwxcb.cn/news/detail-503114.html
使用pillow壓縮的圖片不單止大小質(zhì)量沒達(dá)標(biāo)而且處理后的圖片失真不忍直視。
使用opencv保真壓縮
'''
pip install numpy
pip install opencv-python
'''
from io import BytesIO
import cv2
import numpy as np
def pic_compress(pic_path, out_path, target_size=199, quality=90, step=5, pic_type='.jpg'):
# 讀取圖片bytes
with open(pic_path, 'rb') as f:
pic_byte = f.read()
img_np = np.frombuffer(pic_byte, np.uint8)
img_cv = cv2.imdecode(img_np, cv2.IMREAD_ANYCOLOR)
current_size = len(pic_byte) / 1024
print("圖片壓縮前的大小為(KB):", current_size)
while current_size > target_size:
pic_byte = cv2.imencode(pic_type, img_cv, [int(cv2.IMWRITE_JPEG_QUALITY), quality])[1]
if quality - step < 0:
break
quality -= step
current_size = len(pic_byte) / 1024
# 保存圖片
with open(out_path, 'wb') as f:
f.write(BytesIO(pic_byte).getvalue())
return len(pic_byte) / 1024
def main():
pic_size = pic_compress('test.jpg', 'new_test.jpg', target_size=100)
print("圖片壓縮后的大小為(KB):", pic_size)
if __name__ == '__main__':
main()
opencv處理后和原圖片的對比文章來源地址http://www.zghlxwxcb.cn/news/detail-503114.html
文章靈感
- 想用python壓縮圖片然后網(wǎng)上搜,搜索結(jié)果90%都是python使用pillow的壓縮。最主要是pillow壓縮后失真嚴(yán)重,在圖片壓縮方面純屬是個擺設(shè)的功能。
到了這里,關(guān)于python壓縮圖片--指定壓縮大小且保真壓縮的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!