基于Python編寫圖片去水印小工具
你有沒有注意到,某魚上有不少提供去水印的服務(wù),收取1塊錢每張圖。最搞笑的是,很多人都沒意識到,去水印的技術(shù)其實(shí)非常簡單,尤其是現(xiàn)在AI盛行的時代,好多平臺會提供的去水印接口便宜又好用,一張圖片只需要幾分錢就能搞定,比某魚的1塊錢便宜不知道倍!
為什么說是暴利呢?因?yàn)榛ń惆l(fā)現(xiàn)https://www.textin.com/上面有個圖像水印去除的接口,調(diào)用1次只需要0.025!??!妥妥的只賺不虧呀!
我們在看看去水印的效果,還是很厲害的,反正讓我PS絕對沒人家做的這么好,而且圖片也沒壓縮:


官方還貼心的給出了接口調(diào)用示例:

接下來我們只需要套個GUI外殼,方便我們批量處理圖片即可。
把它做成一個GUI工具
官網(wǎng)雖然給出了調(diào)用示例,但是為了提高操作便捷性,我們可以做一個圖形化界面(GUI)。別擔(dān)心,GUI不難,我這就來帶你做一個簡單的Windows桌面應(yīng)用,用Tkinter這個Python內(nèi)建的庫。
1. 安裝必要的庫
pip install requests pillow
2. 編寫GUI代碼
import os
import tkinter as tk
from tkinter import filedialog, messagebox
import json
import requests
import base64
from PIL import Image
from io import BytesIO
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 之前的水印去除API調(diào)用部分
class CommonOcr(object):
def __init__(self, img_path=None, is_url=False):
# 圖像水印去除
self._url = 'https://api.textin.com/ai/service/v1/image/watermark_remove'
# 請登錄后前往 “工作臺-賬號設(shè)置-開發(fā)者信息” 查看 x-ti-app-id
# 示例代碼中 x-ti-app-id 非真實(shí)數(shù)據(jù)
self._app_id = '73b************************d269'
# 請登錄后前往 “工作臺-賬號設(shè)置-開發(fā)者信息” 查看 x-ti-secret-code
# 示例代碼中 x-ti-secret-code 非真實(shí)數(shù)據(jù)
self._secret_code = 'de1ac7*******************48993131'
self._img_path = img_path
self._is_url = is_url
def recognize(self):
head = {}
try:
head['x-ti-app-id'] = self._app_id
head['x-ti-secret-code'] = self._secret_code
if self._is_url:
head['Content-Type'] = 'text/plain'
body = self._img_path
else:
image = get_file_content(self._img_path)
head['Content-Type'] = 'application/octet-stream'
body = image
result = requests.post(self._url, data=body, headers=head)
return result.text
except Exception as e:
return e
def down_img(base64str,output_folder,img_name):
try:
img_data = base64.b64decode(base64str)
img = Image.open(BytesIO(img_data))
file_name = os.path.join(output_folder,img_name)
img.save(file_name)
# with open(output_folder, 'wb') as f:
# f.write(image_data)
print(f"去水印圖片已經(jīng)保存到 {file_name}")
except Exception as e:
print(f"圖片去水印失敗: {e}")
# GUI界面部分
class WatermarkRemoverApp:
def __init__(self, root):
self.root = root
self.root.title("去水印工具")
self.root.geometry("400x200")
self.select_button = tk.Button(root, text="選擇文件夾", command=self.select_folder)
self.select_button.pack(pady=20)
self.process_button = tk.Button(root, text="開始去水印", command=self.process_images, state=tk.DISABLED)
self.process_button.pack(pady=20)
def select_folder(self):
self.folder_path = filedialog.askdirectory()
if self.folder_path:
self.process_button.config(state=tk.NORMAL)
def process_images(self):
output_folder = os.path.join(self.folder_path, "output")
os.makedirs(output_folder, exist_ok=True)
for file_name in os.listdir(self.folder_path):
if file_name.endswith((".jpg",".jpeg", ".png",".bmp")):
file_path = os.path.join(self.folder_path, file_name)
response = CommonOcr(img_path=file_path).recognize()
# 解析JSON字符串為Python字典
data = json.loads(response)
if data["code"] ==200: # 假設(shè)接口返回包含"success"表示成功
down_img(data["result"]["image"],output_folder,file_name)
else:
messagebox.showerror("錯誤", f"圖片 {file_name} 去水印失敗!{data['msg']}")
messagebox.showinfo("完成", "所有圖片已處理完畢!")
if __name__ == "__main__":
root = tk.Tk()
app = WatermarkRemoverApp(root)
root.mainloop()
3. 編寫GUI代碼
運(yùn)行起來是這個樣子的

使用教程
- 選擇文件夾:點(diǎn)擊“選擇文件夾”按鈕,選擇你要處理的圖片文件夾。
- 開始去水印:點(diǎn)擊“開始去水印”,程序會自動遍歷文件夾中的所有圖片(支持JPG、PNG等格式),然后通過調(diào)用textin接口去除水印。
- 輸出文件:去水印后的圖片會保存在當(dāng)前文件夾中的
output目錄下。
如何賺錢?
現(xiàn)在你可以用這個工具來給圖片去水印了,接下來就是去某魚發(fā)布去水印的服務(wù)。比如,你可以定個價格:每張圖片1元,批量去水印,隨便做個廣告推送,搞定!很多人會覺得手動去水印很麻煩,尤其是做電商的商家,他們更愿意支付小額費(fèi)用來節(jié)省時間。
總結(jié)
這篇教程給大家展示了如何利用Python簡單地實(shí)現(xiàn)一個去水印工具,并且利用textin的接口去水印服務(wù)賺取差價。通過GUI界面,你甚至可以讓這個工具變得更方便易用,適合沒有編程基礎(chǔ)的人群。你可以將這款工具用作副業(yè),快速投入市場,甚至可以做得越來越大,開始接更多客戶,走上暴富之路(咳咳,開玩笑的)。
到此這篇關(guān)于基于Python編寫圖片去水印小工具的文章就介紹到這了,更多相關(guān)Python圖片去水印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python+selenium+chromedriver實(shí)現(xiàn)爬蟲示例代碼
這篇文章主要介紹了python+selenium+chromedriver實(shí)現(xiàn)爬蟲示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
Python實(shí)現(xiàn)PS濾鏡Fish lens圖像扭曲效果示例
這篇文章主要介紹了Python實(shí)現(xiàn)PS濾鏡Fish lens圖像扭曲效果,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)PS濾鏡的圖像扭曲效果相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
python函數(shù)也可以是一個對象,可以存放在列表中并調(diào)用方式
這篇文章主要介紹了python函數(shù)也可以是一個對象,可以存放在列表中并調(diào)用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
Pytorch轉(zhuǎn)keras的有效方法,以FlowNet為例講解
這篇文章主要介紹了Pytorch轉(zhuǎn)keras的有效方法,以FlowNet為例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
親手教你實(shí)現(xiàn)pynq-z2條形碼識別功能
這篇文章主要介紹了pynq-z2條形碼識別功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07
PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not
這篇文章主要給大家介紹了關(guān)于PyCharm添加Anaconda中的虛擬環(huán)境Python解釋器出現(xiàn)Conda?executable?is?not?found錯誤的解決辦法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-02-02

