Python Imaging

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.
juergenkemeter
User
Beiträge: 11
Registriert: Sonntag 20. November 2005, 22:33

Python Imaging

Beitragvon juergenkemeter » Sonntag 19. Februar 2006, 23:10

Hi,

Ich moechte die Python Imaging Library fuer die Darstellung des Lebenszuklus von Haarfollikel - Genen benutzen. Der Zyklus ist unterteilt in vier Phasen:
1. Anagen
2. Catagen
3. Telogen
4. Exogen

Je nachdem, in welcher Phase sich ein Gen befindet, soll mit Python die entsprechende Phase in einer Grafik hervorgehoben werden.

Der Genname und entsprechende Phase des Lenenszyklus ist in einer csv-Datei, oder einer Spalte in einem Excel Spreadsheet gespeichert (je nachdem was leichter ist zu extrahieren).

Ist es moeglich, via Python dynamisch eine Abfrage zu starten, und die entsprechende Phase des jeweiligen Gens in einem Bild darzustellen?

Fuer Tipps waere ich dankbar, da ich momentan dabei bin Python zu lernen.

Viele Gruesse,
Juergen
BlackJack

Beitragvon BlackJack » Montag 20. Februar 2006, 00:03

Mit CSV Daten kommt man in Python ganz wunderbar mit dem `csv` Modul aus der Standardbibliothek klar.

Was für Grafiken möchtest Du denn anzeigen? Wo kommen die her und in welchem Format liegen die vor? Vielleicht kommst Du um PIL sogar herum und kannst Tkinter zum Anzeigen benutzen.
juergenkemeter
User
Beiträge: 11
Registriert: Sonntag 20. November 2005, 22:33

Grafik

Beitragvon juergenkemeter » Montag 20. Februar 2006, 21:25

Hi,

ich hab heute eine 'Basis'-Grafik bekommen, in der verschiedene Phasen eingezeichnet sind.

Je nachdem welche Phase zu einem Gen in csv / Excel gespeichert ist, soll die entsprechende Sektion markiert oder hervorgehoben werden.

Schau auf folgenden Link, um diese Grafik zu sehen:
http://photobucket.com/albums/a19/juergenkemeter/

Da es eine begrenzte Anzahl von Phasen gibt, kann man ja evtl. verschiedene, markierte Versionen vom Basic-Image abspeichern und dann mit Python anzeigen lassen?

Das alles soll spaeter in eine Intranet-Seite reinkommen, welche auf eine Datenbank zurueckgreift. Da kann man dann auch Details zu einem Gen abfragen, und damit auch der aktuelle Status der Haarfollikels.
Da die Grafik gross ist, waere es wohl gut, wenn man mit einem Link ein eigenes Fenster oeffnet, das mit Hilfe von Python ein entsprechend markiertes Bild zu einem Gen praesentiert.

Gibts auch die Moeglichkeit, verschiedene Teile einer Grafik mit Hyperlinks zu unterlegen, damit man dadurch zu Experiment-Originaldaten kommen kann, die diese Phase belegen?

Von Tkinter hab ich leider noch nichts gehoert.

Cheers
Juergen
BlackJack

Re: Grafik

Beitragvon BlackJack » Montag 20. Februar 2006, 22:51

juergenkemeter hat geschrieben:Da es eine begrenzte Anzahl von Phasen gibt, kann man ja evtl. verschiedene, markierte Versionen vom Basic-Image abspeichern und dann mit Python anzeigen lassen?


Könnte man machen. Es wäre aber auch möglich die entsprechenden Teile der Graphiken mit PIL beim Abruf zu markieren. Kommt halt darauf an, wie es mit dem Speicherplatz bzw. mit der Rechenleistung/RAM des Servers aussieht und um wie viele Graphiken es sich insgesamt handelt.

Gibts auch die Moeglichkeit, verschiedene Teile einer Grafik mit Hyperlinks zu unterlegen, damit man dadurch zu Experiment-Originaldaten kommen kann, die diese Phase belegen?


