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

溫馨提示×

溫馨提示×

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

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

Python已經實現圖片批量加入水印代碼實例

發布時間:2021-03-24 11:15:53 來源:億速云 閱讀:188 作者:小新 欄目:開發技術

小編給大家分享一下Python已經實現圖片批量加入水印代碼實例,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

這篇文章主要介紹了Python實現圖片批量加入水印代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

配置環境

python3 + pillow

pip3 install pillow

引入庫

from PIL import Image, ImageSequence
import os
import random

效果預覽:

Python已經實現圖片批量加入水印代碼實例

使用方法:

  • 在腳本同目錄下添加水印圖片 logo.png

  • 創建目錄 input 并在放入要添加水印的圖片

  • 創建目錄 output 執行腳本 addlogo.py

  • 結果輸出在 output 文件夾下

Python已經實現圖片批量加入水印代碼實例

實現原理

水印圖片采集:

先讀取水印圖片的像素點信息和大小信息。去除透明度為0的像素,并修改透明度像素信息。

img_logo = Image.open("logo.png")
img_logo_width, img_logo_height = img_logo.size
img_logo_pixels = dict()
for w in range(img_logo_width):
  for h in range(img_logo_height):
    c = img_logo.getpixel((w,h))
    if c!=(0, 0, 0, 0):
      img_logo_pixels[(w, h)] = c[:3]+(125,)

混合顏色:

對每一個像素點采取顏色混合,其中c1是源圖片的像素點信息(r,g,b,a),c2是logo圖片像素點的信息。混合算法如下:

def blendPixel(c1,c2):
  a1=256-c2[3]
  a2=c2[3]-(a1*c2[3])/256.0
  a=a1+a2
  c=(int((a1*c1[0] + a2*c2[0])/a), int((a1*c1[1] + a2*c2[1])/a), int((a1*c1[2] + a2*c2[2])/a),int(a))
  return c

處理源 Image 對象:

隨機一個位置開始處理像素,具體代碼參考如下。

def dealOneImage(image,offX=None,offY=None):
  w, h = image.size
  offX = offX if offX else random.random();
  offY = offY if offY else random.random();
  #如果圖片尺寸小于水印圖片,不加水印
  if w>=img_logo_width and h>=img_logo_height:
    top = int((w - img_logo_width)*offX)
    left = int((h - img_logo_height)*offY)
    for p, c in img_logo_pixels.items():
      p_x = (p[0]+top)
      p_y = (p[1]+left)
      image_c = image.getpixel((p_x,p_y))
      if(isinstance(image_c, tuple) and len(image_c)>2):
        image.putpixel((p_x, p_y), blendPixel(image_c,c))
  return image;

處理單個文件:

對于 gif 文件先拆成一張一張圖片,在圖片上添加水印,最后再合成 gif 。對于其他格式的圖片文件可以多添加幾個水印。最后輸出保存到 output 文件夾下。

def dealOneFile(filePath):
  img_orign = Image.open(filePath)
  _,file_type = os.path.splitext(filePath)
  basename = os.path.basename(filePath)
  if file_type == '.gif':
    sequence = [];
    offX=random.random()
    offY=random.random()
    for f in ImageSequence.Iterator(img_orign):
      if len(sequence) % 2 == 0:
        offX=random.random()
        offY=random.random()
      sequence.append(dealOneImage(f.convert(),offX,offY))
    sequence[0].save(f'./output/{basename}', save_all=True, append_images=sequence[1:])
  else:
    image_out = (dealOneImage(img_orign))
    for x in range(1):
      image_out = (dealOneImage(image_out))
    image_out.save(f'./output/{basename}')

處理目錄:

對當前目錄下的文件做一個篩選,只選取圖片格式的文件。

def dealSrc(srcDir):
  picFiles = [os.path.join(srcDir,fn) for fn in os.listdir(srcDir) if fn.endswith(('.gif', '.jpg', '.png','.jpeg'))]
  for filePath in picFiles:
    dealOneFile(filePath)

添加水印主要用了 python3 中的 pillow 庫來實現。 首先是讀取 logo 圖片信息,接著在隨機一個位置添加混合后的像素點信息,最后再保存起來。

其中,對于 gif 文件的處理是拆幀,再添加水印,最后再組合成一個 gif。這個只能對應比較小的 gif 文件處理,如果有更好的方法歡迎留言交流分享!

以上是“Python已經實現圖片批量加入水印代碼實例”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

鱼台县| 通州区| 酒泉市| 浠水县| 黄龙县| 汾阳市| 山阳县| 龙川县| 桂林市| 象山县| 三都| 社会| 登封市| 安国市| 咸宁市| 岐山县| 德兴市| 广州市| 潜江市| 邵阳市| 叙永县| 罗甸县| 平远县| 华蓥市| 吴堡县| 恩平市| 濉溪县| 苍南县| 齐齐哈尔市| 兴化市| 柳林县| 巩留县| 慈利县| 灵石县| 叙永县| 修水县| 井陉县| 隆回县| 洛浦县| 景德镇市| 罗平县|