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

Python對(duì)接PicGo實(shí)現(xiàn)圖片自動(dòng)加水印并上傳操作示例

 更新時(shí)間:2021年10月25日 14:53:17   作者:寫(xiě)代碼的明哥  
這篇文章主要為大家介紹了Python對(duì)接PicGo實(shí)現(xiàn)圖片自動(dòng)加水印并上傳的操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

1. 天下苦搬運(yùn)黨久矣

對(duì)于我這樣經(jīng)常需要寫(xiě)點(diǎn)文章的技術(shù)自媒體來(lái)說(shuō),很經(jīng)常早上我才在公眾號(hào)首發(fā)了原創(chuàng)文章,中午就有人同步到了知乎、今日頭條等外部平臺(tái),并且拿到了該篇文章在這些平臺(tái)的首發(fā)。

平臺(tái)的首發(fā)很重要,以微信的公眾號(hào)平臺(tái)來(lái)說(shuō),一篇文章能否在公眾號(hào)標(biāo)原創(chuàng),就是通過(guò)檢測(cè)是否在公眾號(hào)平臺(tái)上首發(fā),如果公眾號(hào)的文章庫(kù)里沒(méi)有搜索到與你文章相似度較高的文章,那么你就可以標(biāo)原創(chuàng)了。

為了解決了首發(fā)的問(wèn)題,我付費(fèi)使用了 OpenWrite 這個(gè)平臺(tái),每個(gè)月 20 塊錢(qián)的費(fèi)用,一鍵就可以分發(fā)各大平臺(tái),非常的省心~

首發(fā)固然重要,但有時(shí)候也沒(méi)那么重要。

因?yàn)橛袑?zhuān)門(mén)的培訓(xùn)機(jī)構(gòu)(這里就不點(diǎn)名,避免給他們反向營(yíng)銷(xiāo))就是拿你的文章去給自己的帳號(hào)堆干貨,吸引關(guān)注,他們才不在乎原創(chuàng)不原創(chuàng),只要文章能發(fā)布就行了。

這種人在知乎這種沒(méi)有原創(chuàng)檢測(cè)機(jī)制的平臺(tái),可以活得很好。

之前有一無(wú)良培訓(xùn)機(jī)構(gòu)在知乎上生產(chǎn)了10幾個(gè)號(hào),批量搬運(yùn)我以及一些朋友的原創(chuàng)文章。那時(shí)候,我每天都可以舉報(bào)好多。

漸漸地,我累了,自己寫(xiě)了幾百篇的文章,如果一篇一篇去檢查,那我這一天基本啥事都做不了,違權(quán)成本實(shí)在太高了。

考慮到我的文章都有非常多的圖片,為了讓這些人在白嫖我文章的同時(shí),也能給我?guī)?lái)點(diǎn)收益(當(dāng)然人家是不可能付費(fèi)的,但至少能給我的公眾號(hào)打打廣告也是非常奈斯的)。

于是我就想啊,是不是可以自己寫(xiě)個(gè)工具,給自己的每張配圖上都加上自己的水印,看他們還盜不盜。。

2. 目前的圖床管理工具

在開(kāi)始講如何利用 Python 來(lái)實(shí)現(xiàn)我的需求之前 ,我有必要介紹下我的圖床管理工具。

我在寫(xiě)文章的時(shí)候,主要用到三款工具:

Typora :Markdown 文案的編輯Snipaste:非常好用的截圖工具PicGo:非常人性的圖床管理工具

其中今天的要參與的主角是 PicGo

它對(duì)當(dāng)下主流的圖床平臺(tái)都提供了很好的支持

當(dāng)我使用了 Snipaste 截圖后,再按住快捷鍵(⌘ ⇧ P),就可以立即將你的圖床上傳至指定圖床,并且將上傳后的鏈接以 markdown 的圖片格式復(fù)制到剪切板中,你可以直接粘貼使用。

3. 方案的設(shè)想

由于這一整工具,我已經(jīng)使用了三年,各種操作都非常的熟悉,對(duì)他們我已經(jīng)產(chǎn)生了極度的依賴(lài),因此現(xiàn)在我想要實(shí)現(xiàn)自動(dòng)加水印的功能,也一定是建立在這套工具的基礎(chǔ)上完成的。

Snipaste 和 PicGo 本身都不支持自定義水印,也不提供第三方插件的開(kāi)發(fā)入口。

Snipaste 和 PicGo 之所以能夠在一起工作,是因?yàn)橛辛思羟邪暹@個(gè)橋梁,因此想要實(shí)現(xiàn)自己的需求,只能從剪切板上尋找突破口。

