用Python將女朋友的照片做成壁紙軟體,實現桌面壁紙自動更換!

来源:https://www.cnblogs.com/hahaa/archive/2023/05/22/17421564.html
-Advertisement-
Play Games

話說兄弟們,女朋友生氣了都是怎麼哄的? 不會吧不會吧,不會有人還是單身狗吧! 算了,還是回到正題吧,再說我要挨打了~ 今天咱們來交流一下程式員是怎麼哄女朋友的,話不多說直接開始! 準備工作 1、環境 首先我們準備好環境和編輯器,我使用的是: Python 3.8 解釋器 Pycharm 編輯器 2、 ...


話說兄弟們,女朋友生氣了都是怎麼哄的?

不會吧不會吧,不會有人還是單身狗吧!

 

 

算了,還是回到正題吧,再說我要挨打了~

今天咱們來交流一下程式員是怎麼哄女朋友的,話不多說直接開始!

準備工作

1、環境

首先我們準備好環境和編輯器,我使用的是:

  • Python 3.8 解釋器
  • Pycharm 編輯器

2、使用的模塊

import re  # 正則表達式模塊
import requests  # 數據請求模塊
import os  # 文件操作模塊
import ctypes # 時間模塊

 

request是第三方模塊,需要手動安裝一下,win + R輸入cmd 輸入安裝命令pip install requests

其它的都是自帶的,不用安裝,直接調用。

3、如何配置pycharm裡面的python解釋器?

  1. 選擇file(文件) >>> setting(設置) >>> Project(項目) >>> python interpreter(python解釋器)
  2. 點擊齒輪, 選擇add
  3. 添加python安裝路徑

4、pycharm如何安裝插件?

  1. 選擇file(文件) >>> setting(設置) >>> Plugins(插件)
  2. 點擊 Marketplace 輸入想要安裝的插件名字 比如:翻譯插件 輸入 translation / 漢化插件 輸入 Chinese
  3. 選擇相應的插件點擊 install(安裝) 即可
  4. 安裝成功之後 是會彈出 重啟pycharm的選項 點擊確定, 重啟即可生效

代碼實戰

為了單身的小伙伴,於是我將案例分為兩個部分。

  1. 獲取壁紙
  2. 設置自動更換

當然,不單身的話直接看第二部分,哈哈~

1、獲取壁紙

首先來實現單張壁紙獲取

這裡分為四個步驟來獲取壁紙,後面的網址我都屏蔽一下,防止檢測。

  1. 發送請求, 對於 .***.com/desk/31131.htm 發送請求
  2. 獲取數據, 獲取網頁源代碼 <伺服器返迴響應數據>
  3. 解析數據, 提取我們想要的數據內容 壁紙鏈接以及名字
  4. 保存數據, 把壁紙文件保存到本地文件

發送請求

for page in range(3, 21):
    print(f'正在採集第{page}頁的數據內容')
    # 請求鏈接
    link = f'http://www.****.com/index_{page}.htm'
    # 發送請求
    html_data = requests.get(link).text
    # 提取ID
    img_id_list = re.findall('<a href="/desk/(\d+)\.htm" title=', html_data)
    # for迴圈遍歷
    for img_id in img_id_list:
        # 請求鏈接
        url = f'http://www.***.com/desk/{img_id}.htm'
        # 發送請求
        response = requests.get(url)

 

獲取數據

    response.text 獲取響應文本數據
response.encoding = response.apparent_encoding 自動識別碼

 

解析數據

# 獲得到數據, 返回出現亂碼了
response.encoding = 'gbk'
# 鏈接地址 以及 標題
img, title = re.findall('<img src="(.*?)" alt="(.*?)"', response.text)[0]
print(img, title)

 

保存數據

# 發送請求, 獲取數據
# 完整源碼+視頻講解+表白牆代碼
# 都放在這個摳裙了:815624229
img_content = requests.get(img).content
with open('img\\' + title + '.jpg', mode='wb') as f:
    f.write(img_content)

 

多頁多個數據採集

這裡只講一下大概思路,我有專門錄製視頻來講解,可以在文末獲取。

一個鏈接, 對應一個數據,獲取多個鏈接, 獲取多個數據。

