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:

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])

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:

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:

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:

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