中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python對接PicGo如何實現圖片自動加水印并上傳

發布時間:2021-10-25 16:27:38 來源:億速云 閱讀:174 作者:iii 欄目:開發技術

本篇內容介紹了“Python對接PicGo如何實現圖片自動加水印并上傳”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 1. 天下苦搬運黨久矣

  • 2. 目前的圖床管理工具

  • 3. 方案的設想

  • 4. 代碼完整解析

    • 4.1 定義熱鍵并監聽鍵盤

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

      • 第二步:監聽所有的鍵盤動作

    • 4.2 從內存中讀取圖像

      • 4.3 添加水印生成新圖像

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

          • 4.5 模擬觸發 PicGo

            • 4.6 通知 Mac 通知臺

            • 5. 其他設置工作

              • 5.1 設置程序權限

                • 5.2 設置開機自啟

                • 6. 運行效果

                  1. 天下苦搬運黨久矣

                  對于我這樣經常需要寫點文章的技術自媒體來說,很經常早上我才在公眾號首發了原創文章,中午就有人同步到了知乎、今日頭條等外部平臺,并且拿到了該篇文章在這些平臺的首發。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  為了解決了首發的問題,我付費使用了 OpenWrite 這個平臺,每個月 20 塊錢的費用,一鍵就可以分發各大平臺,非常的省心~

                  首發固然重要,但有時候也沒那么重要。

                  因為有專門的培訓機構(這里就不點名,避免給他們反向營銷)就是拿你的文章去給自己的帳號堆干貨,吸引關注,他們才不在乎原創不原創,只要文章能發布就行了。

                  這種人在知乎這種沒有原創檢測機制的平臺,可以活得很好。

                  之前有一無良培訓機構在知乎上生產了10幾個號,批量搬運我以及一些朋友的原創文章。那時候,我每天都可以舉報好多。

                  Python對接PicGo如何實現圖片自動加水印并上傳

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

                  考慮到我的文章都有非常多的圖片,為了讓這些人在白嫖我文章的同時,也能給我帶來點收益(當然人家是不可能付費的,但至少能給我的公眾號打打廣告也是非常奈斯的)。

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

                  2. 目前的圖床管理工具

                  在開始講如何利用 Python 來實現我的需求之前 ,我有必要介紹下我的圖床管理工具。

                  我在寫文章的時候,主要用到三款工具:

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

                  Python對接PicGo如何實現圖片自動加水印并上傳

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

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  它對當下主流的圖床平臺都提供了很好的支持

                  Python對接PicGo如何實現圖片自動加水印并上傳

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

                  3. 方案的設想

                  由于這一整工具,我已經使用了三年,各種操作都非常的熟悉,對他們我已經產生了極度的依賴,因此現在我想要實現自動加水印的功能,也一定是建立在這套工具的基礎上完成的。

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

                  Snipaste 和 PicGo 之所以能夠在一起工作,是因為有了剪切板這個橋梁,因此想要實現自己的需求,只能從剪切板上尋找突破口。

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

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

                  為了讓你對這個方案,有一個直觀的理解,我特地畫了一張流程圖,其中虛線就是我得自己實現的功能。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  4. 代碼完整解析

                  4.1 定義熱鍵并監聽鍵盤

                  在 Python 中有一個 pynput 庫,利用它可以來監聽系統的鍵盤。

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

                  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()

                  但是很遺憾的是,這個功能目前來看是有 BUG 的,我在 Mac 上親測是沒有效的,而在 github 的 issue 中也有人在 2020 年8月反應過問題, 沒想到到現在還沒有解決

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  雖然它本身提供的組合鍵監聽模式無法使用,但普通的監聽模式還是可以使用的,只要有這個做為基礎,那我自己造輪子也不難實現組合熱鍵的功能。

                  第一步:先定義好你的熱鍵
                  upload_pic_set = {
                      keyboard.Key.ctrl.value.vk,
                      keyboard.Key.cmd.value.vk,
                      keyboard.Key.alt.value.vk,
                      keyboard.KeyCode(35).vk
                  }
                  第二步:監聽所有的鍵盤動作
                  with keyboard.Listener(
                          on_press=on_press,
                          on_release=on_release) as listener:
                      listener.join()

                  只要有一個鍵處于 press 的狀態,就往列表中存放這個鍵

                  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("成功添加水印并上傳到圖床")

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

                  def on_release(key):
                      key_list.clear()

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

                  if set(key_list) == upload_pic_set:
                    pass

                  4.2 從內存中讀取圖像

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

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

                  4.3 添加水印生成新圖像

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

                  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), "微信公眾號: Python編程時光", font=fnt, fill=(240, 49, 48, 255))
                      draw.text(((txt.size[0]-300)//2, txt.size[1]-70), "未經授權請勿轉載", font=fnt, fill=(240, 49, 48,  255))
                      out = Image.alpha_composite(image, txt)
                      return out

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

                  內置的 io 模塊支持在內存中讀寫 bytes,只要PIL 的 image 對象在 save 的時候保存保存在 BytesIO 對象中,然后通過 pasteboard 模塊從 BytesIO 對象中載入數據,就可以實現往剪切板中放入圖像的功能。

                  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 格式,因此在保存時,一定要指定 PNG。

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

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

                  4.5 模擬觸發 PicGo

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

                  具體的代碼如下:

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

                  4.6 通知 Mac 通知臺

                  上面整個過程都是腳本在后臺默默運行的,如果沒有任何通知,作為用戶,很難知道我們的圖片是否處理好,是否上傳成功,因此建議加一個通知的函數。

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

                  不過其實 PicGo 上傳完圖片后,本身就會通知,所以這個通知并不是必要的,看個人需求啦~

                  5. 其他設置工作

                  5.1 設置程序權限

                  如果你在使用如上腳本時,發現有的鍵無法捕捉,那一定是系統沒有給予權限,需要你手動開啟。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  5.2 設置開機自啟

                  在這里添加一個開機啟動項,而這個 init.sh 是一個 Shell 腳本。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  這個腳本的內容如下,注意最后那個 & 一定不能省略。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  6. 運行效果

                  代碼全部解析完了,是不是很想看這個程序運行后,可以實現怎樣的效果呢?

                  我錄制了個 GIF 動態圖,你可以瞧一瞧,真的太方便了。

                  Python對接PicGo如何實現圖片自動加水印并上傳

                  “Python對接PicGo如何實現圖片自動加水印并上傳”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

                  向AI問一下細節

                  免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

                  AI

                  若羌县| 湖州市| 五台县| 津南区| 肇源县| 德钦县| 胶州市| 道孚县| 泾阳县| 云龙县| 类乌齐县| 富蕴县| 西城区| 健康| 嘉义县| 谢通门县| 凤山县| 永泰县| 垣曲县| 青海省| 陕西省| 沂南县| 武清区| 全州县| 红原县| 泾川县| 久治县| 高雄市| 昭苏县| 井冈山市| 永兴县| 鄄城县| 云霄县| 衡水市| 灵武市| 固始县| 吉林省| 武山县| 蕲春县| 平山县| 汶上县|