http://www.***.com/desk/31095.htm
http://www.***.com/desk/31131.htm
http://www.***.com/desk/31090.htm
http://www.***.com/desk/31092.htm
第二頁: http://www.***.com/index_2.htm
第三頁: http://www.***.com/index_3.htm
第四頁: http://www.***.com/index_4.htm

 

自動更換壁紙程式

import os
import ctypes
import cv2
 
 
def Change():
    # 壁紙文件夾路徑
    wallpaper_dir = r"D:\壁紙\output"
    # 獲取壁紙文件夾中的文件列表
    wallpapers = os.listdir(wallpaper_dir)
    # 隨機選擇一張壁紙
    # wallpaper_filename = random.choice(wallpapers)
    for wallpaper in wallpapers:
        # 拼接壁紙文件的完整路徑
        wallpaper_path = os.path.join(wallpaper_dir, wallpaper)
        # 設置壁紙
        ctypes.windll.user32.SystemParametersInfoW(20, 0, wallpaper_path, 3)
 
 
def convert_mp4_to_jpgs(path):
    video_capture = cv2.VideoCapture(path)
    still_reading, image = video_capture.read()
    frame_count = 5  # 保存的起始幀的編號005
    while still_reading:
        cv2.imwrite(f"output/frame_{frame_count:03d}.jpg", image)
        # read next image
        still_reading, image = video_capture.read()
        frame_count += 5  # 保存幀依次增加5,005>>010>>015.......
 
Change()

 

最後

為了大家能更好的讓女朋友感受到你的誠意,我還準備了一份將女友照片做成照片牆的源碼,和本文源碼+視頻講解都打包好了,直接在在公眾號【Python學習交流】發送關鍵字【照片】自動領取。

來看看效果


好了,哄女朋友的分享就到這結束了,建議大家沒事還是不要惹女朋友生氣了,哄好了還好,哄不好就G了!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 參考:[Building a WebGL Carousel with React Three Fiber and GSAP](https://tympanus.net/codrops/2023/04/27/building-a-webgl-carousel-with-react-three-fibe ...
  • ## 一、模式動機 迭代器模式(Iterator Pattern)是一種使用頻率非常高的行為型設計模式,**迭代器**用於**對一個聚合對象進行遍歷**。通過**引入迭代器**可以**將數據的遍歷功能從聚合對象中分離出來**,**聚合對象只負責存儲數據**,而**遍曆數據由迭代器來完成**,簡化了聚 ...
  • 之前總聊微服務,今天換一個話題---低代碼。低代碼這個詞也是最近這幾年很火的概念,尤其是遇到大環境下行,很多大廠和互聯網那個公司也在慢慢在低代碼方向發力,當然,對於傳統項目交付型的軟體公司,低代碼也具有相當大的吸引力。 ...
  • 不同團隊落地DDD所採取的應用架構風格可能不同,並沒有統一的、標準的DDD工程架構。即使無法制定通用的、標準的工程應用架構,但為團隊制定一個遵循領域驅動設計思想的參考架構依然有價值。 ...
  • 今天又是摸魚的一天,在群里閑聊的時候突然有位群友題了個問題: ![](https://img2023.cnblogs.com/blog/2696704/202305/2696704-20230522233309409-1620806525.png) 群友們反應很快,一下子就解決了沒有加關鍵字vola ...
  • # 前言 Java 中的三元運算,平時也叫做三目運算,大家瞭解嗎?下麵就詳細介紹一下,以後在項目編程中用得到。 # 一、Java運算符 在最底層,Java 中的數據是通過使用運算符來操作的。運算符是一種特殊的符號,用來表示數據的運算、賦值和比較等等。每一種編程語言都有運算符,在 Java 中運算符可 ...
  • 視頻地址 # 1 Stream流概述 - 目的:簡化集合和數組操作的API,結合了Lambda表達式。 - Stream流式思想的核心: 1. 先得到集合或者數組的Stream流(就是一根傳送帶) 2. 把元素放上去 3. 用這個Stream流簡化的API來方便的操作元素 # 2 Stream流獲取 ...
  • ### 子類調用父類的方法的三種方式: - 父類名.方法名(self) - super(子類名,self).父類方法名() - super().父類方法名 註意:super()通過子類調用當前父類的方法,super預設會調用第一個父類的方法(適用於單繼承的多層繼承 如下代碼: ```python # ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...