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

Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例

 更新時(shí)間:2019年11月30日 09:25:28   作者:白玉無(wú)冰  
這篇文章主要介紹了Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了Python實(shí)現(xiàn)圖片批量加入水印代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

寫文章的時(shí)候可以設(shè)置是否添加水印。可是,有些圖片可能想加水印,有些不想加水印,該怎么辦呢?

配置環(huán)境

python3 + pillow

pip3 install pillow

引入庫(kù)

from PIL import Image, ImageSequence
import os
import random

效果預(yù)覽:

使用方法:

  • 在腳本同目錄下添加水印圖片 logo.png
  • 創(chuàng)建目錄 input 并在放入要添加水印的圖片
  • 創(chuàng)建目錄 output 執(zhí)行腳本 addlogo.py
  • 結(jié)果輸出在 output 文件夾下

實(shí)現(xiàn)原理

水印圖片采集:

先讀取水印圖片的像素點(diǎn)信息和大小信息。去除透明度為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,)

混合顏色:

對(duì)每一個(gè)像素點(diǎn)采取顏色混合,其中c1是源圖片的像素點(diǎn)信息(r,g,b,a),c2是logo圖片像素點(diǎn)的信息?;旌纤惴ㄈ缦?

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 對(duì)象:

隨機(jī)一個(gè)位置開(kāi)始處理像素,具體代碼參考如下。

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;

處理單個(gè)文件:

對(duì)于 gif 文件先拆成一張一張圖片,在圖片上添加水印,最后再合成 gif 。對(duì)于其他格式的圖片文件可以多添加幾個(gè)水印。最后輸出保存到 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}')

處理目錄:

對(duì)當(dāng)前目錄下的文件做一個(gè)篩選,只選取圖片格式的文件。

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)

小結(jié)

添加水印主要用了 python3 中的 pillow 庫(kù)來(lái)實(shí)現(xiàn)。 首先是讀取 logo 圖片信息,接著在隨機(jī)一個(gè)位置添加混合后的像素點(diǎn)信息,最后再保存起來(lái)。

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python實(shí)現(xiàn)文字版掃雷

    python實(shí)現(xiàn)文字版掃雷

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)文字版掃雷,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 在Linux下調(diào)試Python代碼的各種方法

    在Linux下調(diào)試Python代碼的各種方法

    這篇文章主要介紹了在Linux下調(diào)試Python代碼的各種方法,用于編程后的debug工作,需要的朋友可以參考下
    2015-04-04
  • Pandas.DataFrame重置Series的索引index(reset_index)

    Pandas.DataFrame重置Series的索引index(reset_index)

    本文主要介紹了Pandas.DataFrame重置Series的索引index(reset_index),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • python 日期操作類代碼

    python 日期操作類代碼

    這篇文章主要介紹了python 日期操作類代碼,里面涉及了python日期操作的一些基礎(chǔ)知識(shí),需要的朋友可以參考下
    2018-05-05
  • python中open函數(shù)的基本用法示例

    python中open函數(shù)的基本用法示例

    這篇文章主要給大家介紹了關(guān)于python中open函數(shù)的基本用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • python __init__與 __new__的區(qū)別

    python __init__與 __new__的區(qū)別

    本文主要介紹了python __init__與 __new__的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 對(duì)python 通過(guò)ssh訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)例詳解

    對(duì)python 通過(guò)ssh訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)例詳解

    今天小編就為大家分享一篇對(duì)python 通過(guò)ssh訪問(wèn)數(shù)據(jù)庫(kù)的實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • Python版貪吃蛇保姆級(jí)教程(附完整代碼有詳細(xì)注釋)

    Python版貪吃蛇保姆級(jí)教程(附完整代碼有詳細(xì)注釋)

    這篇文章主要給大家介紹了關(guān)于Python版貪吃蛇保姆級(jí)教程的相關(guān)資料,包括初始化、移動(dòng)控制、智能食物生成、碰撞檢測(cè)、高分記錄及動(dòng)態(tài)速度調(diào)節(jié)等核心功能,附完整代碼與詳細(xì)注釋,需要的朋友可以參考下
    2025-06-06
  • python繪制散點(diǎn)圖并標(biāo)記序號(hào)的方法

    python繪制散點(diǎn)圖并標(biāo)記序號(hào)的方法

    今天小編就為大家分享一篇python繪制散點(diǎn)圖并標(biāo)記序號(hào)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Python進(jìn)程通信之匿名管道實(shí)例講解

    Python進(jìn)程通信之匿名管道實(shí)例講解

    這篇文章主要介紹了Python進(jìn)程通信之匿名管道實(shí)例講解,本文直接給出代碼實(shí)例,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-04-04

最新評(píng)論