欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python如何實現(xiàn)圖片壓縮

 更新時間:2020年09月11日 09:49:31   作者:大飛  
這篇文章主要介紹了python如何實現(xiàn)圖片壓縮,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下

本工具是通過將圖片上傳到第三方網(wǎng)站tinypng,進行壓縮后下載,覆蓋本地圖片,tinypng是一個強大的圖片處理網(wǎng)站,目前最可靠的無損壓縮網(wǎng)站。

代碼如下:

import requests
from idna import unicode
from selenium import webdriver
import time
import os

browser = webdriver.Firefox(executable_path='/Users/lyf/Library/Google/geckodriver')



def tiny_png(url):
  # browser.get('https://tinypng.com/')
  upload_file = browser.find_element_by_tag_name("input")
  try:
    upload_file.send_keys(url)
    browser.implicitly_wait(20)
    a = browser.find_element_by_link_text('download')
    img_url = a.get_attribute('href')
    print(img_url)
    r = requests.get(img_url)
    with open(url, 'wb') as f:
      f.write(r.content)
    browser.refresh()
    time.sleep(2)
  except Exception as e:
    print(e)


def is_need_compress(img_path):
  """
  判斷是否需要壓縮處理 >10k 進行壓縮處理
  :param img_path:
  :return:
  """
  if img_path.endswith('.jpg') or img_path.endswith('.png'):
    size = os.path.getsize(img_path) / 1024
    if size > 10.0:
      print('文件大小:%sk' % size)
      return True
  return False


def file_loop(file_path):
  """
  遍歷文件夾
  :param file_path:
  :return:
  """
  files = os.listdir(file_path)
  for fi in files:
    fi_d = os.path.join(file_path, fi)
    if os.path.isdir(fi_d):
      file_loop(fi_d)
    else:
      child_path = os.path.join(file_path, fi_d)
      print(child_path)
      if is_need_compress(child_path):
        tiny_png(child_path)


if __name__ == "__main__":
  file_path = "/Users/lyf/AndroidStudioProjects/fubei/new-fubei-android-2.5-up/app/src/main/assets/www/assets"
  browser.get('https://tinypng.com/')
  file_loop(file_path)

改進版

優(yōu)化點:

1.遍歷完成本地文件夾再去上傳網(wǎng)站

2.所有圖片壓縮完成再去下載

3.啟動多線程下載

4.設(shè)定時間為加載完網(wǎng)絡(luò)就去上傳文件(非常非常重要,提速N倍)

import requests
from selenium import webdriver
import time
import os
import _thread
import threading
from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By

# browser = webdriver.Firefox(executable_path='/Users/lyf/Library/Google/geckodriver')

browser = None

image_map = {}
compress_list = []

def tiny_png(url):
  """
  打開網(wǎng)站進行圖片上傳下載
  :param url:
  :return:
  """
  try:
    upload_file = WebDriverWait(browser, 10).until(
      EC.presence_of_element_located((By.TAG_NAME, "input"))
    )
    upload_file.send_keys(url)
    a = WebDriverWait(browser, 20).until(
      EC.presence_of_element_located((By.LINK_TEXT, "download"))
    )
    img_url = a.get_attribute('href')
    compress_list.remove(url)
    print(img_url)
    image_map[url] = img_url
    _thread.start_new_thread(sleep, (4,))
    print('刷新網(wǎng)頁')
    browser.refresh()
    time.sleep(2)
  except Exception as e:
    print(e.__str__())
    browser.execute_script('window.stop()')


def sleep(delay):
  """
  一定的時間后 未加載完網(wǎng)頁 只要控件加載出來就可以停止網(wǎng)頁加載
  :param delay:
  :return:
  """
  browser.set_page_load_timeout(delay)
  browser.set_script_timeout(delay)


def down_img(file_path, down_url):
  """
  下載圖片覆蓋原地址
  :param file_path:
  :param down_url:
  :return:
  """
  r = requests.get(down_url)
  with open(file_path, 'wb') as f:
    f.write(r.content)
  print('下載完成:%s' % down_url)


def is_need_compress(img_path):
  """
  判斷是否需要壓縮處理 >10k 進行壓縮處理
  :param img_path:
  :return:
  """
  if img_path.endswith('.jpg') or img_path.endswith('.png'):
    size = os.path.getsize(img_path) / 1024
    print(img_path)
    print('文件大小:%sk' % size)
    if size > 5000.0:
      print('*****' * 30)
      print('這么大的圖片搞笑嗎')
      print(img_path)
      print('*****' * 30)
    if size > 0.0 and size < 10.0:
      return True
  return False


