2016-08-07 14 views
-2

Ich versuche, neue Fotos zu erstellen, jede mit 2 nebeneinander Seite Fotos aus einer Liste von 24 Fotos. Ich möchte schließlich jede mögliche Paarkombination (insgesamt 276) auf einem neuen Foto. Momentan versuche ich nur, das Programm dazu zu bringen, zwei Fotos auf ein neues Foto einzufügen, und ich bekomme einen Fehler. Der Code und die Fehler sind unten aufgeführt:Zwei Fotos in ein einzelnes Foto in Python verschmelzen

from PIL import Image 
import os 
import itertools 

plist = os.listdir('image_resize') 
for p in plist[:]: 
    if not(p.endswith('.png')): 
     plist.remove(p) 
print(plist) 

os.chdir('C:\Python35-32\Scripts\image_resize') 

def get_pics(x,y): 
    w = os.getcwd() 
    op = plist[x] 
    op2 = plist[y] 
    pic = Image.open(os.path.join(w,op)) 
    pic2 = Image.open(os.path.join(w,op2)) 
    pic.copy() 
    pic2.copy() 
    new_image = Image.new("RGB", (1280,400)) 
    new_image.save('conjoined_pics', format='PNG') 
    pic.paste(Image.open('new_image'), (20,400,620,0)) 
    pic2.paste(Image.open('new_image'), (660,400,1260,0)) 


get_pics(0,1)  


#def get_permutations(): 
    #newlist = list(itertools.permutations(plist, 2)) 
    #print (newlist) 

Hier ist die Fehlermeldung:

File not found error: [Errno 2] No such file or directory: 
'os.path.join(w,op)' 
+0

Hallo, könnten Sie copy-paste die komplette Rückverfolgung zu geben Sie uns etwas mehr Rückblick auf den Fehler. (Wie daveydave400 erwähnt, sieht es so aus, als hätten Sie die Zeichenfolge "os.path.join (w, op)" anstelle des Objekts os.path.join (w, op) ohne Anführungszeichen geschrieben) – jadsq

Antwort

0

Die Fehlermeldung besagt, genau das, was falsch ist: die Bilddatei, die Sie versuchen, zu öffnen ist nicht vorhanden. Ich würde versuchen, den Wert von os.path.join(w, op) die Zeile vor der Verwendung zu drucken und sehen, ob es Sinn macht.

Ich würde auch vorschlagen, dass Sie Ihre Funktion ändern, so dass entweder zwei Dateinamen oder zwei Bildobjekte anstelle der Übergabe von Indexwerten und die Verwendung von globalen Variablen und die Umgebung in einem bestimmten Verzeichnis vorausgesetzt wird.

Edit: Ich glaube nicht, dass dies mit der Arbeit mit Bildern speziell zu tun hat. Dies ist wahrscheinlich ein einfacher Fehler, den Sie nicht bemerken. Versuchen Sie so etwas in Ihrer Funktion:

fn = os.path.join(w, op) 
print(fn, os.path.exists(fn)) 
pic = Image.open(fn) 

Ich bin an der Fehlermeldung wieder suchen und es scheint, wie Sie Anführungszeichen um Ihre "os.path.join(...)" Teil des Codes setzen müssen. Ist der Code in Ihrer Frage genau das, was Sie gerade ausführen?

Edit: Empfohlene Edits

plist = [fn for fn in os.path.join("image_resize") if fn.endswith(".png")] 

# or better, don't require the cwd or chdir by including the path 
base_dir = "C:\Python35-32\Scripts\image_resize" 
plist = [os.path.join(base_dir, fn) for fn in os.listdir(base_dir) if fn.endswith(".png")] 

# Or even better (this gives full paths) 
from glob import glob 
base_dir = "C:\Python35-32\Scripts\image_resize" 
plist = glob(os.path.join(base_dir, "*.png")) 

# for the function 
def get_pics(fn_in1, fn_in2): 
    ... make your code work ... 

get_pics(plist[0], plist[1]) 

# Or so that you don't have to reopen the input images *every* time they are used 
def get_pics(input_image1, input_image2): 
    pass 

img1 = Image.open(plist[0]) 
img2 = Image.open(plist[1]) 
get_pics(img1, img2) 
+0

Können Sie uns bitte ein Beispiel geben? ? Ich bin ziemlich neu in der Arbeit mit Bildern. Die Dateien existieren. Sie sind in der CWD. Die Variable 'op' bezieht sich auf den Pfad, auf dem sich das Bild befindet, und die Liste wird verwendet, um den Bildnamen an den Pfad anzuhängen. Ich verstehe nicht, warum das nicht funktioniert. – DartmouthDude82

+0

Also 'os.path.join (w, op)' = os.path.join ('C: \ Python35-32 \ Skripte \ image_resize', 'bridge10_RH.png') zum Beispiel. Ich verwende Variablen, um zu vermeiden, dass jedes Bild in der Datei aufgelistet werden muss. – DartmouthDude82

+0

Siehe meine Bearbeitung zu meiner Antwort. – daveydave400

0

Just for fun, und vielleicht für Ihren Python zu testen, können Sie alle Bilder parallel machen, in einem Einzeiler mit GNU Parallel und ImageMagick so von der Kommandozeile in Terminal - vorausgesetzt, Ihre 24 Bilder sind benannt "Bild ????. Png"

parallel '[ "{1}" != "{2}" ] && convert {1} {2} +append result{#}.png' ::: image* ::: image* 

Wenn Sie sehen wollen, wie es funktioniert, fügen Sie in --dry-run nach parallel auf der Kommandozeile und es wird Ihnen zeigen, was es tun würde:

... 
... 
[ "image1.png" != "image1.png" ] && convert image1.png image1.png +append result26.png 
[ "image1.png" != "image10.png" ] && convert image1.png image10.png +append result27.png 
[ "image1.png" != "image11.png" ] && convert image1.png image11.png +append result28.png 
[ "image1.png" != "image12.png" ] && convert image1.png image12.png +append result29.png 
[ "image1.png" != "image13.png" ] && convert image1.png image13.png +append result30.png 
[ "image1.png" != "image14.png" ] && convert image1.png image14.png +append result31.png 
[ "image1.png" != "image15.png" ] && convert image1.png image15.png +append result32.png 
[ "image1.png" != "image16.png" ] && convert image1.png image16.png +append result33.png 
[ "image1.png" != "image17.png" ] && convert image1.png image17.png +append result34.png 
[ "image1.png" != "image18.png" ] && convert image1.png image18.png +append result35.png 
[ "image1.png" != "image19.png" ] && convert image1.png image19.png +append result36.png 
[ "image1.png" != "image2.png" ] && convert image1.png image2.png +append result37.png 
[ "image1.png" != "image20.png" ] && convert image1.png image20.png +append result38.png 
[ "image1.png" != "image21.png" ] && convert image1.png image21.png +append result39.png 
[ "image1.png" != "image22.png" ] && convert image1.png image22.png +append result40.png 
[ "image1.png" != "image23.png" ] && convert image1.png image23.png +append result41.png 
... 
... 
Verwandte Themen