popen und eine virtuelle Röhre

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 17. Februar 2005, 16:33

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?
TUFKAB – the user formerly known as blackbird
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 17. Februar 2005, 16:44

Hi!

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

Gruß, mawe
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 17. Februar 2005, 16:51

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
TUFKAB – the user formerly known as blackbird
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 17. Februar 2005, 17:03

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.
TUFKAB – the user formerly known as blackbird
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Donnerstag 17. Februar 2005, 17:21

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())
TUFKAB – the user formerly known as blackbird
Antworten