多余的廢話就不多說(shuō)了,我直接說(shuō)下我的方案:

在 Snipaste 將圖像放入剪切板后由我敲入自定義的熱鍵去觸發(fā) Python 腳本去從剪切板中讀取圖像然后使用 PIL 去給該圖像加水印,重新放入剪切板中接著利用 Python 腳本去自動(dòng)化觸發(fā) PicGo 的快捷鍵PicGo 被激活后,就能將帶有水印的圖片上傳到圖床

為了讓你對(duì)這個(gè)方案,有一個(gè)直觀的理解,我特地畫(huà)了一張流程圖,其中虛線就是我得自己實(shí)現(xiàn)的功能。

4. 代碼完整解析

4.1 定義熱鍵并監(jiān)聽(tīng)鍵盤(pán)

在 Python 中有一個(gè) pynput 庫(kù),利用它可以來(lái)監(jiān)聽(tīng)系統(tǒng)的鍵盤(pán)。

在它的官方文檔中,很快找到了一個(gè)可以自定義熱鍵組合的方案。

from pynput import keyboard

def on_activate():
    print('Global hotkey activated!')

def for_canonical(f):
    return lambda k: f(l.canonical(k))

hotkey = keyboard.HotKey(
    keyboard.HotKey.parse('<ctrl>+<alt>+h'),
    on_activate)
with keyboard.Listener(
        on_press=for_canonical(hotkey.press),
        on_release=for_canonical(hotkey.release)) as l:
    l.join()

但是很遺憾的是,這個(gè)功能目前來(lái)看是有 BUG 的,我在 Mac 上親測(cè)是沒(méi)有效的,而在 github 的 issue 中也有人在 2020 年8月反應(yīng)過(guò)問(wèn)題, 沒(méi)想到到現(xiàn)在還沒(méi)有解決

雖然它本身提供的組合鍵監(jiān)聽(tīng)模式無(wú)法使用,但普通的監(jiān)聽(tīng)模式還是可以使用的,只要有這個(gè)做為基礎(chǔ),那我自己造輪子也不難實(shí)現(xiàn)組合熱鍵的功能。

第一步:先定義好你的熱鍵

upload_pic_set = {
    keyboard.Key.ctrl.value.vk,
    keyboard.Key.cmd.value.vk,
    keyboard.Key.alt.value.vk,
    keyboard.KeyCode(35).vk
}

第二步:監(jiān)聽(tīng)所有的鍵盤(pán)動(dòng)作

with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

只要有一個(gè)鍵處于 press 的狀態(tài),就往列表中存放這個(gè)鍵

key_list = []

def on_press(key):
    if isinstance(key, keyboard.KeyCode):
        key_list.append(key.vk)
    elif isinstance(key, keyboard.Key):
        key_list.append(key.value.vk)

    if set(key_list) == upload_pic_set:
        image = get_image_from_clipboard()
        new_image = make_watermark(image)
        put_image_to_clip(new_image)
        upload_image_via_picgo()
        notify_to_mac("成功添加水印并上傳到圖床")

但是一旦有鍵釋放了,就要清空這個(gè)列表

def on_release(key):
    key_list.clear()

每一次按下鍵都會(huì)檢查,key_list 是否等于 定義好的快捷鍵,如果剛好是相等,就可以開(kāi)始圖片的處理邏輯了。

if set(key_list) == upload_pic_set:
  pass

4.2 從內(nèi)存中讀取圖像

PIL 有一個(gè) ImageGrab 模塊,在這個(gè)模塊中有一個(gè) grabclipboard 函數(shù),它實(shí)現(xiàn)了從剪切板中讀取圖像的功能,不過(guò)讀取的 rgb 格式,由于我們后面加水印時(shí),必須使用 rgba 格式才可以,因此再用 convert 轉(zhuǎn)一下。

  from PIL import  ImageGrab
  
  img_rgb = ImageGrab.grabclipboard()
  image = img_rgb.convert("RGBA")

4.3 添加水印生成新圖像

以下是添加水印的代碼,其實(shí)可能要注意的一點(diǎn)就是如果你的文字里包含中文,那么選擇字體時(shí)一定要是中文字體,否則會(huì)出現(xiàn)方塊字

