簡體   English   中英

Python PIL將圖像保存在目錄中,如果名稱相同則不覆蓋

[英]Python PIL save Image in directory no override if the name is same

我正在嘗試制作圖像的備份副本,因為它會經常調整大小。 我要求輸入圖像的路徑(Tkinter),然后在路徑和圖像上添加“原始”,並將其保存在從中獲取圖像的同一目錄中。

問題是每次我使用此功能時,它都會覆蓋原始功能,因為沒有循環使程序檢查是否已經存在帶有“ -original”的文件。

那就是我如何保存備份:

        pfad = askopenfilename()
        im_backup = Image.open(pfad)
        start_string = pfad[:pfad.index(".")]
        ende_string = pfad[pfad.index("."):]
        im_backup.save(start_string + "-original" + ende_string)

目前,我正在使用可以工作的os解決方案,但我覺得它必須很簡單。 我修改了PIL.Image.save的文檔,可以傳遞更多的參數來保存,但是我不知道必須使用哪個參數來防止覆蓋。

我當前的解決方案(尚無法使用)正在使用os.listdir(directory)進行檢查,是否已經有一個(start_string +“ -original” + ende_string)文件,並且只有在它為false時才保存在那里。

提前致謝!

考慮使用os.path.splitxext代替切片和索引。 您也可以使用os.path.isfile代替listdir

import os
pfad = askopenfilename()
name, ext = os.path.splitext(pfad)
backup_name = name + "-original" + ext
if not os.path.isfile(backup_name):
    im_backup = Image.open(pfad)
    im_backup.save(backup_name)

通過將某些內容傳遞給.save()機器人可能可以做您想要的事情。

文檔中可能使您認為有可能的事情是:

  • file –文件名或文件對象。
  • format –可選的格式替代。 如果省略,則使用的格式由文件擴展名決定。 如果使用文件對象而不是文件名,則應始終使用此參數。
  • options –圖像編寫器的額外參數。

但是在源代碼中有幾行,

self.encoderinfo = params
self.encoderconfig = ()

其中所有選項都存儲在與編碼器相關的變量中,因此可能不是您想要的。

因此,您可能應該考慮執行@Kevin建議的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM