2013-05-16 70 views
1

任務是製作兩個功能,一個將灰度圖像嵌入到RGB中。第二個顯示隱藏的「水印」。我已經完成了任務(有15個測試代碼必須通過,我將它們全部傳遞給D),但是如果可能的話,我想整理一下我的代碼。有人告訴我,我可以使用裁剪功能將水印置於照片的上方(我不知道如何操作),而是使用了數學邏輯。在python(PIL)中將另一個圖像放在另一個圖像的上方,然後將另一個圖像隱藏在另一個內部

from PIL import Image 
#function for embedding the watermark 
def add_watermark(clean_file, watermark_file): 

#if the files are not compatible 
#or doesn't exist end the function 
try: 
    clean_photo = Image.open(clean_file) 
    watermark_photo = Image.open(watermark_file) 
except: 
    return False 

#the images pixels tuple values are attained 
clean_photo_size = clean_photo.size 
watermark_photo_size = watermark_photo.size 

# .load was used to return a pixel access object 
# that can be used to read and modify pixels 
#for both images 
photo_array = clean_photo.load() 
watermark_array = watermark_photo.load() 

#centring the watermarked image on the photo 
start_x_coord=int((clean_photo_size[0]-watermark_photo_size[0])/2) 
start_y_coord=int((clean_photo_size[1]-watermark_photo_size[1])/2) 

#for the pixels that share the same position as the pixels in the 
#watermark, manipulate their RGB tuple value to include the watermarks 
#greyscale value as part of the original RGB tuple 
for line in range(watermark_photo_size[0]): 
    for rank in range(watermark_photo_size[1]): 
     photo_array [(start_x_coord+line),\ 
       (start_y_coord+rank)]\ 
       =(int(((photo_array [(start_x_coord+line),\ 
            (start_y_coord+rank)][0]/10)*10)\ 
         +((watermark_array[line,rank]/100)%10)),\ 
        int(((photo_array [(start_x_coord+line),\ 
            (start_y_coord+rank)]\ 
         [1]/10)*10)+((watermark_array[line,rank]/10)%10)),\ 
        int(((photo_array [(start_x_coord+line),\ 
            (start_y_coord+rank)][2]/10)*10)\ 
         +(watermark_array[line,rank]%10))) 

#create a new file name with _X at the end 
new_File_Name = clean_file[:-4]+"_X"+clean_file[-4:] 

#create a new file 
clean_photo.save(new_File_Name) 

#return true for the test 
return True 

我試圖讓這個職位的拼寫和語法是正確的,但我一直清醒20小時,所以我現在很抱歉,如果我錯過了什麼。

回答

0

這裏是你如何可以在另一個圖像的頂部中央的圖像水印:

注:圖片和ImageEnhance要求PIL系統庫安裝到Python運行時

import os 
from os.path import join, exists 
import shutil 
import Image 

class BatchWatermark: 

    def __init__(self): 
     self.data = [] 


    def process(self, infolder, outfolder, watermarkImage): 
     if not exists(infolder): 
      print("Input folder '" + infolder + "' does not exist") 
      raise Exception("Input folder '" + infolder + "' does not exist") 
     #if exists(outfolder): 
     # shutil.rmtree(outfolder) 

     watermark = Image.open(watermarkImage) 
     for root, dirs, files in os.walk(infolder): 
      for name in files:  
       try: 
        im = Image.open(join(root, name)) 
        if im.mode != 'RGBA': 
         im = im.convert('RGBA') 
         layer = Image.new('RGBA', im.size, (0, 0, 0, 0)) 

         wm_x, wm_y = watermark.size[0], watermark.size[1] 
         x = (im.size[0] - wm_x)/2 
         y = (im.size[1] - wm_y)/2 
         position = (x, y) 
         layer.paste(watermark, position) 
         if not exists(outfolder): 
          os.makedirs(outfolder) 
         Image.composite(layer, im, layer).save(join(outfolder, name)) 
         print "Watermark added to image file '" + outfolder + "/" + name + "'"; 
       except Exception, (msg): 
        print msg 
相關問題