Seite 1 von 1

popen und eine virtuelle Röhre

Verfasst: Donnerstag 17. Februar 2005, 16:33
von mitsuhiko
Ich habe mir jetzt einmal das Imagemagick Modul angesehen.
Das braucht pyste. Mag ich nicht. Brauch ich nicht.

Ich will ja nur ein Image Resize machen.

Die Idee dahinter:

Code: Alles auswählen

cat test.jpg | convert - -resize 200 - > test2.jpg
Das funktioniert wunderbar.

Jetzt will ich das nur, dass das Ursprungsbild in einer Variable ist und das Resultat genau dort wieder hin geht.
Nur. Wie Kann ich die Pipe unter Python setzen?
Mit popen hätte ich gedacht:

Code: Alles auswählen

from os import popen as execute

class image:
	def __init__(self, data):
		self.data = data
	def resize(self, width, height="auto"):
		if height != "auto": width = str(width)+"x"+str(height)+"\!"
		else: width = str(width)
		d = execute("convert - -resize "+width+" -")
		d.write(self.data)
		self.data = d.read()
		d.close()
		return self.data

if __name__ == "__main__":
	img = image(file("test.jpg").read())
	file("test2.jpg","w").write(img.resize(200))
Aber so will das nicht.
Weiß jemand wie das funktioniert?

Verfasst: Donnerstag 17. Februar 2005, 16:44
von mawe
Hi!

Nur so eine Frage: Gibt's einen bestimmten Grund warum Du nicht PIL verwendest?

Gruß, mawe

Verfasst: Donnerstag 17. Februar 2005, 16:51
von mitsuhiko
mawe hat geschrieben:Hi!

Nur so eine Frage: Gibt's einen bestimmten Grund warum Du nicht PIL verwendest?

Gruß, mawe
Weil Imagemagick sehr viele Funktionen hat und ich nicht eine extra Lib installieren muss. :D

Verfasst: Donnerstag 17. Februar 2005, 17:03
von mitsuhiko
Folgendes geht schomal:

Code: Alles auswählen

>>> from os import popen
>>> cmd = "convert test.jpg -resize 200 -"
>>> res = popen(cmd).read()
Aber das ist nicht ganz, was ich will.

Verfasst: Donnerstag 17. Februar 2005, 17:21
von mitsuhiko
Ok. Hab es lösen können:

Code: Alles auswählen

import popen2

class image:
	def __init__(self, image):
		self.img = image
	def resize(self, width, height="auto"):
		if height != "auto": scale = str(width)+"x"+str(height)+"\!"
		else: scale = str(width)
		r,w = popen2.popen2("convert - -resize "+scale+" -")
		w.write(self.img)
		w.close()
		self.img = r.read()
	def output(self):
		return self.img

if __name__ == "__main__":
	bild = image(file("test.jpg").read())
	bild.resize(200, 600)
	file("test2.jpg","w").write(bild.output())