Das kann man machen, aber das muss man in HTML lösen. Mit verweis-sensitiven Grafiken (Image Maps).

Von Tkinter hab ich leider noch nichts gehoert.


Das ist das GUI Toolkit, das zur Standardbibliothek von Python gehört. Aber Du möchtest ja eine Webanwendung schreiben.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Beitragvon Bernhard » Dienstag 21. Februar 2006, 20:06

Sorry, wenn ich das Problem gerade nicht ganz verstehe: Du hast eine Grafik mit zehn Schritten und bei jedem Gen in Deiner Datenbank soll genau eine davon aktiv sein? Dann spar Dir die Programmierarbeit, mach einfach zehn verschiedene Bilder, in jedem eines der Felder mit einem Grafikprogramm markiert. Dann speicherst Du in Deiner Datenbank zu jedem Gen, welches der zehn Bilder dazu angezeigt werden soll und gut ist.
Oder kann ein Gen in mehreren der Felder aktiv sein? Nur dann brauchst Du eine Softwarelösung (z.B. mit PIL).

Gruß,
Bernhard
Zuletzt geändert von Bernhard am Dienstag 21. Februar 2006, 20:41, insgesamt 1-mal geändert.
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Beispiel für Imagemap

Beitragvon Bernhard » Dienstag 21. Februar 2006, 20:39

Hallo nochmal!

Du hast Dein Bild in einer Größe von 542x846 Pixeln veröffentlicht. So braucht man schon einen großen Monitor - Du solltest überlegen, das Bild kleiner zu machen. Sollte es bei der Größe bleiben, kannst Du die unten angeführten Werte für Deine ImageMap benutzen. Ganz ohne Rückgriff auf Python versucht dann der Browser ganz von selbst, die HTML-Seiten "Ana.html", "Pro.html", "Schritt1.html" etc aufzurufen, wenn der User eines der Felder anklickt.

Code: Alles auswählen

<html><body>
<img src="Name.gif" width="542" height="846" border="0" alt="..." usemap="OhneTitel_1_Map">
<map name="OhneTitel_1_Map">
<area shape="rect" alt="" coords="190,507,354,670" href="Mitte.html">
<area shape="rect" alt="" coords="191,311,345,427" href="Ana.html">
<area shape="rect" alt="" coords="425,526,541,648" href="Pro.html">
<area shape="rect" alt="" coords="191,757,355,846" href="Tel.html">
<area shape="rect" alt="" coords="0,535,113,649"   href="Cat.html">
<area shape="rect" alt="" coords="26,367,93,457"   href="Schritt8.html">
<area shape="rect" alt="" coords="66,229,143,311"  href="Schritt6.html">
<area shape="rect" alt="" coords="122,137,190,208" href="Schritt4.html">
<area shape="rect" alt="" coords="191,56,253,137"  href="Schritt2.html">
<area shape="rect" alt="" coords="266,0,346,90"    href="Schritt1.html">
<area shape="rect" alt="" coords="370,0,448,65"    href="Schritt0.html">
</map></body>
</html>

Du musst nur das Bild Name.gif nennen und in das selbe Verzeichnis wie dieses HTML-Script stellen.

Gruß,
Bernhard
juergenkemeter
User
Beiträge: 11
Registriert: Sonntag 20. November 2005, 22:33

Beitragvon juergenkemeter » Freitag 24. Februar 2006, 02:27

Hi,
wie bekommt man raus welche Pixel man eingeben muss?

Ich werd das Bild am Ende wohl kleiner machen, danke fuer den Tipp.

Ich hab eine Datei 'start.html' mit deinem HTML - Hyperlink-Code, und die entsprechenden verlinkten html - Dateien erstellt, im selben Ordner. Wenn ich start.html oeffne, wird korrekterweise das Bild angezeigt, doch es passiert nichts wenn ich auf die Grafik im Internet Explorer klicke.

