Modul für Bildinfo's
Was da ist kann man abprüfen. Nicht aber wie die Werte zu interpretieren sind. Ich habe mir daher für das .png-modul auch die Arbeit gemacht eine richtige __str__ Methode zu programmieren und auch gleich meine Referenz angegeben, sodaß man hier wirklich weiter arbeiten kann. Bei einem Flash-File ist z.B. eigentlich (habe ich aber anders implementiert) Breite und Höhe in 20*pixelzahl angegeben. Würdest Du einfach darauf zugreifen (mit anderer Implementation) käme wohl nicht das raus, was Du Dir erwartest....
Aber was ist z.B. wenn .pdf-Dokumente unterstützt werden. Da finde ich es garicht so leicht überhaupt festzulegen was Breite und Höhe dann sein soll. Man könnte sagen Breite und Höhe einer Seite, aber in .pdf-Dokumenten können Seiten verschiedener Größe auftauchen ... Soll man das Maximum nehmen? Man könnte auch alle Seiten "aneinander hängen" und davon die Maße nehmen.
Wenn es also nicht nur um Bilder geht ist die Sache nicht so einfach und intuitiv.
Nachdem es nach bisherigen Infos bei Dir aber nur um Bilder geht solltest Du immer auf PictureContent prüfen (sonst kannst Du zwar u.U. Deinen Code ausführen, aber er macht dann keinen Sinn -- so etwas sollte man verhindern! Das ist ähnlich wie ein dicker Käfer der auf dem Rücken liegt und mit den Beinen strampelt). Handelt es sich nicht um ein Bild solltest Du mit einer Fehlermedlung abrechen. Wenn doch ist ja eh alles bestens ...
Aber wenn Dir Deine Methode leichter fällt, mach es so. Ich habe auch schon einiges mit WFM-Status zusammen-gehackt. Da gibt's noch viel mehr Sachen, die man machen kann ...
Was ich Dir sagen will: Sei Dir im Klaren was Du tust und wo Fehler in Deinem Code dadurch auftauchen können. Kommentiere diese Stellen v.a. wenn Du mit anderen zusammenarbeitest.
cu beyond
Aber was ist z.B. wenn .pdf-Dokumente unterstützt werden. Da finde ich es garicht so leicht überhaupt festzulegen was Breite und Höhe dann sein soll. Man könnte sagen Breite und Höhe einer Seite, aber in .pdf-Dokumenten können Seiten verschiedener Größe auftauchen ... Soll man das Maximum nehmen? Man könnte auch alle Seiten "aneinander hängen" und davon die Maße nehmen.
Wenn es also nicht nur um Bilder geht ist die Sache nicht so einfach und intuitiv.
Nachdem es nach bisherigen Infos bei Dir aber nur um Bilder geht solltest Du immer auf PictureContent prüfen (sonst kannst Du zwar u.U. Deinen Code ausführen, aber er macht dann keinen Sinn -- so etwas sollte man verhindern! Das ist ähnlich wie ein dicker Käfer der auf dem Rücken liegt und mit den Beinen strampelt). Handelt es sich nicht um ein Bild solltest Du mit einer Fehlermedlung abrechen. Wenn doch ist ja eh alles bestens ...
Aber wenn Dir Deine Methode leichter fällt, mach es so. Ich habe auch schon einiges mit WFM-Status zusammen-gehackt. Da gibt's noch viel mehr Sachen, die man machen kann ...
Was ich Dir sagen will: Sei Dir im Klaren was Du tust und wo Fehler in Deinem Code dadurch auftauchen können. Kommentiere diese Stellen v.a. wenn Du mit anderen zusammenarbeitest.
cu beyond
hab das ein wenig eng gesehen, weil ich eben nur Bilder brauche...
ich hab mich heute auch mal schlau gemacht in bezug auf mp3 und avi, aber außer tausend Editoren die sagen, die sagen sie wären die besten im umwandeln, hab ich keinen Hinweis oder Quellcode gefunden, der dir nützlich sein könnte. tut mir leid.
ich hab mich heute auch mal schlau gemacht in bezug auf mp3 und avi, aber außer tausend Editoren die sagen, die sagen sie wären die besten im umwandeln, hab ich keinen Hinweis oder Quellcode gefunden, der dir nützlich sein könnte. tut mir leid.
-
- User
- Beiträge: 69
- Registriert: Donnerstag 29. August 2002, 17:10
- Wohnort: Erfurt
- Kontaktdaten:
Falls sich manche Leute wundern, neue URL ist jetzt http://www.pythonarea.net/cgi-bin/paf/m ... o/index.pl
Man muß z.B. nach "file format specifications" suchen. Bei SourceForge gibt's einige mp3-Projekte. Diese können z.B. mp3-Daten auslesen.
Für .ogg habe ich eines gefunden.
@Milan: Hättest Du Interesse es in das Modul einzuarbeiten?
Für .ogg habe ich eines gefunden.
@Milan: Hättest Du Interesse es in das Modul einzuarbeiten?
neugierig bin ich schon, aber ich habe keine Ahnung, wie du deine Module aufgebaut hast. am besten schickst du mir mal ne mail, wo drin steht was es amchen soll und wie es das zurückgeben soll.
In der Zeit muss ich dich auch erst mal enttäschen, da ich vor Weihnachten quasi "streike", weil erst mal Ferienstart ist. ansonsten hätt ich lust zu das zu machen.
In der Zeit muss ich dich auch erst mal enttäschen, da ich vor Weihnachten quasi "streike", weil erst mal Ferienstart ist. ansonsten hätt ich lust zu das zu machen.
Am besten ist es, wenn Du Dir die sub-module im /contentAnalysers Verzeichnis von contentinfo anschaust. Es bietet sich contentinfo_image__gif.py an. Dieses ist sehr einfach.
Stell mir bei Unklarheiten die Fragen am besten über das Forum, so können alle sich darüber informieren.
Den Java-Code gibt's bei
http://taxiway.swapspace.net/~matt/vorbis/
Ich habe mit dem Autor die Lizenz bereits geklärt.
Stell mir bei Unklarheiten die Fragen am besten über das Forum, so können alle sich darüber informieren.
Den Java-Code gibt's bei
http://taxiway.swapspace.net/~matt/vorbis/
Ich habe mit dem Autor die Lizenz bereits geklärt.
ui... so gut kann ich java nicht, dass ich alles übersetzen kann. Ich könnte circa 1/3, aber der Rest ist mir unklar. Ich lern Java auch gerade erst, kanns aber weniger als Python . Ich weiß nicht, ob ich da wirklich zurechtkomme.
Dein Vorteil beim Portieren ist, dass Du den Java-Code nur halbwegs nachvollziehen können mußt. Das ist wesentlich leichter als selber etwas in Java zu programmieren. Wenn Du etwas nicht verstehst, frag mit einfach.
Ich habe jetzt auch noch .wav und .au implementiert.
Z.T. mit Hilfe einer Doku zu FileFormats die Guido van Rossum geschrieben hat -- vor einiger Zeit
Ich habe jetzt auch noch .wav und .au implementiert.
Z.T. mit Hilfe einer Doku zu FileFormats die Guido van Rossum geschrieben hat -- vor einiger Zeit
öhm... bis jetzt komm ich ja ganz gut klar, aber was heißt sowas?
- pubilc : ist klar, aber gibt es in Python nicht
- VorbisInfo(InputStream s) :
- trows IOExeception:
einfacher ist das hier:
der returnwert ist ein integer, der name ist getChannels, es gibt keine Parameter und gemacht wird "return channels". Ich kann das Beispiel aber nicht auch das obere übertargen und Java kann ich wie gesagt nicht gut genug. Der Rest ist nicht besonders schwer, jedenfalls auch den ersten Blick.
Code: Alles auswählen
public VorbisInfo(InputStream s) throws IOException {
/* initialize the crc_lookup table */
for (int i=0;i<256;i++)
crc_lookup[i]=_ogg_crc_entry(i);
fetch_header_and_packet(s);
interpret_header_packet();
fetch_header_and_packet(s);
interpret_header_packet();
}
- VorbisInfo(InputStream s) :
- trows IOExeception:
einfacher ist das hier:
Code: Alles auswählen
public int getChannels() {return channels;}
-
- Gründer
- Beiträge: 410
- Registriert: Dienstag 30. Juli 2002, 18:03
- Wohnort: Oestrich-Winkel
- Kontaktdaten:
Das sind einfach nur Methodenaufrufe.Code: Alles auswählen
public VorbisInfo(InputStream s) throws IOException { /* initialize the crc_lookup table */ for (int i=0;i<256;i++) crc_lookup[i]=_ogg_crc_entry(i); fetch_header_and_packet(s); interpret_header_packet(); fetch_header_and_packet(s); interpret_header_packet(); }
Diese Methoden fetch_header.... haben keinen Returnwert, daher nur der Aufruf, wie ein "Befehl". Der Aufruf bei deinem 2. Code wäre ja:
Code: Alles auswählen
a = getChannels()
Wird eine MEthode jedoch so deklariert:
Code: Alles auswählen
public void get_header(s)
so gibt es keinen Wert der zurückgegeben werden muss, und man ruft es so auf:
Code: Alles auswählen
get_header(s)
Aber warum das ganze zweimal hintereinander? Das macht KEIN sinn
Viel Bla von mir, hoffentlich hilfts...
irc: #python.de @ irc.freenode.net | [url=http://pythonwiki.pocoo.org]python-wiki[/url] | [url=http://www.pythonwiki.de/PythonDeForum/Faq]python-forum FAQ[/url]
lol. nun, ob das sinn macht, hab ich mir noch gar nicht angeschaut, weil ich es erst einmal übersetzen wollte. dann hatte ich vor mir das näher anzuschauen. mein Problem ist aber, ich weiß nicht wie ich den headerteil übertragen soll:
ich hab das andere mit dazugeschrieben, damit man vielleicht etwas mehr rauserkennen kann. Ich kann mr jedoch nicht zusammenreimen, was das throws IOException heißen soll. normalerweise wirft man doch damit eine art Ausnahmme, hier speziell einen Datei-Fehler, oder? Weiter weiß ich auch nicht, ob VorbisInfo hier der Returnwert ist, oder nur der Name (denk ich mal mehr, nach deiner Erklärung ) mit Parametern ist.
Ich kann die Syntax von c,c++ und java nicht so gut, aber die hängen ja alle nen bissel zusammen...
Code: Alles auswählen
public VorbisInfo(InputStream s) throws IOException
Ich kann die Syntax von c,c++ und java nicht so gut, aber die hängen ja alle nen bissel zusammen...
Wollte Dir gerade schon antworten und Du fragst genau die Sachen die Posten will
Also das besondere an
ist, daß es die Klasse VorbisInfo initialisiert. Oben steht doch
Obige Deklaration ist ein Constructor in Java. Ein Constructor in Java heißt genauso wie die Klasse selbst. In Python hättest Du statt dessen
Das
bedeutet, daß beim Aufruf dieser Methode (hier des Constructors -- sprich erzeugen einer Instanz der Klasse) eine IOException auftreten kann. In Python gibt's ja auch Exceptions für alle möglichen Fehler. Java ist aber etwas statischer als Python, was Nach- und Vorteile hat. Man darf nicht frölich wie in Python einfach eine Excpetion auslösen, sondern man muß schon im Vorfeld eine solche Möglichkeit ankündigen. Dann weiß der Java-Compiler bescheid und v.a. ein Programmierer, der das Modul / die Funktion benutzen will. Der kann sich dann überlegen, was bei einem solchen Fehler passieren soll z.B. MsgBox an Benutzer, die sagt das er ein Depp ist und nur .ogg-Dateien angeben darf (geht auch freundlicher z.B. "Das Programm RiesigDoof verursachte eine schwere ..." )
In Python kann man nicht vorhersagen, was bei einem Funktionsaufruf so alles passieren kann, das macht die Programmierung schneller aber "schlampiger". Ein guter Programmierer (Alice) gibt halt die möglichen Fehler in seiner Doku an und ein weiterer guter Programmierer (Bob) beachtet die Doku und fängt die Fehler auch in Python ab.
Ich hoffe das hilft Dir weiter.
cu beyond
Also das besondere an
Code: Alles auswählen
/**
* Initializes Ogg Vorbis information based on the header from a stream.
* @param s an Ogg Vorbis data stream
*/
public VorbisInfo(InputStream s) throws IOException
Code: Alles auswählen
public class VorbisInfo
Code: Alles auswählen
def __init__(s):
for ...
Code: Alles auswählen
throws IOException
In Python kann man nicht vorhersagen, was bei einem Funktionsaufruf so alles passieren kann, das macht die Programmierung schneller aber "schlampiger". Ein guter Programmierer (Alice) gibt halt die möglichen Fehler in seiner Doku an und ein weiterer guter Programmierer (Bob) beachtet die Doku und fängt die Fehler auch in Python ab.
Ich hoffe das hilft Dir weiter.
cu beyond
Und nochwas: In Java wird ein "self" o.ä. nicht verwendet. Die Aufrufe
beziehen sich aber auf die aktuelle Instanz von VorbisInfo.
Warum das ganze zweimal aufgerufen wird, verstehe ich auch nicht ganz. .ogg-Dateien bestehen aber aus Paketen. vielleicht benötigt man die beiden ersten Pakete, um alle Informationen zu sammeln. Aus dem Code konnte ich es nicht einfach ersehen.
Du kannst auch mal im Java-Code probieren, was passiert wenn Du eines der "Aufrufpaare" auskommentierst und Dir dann eine .ogg-Datei nochmal ansiehst (andere Werte?).
cu beyond
Code: Alles auswählen
fetch_header_and_packet(s);
interpret_header_packet();
fetch_header_and_packet(s);
interpret_header_packet();
Warum das ganze zweimal aufgerufen wird, verstehe ich auch nicht ganz. .ogg-Dateien bestehen aber aus Paketen. vielleicht benötigt man die beiden ersten Pakete, um alle Informationen zu sammeln. Aus dem Code konnte ich es nicht einfach ersehen.
Du kannst auch mal im Java-Code probieren, was passiert wenn Du eines der "Aufrufpaare" auskommentierst und Dir dann eine .ogg-Datei nochmal ansiehst (andere Werte?).
cu beyond
jetzt geht mir glatt ein ganzer Christbaum auf... das mit dem self war mir schon klar, aber das die init so beschrieben wird hätte mir auch klar sein können. thx, werd mal sehen, ob ich demnächst das fertig mache. Heute hab ich noch zuviel zu tun, man will ja schließlich ein schönes Fest und bekommt auch viel Besuch...
cu. Milan
cu. Milan
Kommst Du klar mit der Implementation?
cu beyond
cu beyond
nein, leider nincht. Ich bin noch immer beim übersetzten. Ich komm nicht zurecht, weil ich nicht weiß wie ich manche Sachen wie zum Beispiel nicht wie ich einen Vector nach Python übertrage. Ich hab in den Dokus nichts gefunden und ich kann aber auch keine selber programmieren. Ich glaub ich lass das doch besser, weil ich dich dabei ziemlich lang aufhalten würde.
Frag nur.
Ein Vector ist eine Liste (sowit ich weiß)
cu beyond
Ein Vector ist eine Liste (sowit ich weiß)
cu beyond
öhm... ( ) soweit ich weiß, ist ein Vector ne Einheit für räumlich sachen, also höchstens ein dreidimensionales Array. Sowas kann ich mit listen immulieren (hab ich auch schon mal von der Schule her!), aber ich weiß halt nicht genau, ob es das wirklich ist...
Es gibt ein sehr gutes Paket von Konrad Hinsen namens ScientificPython, da ist u.a. auch eine Vektor-Klasse drin, die auf NumPy aufbaut und alle gängigen Vektoroperationen beinhaltet (viele sehr komfortabel per operator-overloading zu benutzen).Milan hat geschrieben:öhm... ( ) soweit ich weiß, ist ein Vector ne Einheit für räumlich sachen, also höchstens ein dreidimensionales Array. Sowas kann ich mit listen immulieren (hab ich auch schon mal von der Schule her!), aber ich weiß halt nicht genau, ob es das wirklich ist...
Aber Selbermachen schult natürlich mehr...
Gruss
Jörg
sicher, aber ich bin mir ja noch nicht sicher, was es denn nun genau ist. Vektorenrechnung, falls es das ist, haben wir erst nächstes Schuljahr (11.)...joerg hat geschrieben:Es gibt ein sehr gutes Paket von Konrad Hinsen namens ScientificPython, da ist u.a. auch eine Vektor-Klasse drin, die auf NumPy aufbaut und alle gängigen Vektoroperationen beinhaltet (viele sehr komfortabel per operator-overloading zu benutzen).
Aber Selbermachen schult natürlich mehr...
Gruss
Jörg