def file_loop(file_path, compress_list):
  """
  遍歷文件夾
  :param file_path:
  :return:
  """
  files = os.listdir(file_path)
  for fi in files:
    fi_d = os.path.join(file_path, fi)
    if os.path.isdir(fi_d):
      file_loop(fi_d, compress_list)
    else:
      child_path = os.path.join(file_path, fi_d)
      if is_need_compress(child_path):
        compress_list.append(child_path)


def down_all():
  """
  下載所有的圖片
  :return:
  """
  thread_list = []
  for k, v in image_map.items():
    print('key:%s value:%s' % (k, v))
    th = threading.Thread(target=down_img, args=(k, v))
    th.start()
    thread_list.append(th)
  for r in thread_list:
    r.join()


def loop_press():
  """
  輪詢獲取下載地址
  :return:
  """
  for url in compress_list:
    tiny_png(url)


def start_browser():
  """
  啟動瀏覽器
  :return:
  """
  global browser
  browser = webdriver.Firefox(executable_path='/Users/lyf/Library/Google/geckodriver')
  _thread.start_new_thread(sleep, (10,))
  print('加載網(wǎng)頁')
  try:
    browser.get('https://tinypng.com/')
  except:
    browser.execute_script('window.stop()')


if __name__ == "__main__":
  start_time = time.time()
  file_path = "/Users/lyf/Desktop/www/assets"
  # 獲取本地所有需要壓縮的圖片
  file_loop(file_path, compress_list)
  print('符合條件的圖片有%s張' % len(compress_list))
  start_browser()
  loop_press()
  while len(compress_list) > 0:
    browser.quit()
    start_browser()
    loop_press()

  # 多線程下載拿到所有返回下載的地址
  down_all()

  end = time.time()
  time_m = end - start_time
  print("time: " + str(time_m))
  browser.quit()

以上就是python如何實現(xiàn)圖片壓縮的詳細內(nèi)容,更多關(guān)于python 圖片壓縮的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python對于requests的封裝方法詳解

    python對于requests的封裝方法詳解

    今天小編就為大家分享一篇python對于requests的封裝方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解python中的線程與線程池

    詳解python中的線程與線程池

    這篇文章主要介紹了python線程與線程池,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Python使用sklearn庫實現(xiàn)的各種分類算法簡單應(yīng)用小結(jié)

    Python使用sklearn庫實現(xiàn)的各種分類算法簡單應(yīng)用小結(jié)

    這篇文章主要介紹了Python使用sklearn庫實現(xiàn)的各種分類算法,結(jié)合實例形式分析了Python使用sklearn庫實現(xiàn)的KNN、SVM、LR、決策樹、隨機森林等算法實現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • Python fileinput模塊應(yīng)用詳解

    Python fileinput模塊應(yīng)用詳解

    說到fileinput,可能90%的碼農(nóng)表示沒用過,甚至沒有聽說過。這不奇怪,因為在python界,既然open可以走天下,何必要fileinput呢,今天我們來了解下它
    2022-09-09
  • Python爬蟲進階Scrapy框架精文講解

    Python爬蟲進階Scrapy框架精文講解

    這篇文章主要為大家介紹了Python爬蟲進階中Scrapy框架精細講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 基于Python制作一個解壓的內(nèi)存加速球

    基于Python制作一個解壓的內(nèi)存加速球

    安全管家助手什么的上總會帶一個內(nèi)存加速球,有關(guān)掉進程以及內(nèi)存清理的功能,本文就來利用Python制作一個解壓的內(nèi)存加速球,有需要的小伙伴可以參考下
    2023-10-10
  • Python英文文本分詞(無空格)模塊wordninja的使用實例

    Python英文文本分詞(無空格)模塊wordninja的使用實例

    今天小編就為大家分享一篇關(guān)于Python英文文本分詞(無空格)模塊wordninja的使用實例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Python低層多線程接口_thread模塊的用法和特性

    Python低層多線程接口_thread模塊的用法和特性

    這篇文章主要介紹了Python低層多線程接口_thread模塊的用法和特性,_thread是python標準庫中的一個低層多線程API,可以在進程中啟動線程來處理任務(wù),并且提供了簡單的鎖機制來控制共享資源的同步訪問,本文就_thread模塊的用法和特性做個簡單的演示,需要的朋友可以參考下
    2024-10-10
  • python實現(xiàn)彩色圖轉(zhuǎn)換成灰度圖

    python實現(xiàn)彩色圖轉(zhuǎn)換成灰度圖

    這篇文章主要為大家詳細介紹了python實現(xiàn)彩色圖轉(zhuǎn)換成灰度圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • python中的bisect模塊與二分查找詳情

    python中的bisect模塊與二分查找詳情

    這篇文章主要介紹了python中的bisect模塊與二分查找詳情,bisect是python的內(nèi)置模塊,?用于有序序列的插入和查找。?插入的數(shù)據(jù)不會影響列表的排序,更多詳細內(nèi)容需要的朋友可以參考一下
    2022-09-09

最新評論