Ich werde wohl verschiedene Grafiken dieses Zyklus', mit verschiedenen markierten Phasen, abspeichern und dann, je nachdem in welcher Phase ein Gen aktiv ist (koennen auch mehrere sein), das entsprechende Bild anzeigen lassen. Dafuer werde ich PIL brauchen, oder?

Beispiel:
Gen xy wird im Datenbank-GUI angezeigt. Zum Gen ist in der Spalte 'Aktive_Phase' der Eintrag 'Anagen' und 'Telogen' abgespeichert.
Eine Funktion (HTML? PIL?) nimmt die beiden Eintraege und zeigt das entsprechend markierte Bild an.

cheers,
Juergen
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Beitragvon Rebecca » Freitag 24. Februar 2006, 09:09

juergenkemeter hat geschrieben:Hi,
wie bekommt man raus welche Pixel man eingeben muss?

Wenn du das Bild mit einer Bildverarbeitung oeffnest, wird meist irgendwo unten angezeigt, ueber welchem Pixel sich der Cursor gerade befindet. Zumindest ist das bei Gimp so. Gimp hat uebrigens einen Fillter, der einem beim Erstellen der Image-Maps hilft. (Im Menue unter Filters >> Web >> ImageMap).
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Beitragvon Bernhard » Freitag 24. Februar 2006, 21:33

Hi!
juergenkemeter hat geschrieben:Ich hab eine Datei 'start.html' mit deinem HTML - Hyperlink-Code, und die entsprechenden verlinkten html - Dateien erstellt, im selben Ordner. Wenn ich start.html oeffne, wird korrekterweise das Bild angezeigt, doch es passiert nichts wenn ich auf die Grafik im Internet Explorer klicke.


Es sollte darauf ankommen, wo auf die Grafik du klickst: Wenn Du auf das Feld für das Anagen klickst sollte der InternetExplorer eigentlich die Datei Ana.html anzeigen. Wenn Du mit der Maus über die Grafik fährst, sollte sich der Mauszeiger nur an einigen Stellen zur Zeigefingerhand umwandeln, an anderen ein Pfeil bleiben. Versuch das doch noch mal.


juergenkemeter hat geschrieben:Ich werde wohl verschiedene Grafiken dieses Zyklus', mit verschiedenen markierten Phasen, abspeichern und dann, je nachdem in welcher Phase ein Gen aktiv ist (koennen auch mehrere sein), das entsprechende Bild anzeigen lassen. Dafuer werde ich PIL brauchen, oder?
Eigentlich: Nein! Im Intranet wird man das Ganze wohl eher so programmieren, dass der Rechner mit der Datenbank eine HTML-Datei erzeugt, die dann nur einen Link auf das passende Bild enthalten muss.

Schönen Gruß,
Bernhard
juergenkemeter
User
Beiträge: 11
Registriert: Sonntag 20. November 2005, 22:33

html - Datei erzeugen

Beitragvon juergenkemeter » Sonntag 26. Februar 2006, 23:53

Hi,
Eigentlich: Nein! Im Intranet wird man das Ganze wohl eher so programmieren, dass der Rechner mit der Datenbank eine HTML-Datei erzeugt, die dann nur einen Link auf das passende Bild enthalten muss.


programmiert man sowas mit HTML oder irgendeiner ScriptSprache? Weisst du von einem Beispiel im Internet?

Juergen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: html - Datei erzeugen

Beitragvon gerold » Montag 27. Februar 2006, 10:43

juergenkemeter hat geschrieben:programmiert man sowas mit HTML oder irgendeiner ScriptSprache? Weisst du von einem Beispiel im Internet?

Hi Juergen!

So etwas ist eine dynamische Internet-Anwendung. Das kannst du mit allem programmieren, was als Endergebnis HTML (reinen Text) liefern kann. Hier im Python-Forum weise ich dich natürlich auf Zope und CGI hin.

Hier einige Links zum Thema CGI:
http://www.python-forum.de/viewtopic.php?t=5253
http://python.org/doc/2.4.2/lib/module-cgi.html
http://python.org/doc/2.4.2/lib/module-cgitb.html

