日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

python图片批量处理器_用python给图片批量打水印

發布時間:2024/9/19 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python图片批量处理器_用python给图片批量打水印 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

之前寫菲律賓游記,想給自己的照片批量打上水印,首先想到的就是用Python實現給圖片加文字,然后寫個循環。

做過圖像識別的,應該知道OpenCV,其中cv2.putText()函數,就可以實現在圖片上加文字,非常簡單。

putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)

參數解釋:

img:需要添加文字的圖片。

text:要加的文字內容。

org:文字的位置坐標。

fontFace:字體類型(可選擇字體有限,可設置斜體)。

fontScale:字體大小。

color:字體顏色。

thickness:字體粗細。

lineType:線型。

bottomLeftOrigin:默認值為false,圖片數據原點在左上角。

但putText()有個問題,不能添加中文文字,也不能指定字體,而PIL(Python Image Library)可以解決這個問題。

Image模塊

Image是PIL中的核心模塊,實現對圖片的基礎操作。

Image中的函數:

  • Image. open(path):打開現成的圖片,該圖片在path所示的路徑中。
  • Image. new(mode, size, color):創建新的圖片文件,color默認為黑色。
  • Image對象的屬性:

  • image.format:查看圖像的格式,常見的有JPG、PNG等。
  • image.mode:查看圖像的模式。常用的例如RGB,3x8位像素,為真彩色;RGBA,4x8位像素,有透明通道的真彩色。
  • image.size:獲取圖片的尺寸(長×寬),該二元組也表示圖片的像素。
  • import osimport sysfrom PIL import Image, ImageFont, ImageDraw# 讀入要打水印的照片image = Image.open('./input/IMG_1422.jpg')im_size = image.sizeprint(image.format)print(image.mode)print(im_size)image.show()----------------------[out] JPEG[out] RGB[out] (1536, 2048)

    原始照片:

    ImageDraw模塊

    ImageDraw模塊,提供對圖像進行繪制的方法。

  • ImageDraw.Draw(image):創建畫刷。
  • ImageFont.truetype(file, size) :設置字體和大小,file提供字體的路徑,size為文字大小。在C盤(系統盤)-Windows-Fonts里面,有計算機上安裝的所有字體,選一個喜歡的。
  • draw.text(xy, text, fill, font):根據位置、內容、顏色、字體把文字寫進圖片中。 xy:位置,即距離圖片左上角起始點的坐標。 這里普及一下圖片坐標系統的概念。 圖片坐標常用二元組(x,y),(0,0)位于左上角。 四元組表示圖片左、上、右、下的坐標,例如800x600像素的長方形圖片表示為(0,0,800,600)。 text:字符串,即文字內容。 fill:文字顏色。 font:字體和大小,通過上述ImageFont來定義。
  • 用draw.text()加水印文字,特別簡單!

    ########### 加文字 ###########draw_txt = ImageDraw.Draw(image)txt_size = int(im_size[0]*0.02)# 設置字體和文字大小chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size)# 直接在照片上寫文字draw_txt.text(xy = (im_size[0]//2-txt_size//2,im_size[1]-int(txt_size*1.2)), text = '@化簡可得', font = chi_font)image.show()

    Image中的方法

  • image.show():展示圖像,Win系統下show會打開系統自帶的圖像顯示程序。
  • image.transpose(method):圖像翻轉或者旋轉,例如ROTATE_90表示將圖像逆時針旋轉90°。
  • image. thumbnail (size):制作縮略圖,參數size指定最大的寬度和高度。
  • image.paste(region, box, mask):將一張圖粘貼到另一張圖上。 image:底圖; region:要粘貼上底圖的圖,即水印圖片; box:要粘貼的位置,2元組表示左上角坐標; mask:對應的模板圖像來填充所對應的區域,模板圖像的尺寸必須與region對應的圖像尺寸一樣,原圖像和模板圖像可以為同一個圖。
  • image. save(path, quality):針對JPG格式,quality參數表示保存圖像的質量,值的范圍從1(最差)到95(最佳)。 默認值為75,此時圖片會被壓縮。
  • 用image.paste()加水印圖,也特別簡單!

    ########### 加圖片 ############ 讀入水印圖# 還沒設計過自己的水印logo,所以隨便在網上找了一個小太陽做示范mark_image = Image.open('./sun.png')# 這個小太陽有點大,壓縮一下mark_image.thumbnail((150, 150)) # 將小太陽加在照片左上角的位置position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image)image.show()

    小結

    新建watermark文件夾,該文件夾下放入Python文件,并新建3個子文件夾:

    1. font文件夾存放字體;

    2. input存放原始圖片;

    3. output文件夾為空,程序跑完后打好水印的圖片會輸出到該文件夾。

    跑批代碼,下面自取~

    ########## 批量加水印文字 #########import osimport sysfrom PIL import Image, ImageFont, ImageDrawdef add_watermark(image_file): image = Image.open(image_file) draw_txt = ImageDraw.Draw(image) im_size = image.size print('原始圖片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是橫版 txt_size = int(im_size[0]*0.02) else: txt_size = int(im_size[1]*0.02) print('水印文字尺寸:',txt_size) # 設置字體和文字大小 chi_font = ImageFont.truetype('./font/fzstk.ttf', size=txt_size) # 直接在照片上寫文字 draw_txt.text(xy = (im_size[0]//2-txt_size//2, im_size[1]-int(txt_size*1.2)), text = '@化簡可得', font = chi_font) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)### 循環讀入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)########## 批量加水印照片 #########import osimport sysfrom PIL import Image, ImageFont, ImageDraw# 讀入水印圖mark_image = Image.open('./sun.png')def add_watermark(image_file): image = Image.open(image_file) im_size = image.size print('原始圖片尺寸:',im_size) if im_size[0]>im_size[1]: #如果是橫版 mark_size = int(im_size[0]*0.08) else: mark_size = int(im_size[1]*0.08) mark_image.thumbnail((mark_size, mark_size)) print('水印圖片尺寸:',mark_image.size) position = mark_size//3, mark_size//3 image.paste(mark_image, position, mark_image) name = os.path.basename(image_file) new_name = os.path.join('.output', name) image.save(new_name, quality=95)# 循環讀入照片files = os.listdir('.input')for file in files: image_file = os.path.join('.input', file) print(image_file) add_watermark(image_file)

    當然,網上有很多現成的軟件,也能實現批量打水印。但我還是喜歡用Python,以后想要什么樣的效果,改改參數就好了~

    參考鏈接

  • Win10 + Opencv3 for Python 的安裝過程 https://www.jianshu.com/p/c3af3cadf372
  • Py之cv2:cv2庫的簡介、安裝、使用方法(常見函數、方法等)最強詳細攻略 https://blog.csdn.net/qq_41185868/article/details/79675875#%E5%85%B3%E4%BA%8EOpenCV%E7%AE%80%E4%BB%8B
  • python PIL 圖像處理庫簡介(一) https://www.cnblogs.com/lyrichu/p/9124504.html
  • python PIL的Image.resize()和Image.thumbnail()函數的區別 https://blog.csdn.net/TeFuirnever/article/details/90597048
  • 總結

    以上是生活随笔為你收集整理的python图片批量处理器_用python给图片批量打水印的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。