def make_watermark(image):
    txt = Image.new('RGBA', image.size, (0, 0, 0, 0))
    fnt = ImageFont.truetype("/System/Library/Fonts/STHeiti Medium.ttc", 20)
    draw = ImageDraw.Draw(txt)
    draw.text(((txt.size[0]-300)//2, txt.size[1]-40), "微信公眾號(hào): Python編程時(shí)光", font=fnt, fill=(240, 49, 48, 255))
    draw.text(((txt.size[0]-300)//2, txt.size[1]-70), "未經(jīng)授權(quán)請(qǐng)勿轉(zhuǎn)載", font=fnt, fill=(240, 49, 48,  255))
    out = Image.alpha_composite(image, txt)
    return out

4.4 將新圖像重新放入剪切板

內(nèi)置的 io 模塊支持在內(nèi)存中讀寫(xiě) bytes,只要PIL 的 image 對(duì)象在 save 的時(shí)候保存保存在 BytesIO 對(duì)象中,然后通過(guò) pasteboard 模塊從 BytesIO 對(duì)象中載入數(shù)據(jù),就可以實(shí)現(xiàn)往剪切板中放入圖像的功能。

def put_image_to_clip(image):
    img_byte_arr = io.BytesIO() 
    pb = pasteboard.Pasteboard()

    image.save(img_byte_arr, format='PNG')
    img_byte_arr = img_byte_arr.getvalue()
    pb.set_contents(img_byte_arr, pasteboard.PNG)

pasteboard 載入的圖像只支持 PNG 格式,因此在保存時(shí),一定要指定 PNG。

此外 pasteboard 還支持更多格式的數(shù)據(jù),比如 PDF,音頻數(shù)據(jù),HTML、顏色數(shù)據(jù)等等

更多格式可查看:https://developer.apple.com/documentation/appkit/nspasteboardtypestring

4.5 模擬觸發(fā) PicGo

正常情況下,我們是通過(guò)快捷鍵來(lái)觸發(fā) PicGo 去從剪切板中上傳圖像的,因此想要在程序中激活 PicGo,也只需要在 Python 腳本中模擬鍵盤(pán)動(dòng)作即可。

具體的代碼如下:

from pykeyboard import PyKeyboard

def upload_image_via_picgo():
    k = PyKeyboard()
    k.press_keys(['Command', 'shift', 'p'])

4.6 通知 Mac 通知臺(tái)

上面整個(gè)過(guò)程都是腳本在后臺(tái)默默運(yùn)行的,如果沒(méi)有任何通知,作為用戶,很難知道我們的圖片是否處理好,是否上傳成功,因此建議加一個(gè)通知的函數(shù)。

import os

def notify_to_mac(message):
    os.system("osascript -e 'display notification \"{}\"\'".format(message))

不過(guò)其實(shí) PicGo 上傳完圖片后,本身就會(huì)通知,所以這個(gè)通知并不是必要的,看個(gè)人需求啦~

5. 其他設(shè)置工作

5.1 設(shè)置程序權(quán)限

如果你在使用如上腳本時(shí),發(fā)現(xiàn)有的鍵無(wú)法捕捉,那一定是系統(tǒng)沒(méi)有給予權(quán)限,需要你手動(dòng)開(kāi)啟。

5.2 設(shè)置開(kāi)機(jī)自啟

在這里添加一個(gè)開(kāi)機(jī)啟動(dòng)項(xiàng),而這個(gè) init.sh 是一個(gè) Shell 腳本。

這個(gè)腳本的內(nèi)容如下,注意最后那個(gè) & 一定不能省略。

6. 運(yùn)行效果

代碼全部解析完了,是不是很想看這個(gè)程序運(yùn)行后,可以實(shí)現(xiàn)怎樣的效果呢?

我錄制了個(gè) GIF 動(dòng)態(tài)圖,你可以瞧一瞧,真的太方便了。

7. 寫(xiě)在最后

對(duì)于有和我一樣寫(xiě)博客習(xí)慣的朋友來(lái)說(shuō),我相信這篇文章的思路一定會(huì)有幫助,另外,即使你沒(méi)有防搬運(yùn)的需求,代碼的實(shí)現(xiàn)依然值得學(xué)習(xí),比如

如何監(jiān)聽(tīng)鍵盤(pán)并定義程序的熱鍵?

如何從剪切板中讀取圖像?

如何給圖像添加水?。?/p>

如何將圖像再放入到剪切板?

如何模擬鍵盤(pán)來(lái)激活程序?

在編碼的時(shí)候,也遇到了不少的坑,有的第三方庫(kù)并不適用于 Mac,有的有 BUG 至今也還沒(méi)修復(fù),有的甚至要閱讀源碼才能知道如何使用,經(jīng)過(guò)多輪的調(diào)試和搜索,最終才完成這個(gè)腳本。

以上就是Python對(duì)接PicGo實(shí)現(xiàn)圖片自動(dòng)加水印并上傳操作示例的詳細(xì)內(nèi)容,更多關(guān)于Python對(duì)接PicGo圖片自動(dòng)加水印并上傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼

    OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼

    本文主要介紹了OpenCV結(jié)合selenium實(shí)現(xiàn)滑塊驗(yàn)證碼,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Python統(tǒng)計(jì)字符串中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)

    Python統(tǒng)計(jì)字符串中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)

    這篇文章主要給大家介紹了關(guān)于Python統(tǒng)計(jì)字符串中英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)的相關(guān)資料,本文實(shí)例講述了python統(tǒng)計(jì)字符串中指定字符出現(xiàn)次數(shù)的方法,需要的朋友可以參考下
    2023-06-06
  • 教你利用pygame模塊制作跳躍小球小游戲

    教你利用pygame模塊制作跳躍小球小游戲

    pygame是一個(gè)專(zhuān)門(mén)設(shè)計(jì)來(lái)進(jìn)行游戲開(kāi)發(fā)設(shè)計(jì)的Python模塊,因?yàn)閿[脫了被低級(jí)語(yǔ)言(如機(jī)器語(yǔ)言和匯編語(yǔ)言)的束縛,使用起來(lái)非常的簡(jiǎn)單,這篇文章主要給大家介紹了關(guān)于如何利用pygame模塊制作跳躍小球小游戲的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換

    python輕松實(shí)現(xiàn)代碼編碼格式轉(zhuǎn)換

    由于某些原因,需要將代碼從A機(jī)房遷移到B機(jī)房,這兩個(gè)之間不能互相訪問(wèn),但是歷史原因?qū)е翧機(jī)房的代碼全是utf8編碼的,B機(jī)房要求是GBK編碼,看看這個(gè)怎么解決。雖然很簡(jiǎn)單,但是還是要推薦給大家,需要的小伙伴參考下吧。
    2015-03-03
  • python數(shù)據(jù)清洗中的時(shí)間格式化實(shí)現(xiàn)

    python數(shù)據(jù)清洗中的時(shí)間格式化實(shí)現(xiàn)

    本文主要介紹了python數(shù)據(jù)清洗中的時(shí)間格式化實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • python解包用法詳解

    python解包用法詳解

    在本篇文章里小編給大家整理的是關(guān)于python解包用法詳解內(nèi)容,有需要的朋友們可以跟著一起學(xué)習(xí)下。
    2021-02-02
  • Python中卷積神經(jīng)網(wǎng)絡(luò)(CNN)入門(mén)教程分分享

    Python中卷積神經(jīng)網(wǎng)絡(luò)(CNN)入門(mén)教程分分享

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)是一類(lèi)特別適用于處理圖像數(shù)據(jù)的深度學(xué)習(xí)模型,本文介紹了如何使用Keras創(chuàng)建一個(gè)簡(jiǎn)單的CNN模型,并用它對(duì)手寫(xiě)數(shù)字進(jìn)行分類(lèi),需要的可以參考一下
    2023-05-05
  • 詳細(xì)介紹在pandas中創(chuàng)建category類(lèi)型數(shù)據(jù)的幾種方法

    詳細(xì)介紹在pandas中創(chuàng)建category類(lèi)型數(shù)據(jù)的幾種方法

    這篇文章主要介紹了詳細(xì)介紹在pandas中創(chuàng)建category類(lèi)型數(shù)據(jù)的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 如何基于pandas讀取csv后合并兩個(gè)股票

    如何基于pandas讀取csv后合并兩個(gè)股票

    這篇文章主要介紹了如何基于pandas讀取csv后合并兩個(gè)股票,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python集成學(xué)習(xí)之Blending算法詳解

    Python集成學(xué)習(xí)之Blending算法詳解

    集成學(xué)習(xí)(又稱(chēng)模型融合)就是結(jié)合若干個(gè)體分類(lèi)器(基學(xué)習(xí)器)進(jìn)行綜合預(yù)測(cè),各個(gè)個(gè)體學(xué)習(xí)器通常是弱學(xué)習(xí)器.集成學(xué)習(xí)相較于個(gè)體學(xué)習(xí)在預(yù)測(cè)準(zhǔn)確率以及穩(wěn)定性上都有很大的提高.文中有非常詳細(xì)的代碼示例哦,需要的朋友可以參考下
    2021-05-05

最新評(píng)論