Hier einige Links zum Thema Zope:
http://zope.de
http://zope.org
http://gerold.bcom.at/zope_plone/zope_a ... n_windows/
(Diese Anleitung funktioniert auch mit Zope 2.9.0.)
Das Tutorial von Zope zeigt dir in wenigen Stunden, wie du mit Zope dynamische Websites erstellen kannst.

Der wichtigste Link zum Thema HTML:
http://de.selfhtml.org/
(Ohne HTML-Kenntnisse bringt dir der bester Internet-Applikationsserver nichts.)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
juergenkemeter
User
Beiträge: 11
Registriert: Sonntag 20. November 2005, 22:33

Beitragvon juergenkemeter » Montag 27. Februar 2006, 11:04

Hi,
erstmal danke für die vielen Links! Werd versuchen mit Zope und CGI was anzufangen.

Nur glaub ich ist mir Bernhard's Gedanke noch nicht ganz klar, was er damit meint, dass der Datenbank-Server eine HTML-Datei erzeugt, die nur einen Link auf ein entsprechendes Bild enthält.


Schöne Grüße
Jürgen
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 27. Februar 2006, 11:45

Hi Jürgen!

[code=] Datenschicht (CSV, oder Datenbank)
|
Anwendungsschicht (CGI oder Zope)
|
Client (Browser)[/code]

Hier ein Beispiel, wie so etwas als CGI aussehen könnte. Dazu musst du alles in einen Ordner speichern. Hol dir den CGI-Server (cgi_server.py) aus diesem Beitrag http://www.python-forum.de/viewtopic.php?p=31590#31590 .

csv_datei.csv:
[code=]1,Name1,Phase1
2,Name2,Phase2
3,Name3,Phase1[/code]

genliste.py:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

print "Content-Type: text/html"
print

import cgi
import cgitb; cgitb.enable()
import csv


# Links zu den Phasenbildern
phasenlinks = {
    "phase1": "http://irgendeineurl/phase1.gif",
    "phase2": "http://irgendeineurl/phase2.gif",
    "phase3": "http://irgendeineurl/phase3.gif",
}

# Daten einlesen
data_list = []
f = file("csv_datei.csv", "rb")
csv_data = csv.DictReader(f, ("id", "name", "phase"))
for item in csv_data:
    data_list.append(item)
f.close()

# Header ausgeben
print \
"""<html>
<head>
  <title>Genliste</title>
</head>
<body>
  <table border="1" cellspacing="0" cellpadding="3">
"""

# Daten ausgeben
for item in data_list:
    print "    <tr>"
    print "      <td>%s</td>" % item["id"]
    print "      <td>%s</td>" % item["name"]
    print "      <td><a href='%s'>%s</a></td>" % (
        phasenlinks[item["phase"].lower()], item["phase"]
    )
    print "    </tr>"

# Footer ausgeben
print \
"""
  </table>
</body>
</html>
"""


mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Montag 27. Februar 2006, 16:06

[code=] Datenschicht (CSV, oder Datenbank)
|
Anwendungsschicht (CGI oder Zope)
|
Client (Browser)[/code]

@gerold: Warum ignorierst du andauernd WSGI? :roll:
TUFKAB – the user formerly known as blackbird
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Montag 27. Februar 2006, 16:26

blackbird hat geschrieben:@gerold: Warum ignorierst du andauernd WSGI? :roll:

Hi blackbird!

Weil ich denke, dass es für so einfache Sachen zu kompliziert ist.

Aber das ist ein wirklich gutes Thema für einen neuen Thread. Vielleicht kann WSGI ja schon alles was ich möchte und ich weiß nur noch nichts davon.

Hier ist der neue Thread:
http://www.python-forum.de/viewtopic.php?p=31955

lg
Gerold
:-)
Zuletzt geändert von gerold am Montag 27. Februar 2006, 17:12, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]