Bilder zu HTML Galerie

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Bilder zu HTML Galerie

Beitrag von tmjuk »

Hallo,

sicher hat es so was schon gegeben. Aber ich wollte was Einfaches machen. Kann ja jeder selbst ändern
:mrgreen:

Also der Code macht folgendes:
Nach Abfrage des gewünschten Verzeichnis wird dieses geprüft.
Es wird nach Überschrift, Autor und Anzahl der Bilder pro Zeile gefragt.
Im gewähltem Verzeichnis werden die Ordner "images" und "thumbs" angelegt.
Die Bilder werden nach "images" kopiert und von ihnen werden Vorschaubilder erstellt, welche unter "thumbs" gespeichert werden.
Im Verzeichnis wird eine "index.html" erstellt, welche dann die Vorschau liefert.

Hier der Code
Achtung, Code sollte nun problemlos laufen.
Auf Seite 2 findet ihr das Ganze aber noch mit GUI von BurstNibbler für PB4.3.1

Code: Alles auswählen

; HTML Galeri
; Torsten Malchow
; Maj 2009

;{ Enumeration
	Enumeration 
		;{ Bilder
		#bild_laden
		#bild_thumb
		#bild_image
		;}
		
		;{ Verzeichnis
		#directory
		;}
		
		;{ Datei
		#arkiv
		;}
		
		;{ Fenster
		#fe_main
		;}
		
		;{ Gadgets
		#ga_progress
		;}
		
	EndEnumeration
;}

;{ Variablen
	EnableExplicit
	
	NewList bilder.s()
	
	Define.l Event, Quit, i, j, zellen, anzahl_bilder
	Define.s pfad, pfad_images, pfad_thumbs, header, autor, datum
	Global text.s
	
	
;}

;{ Prozeduren
	Procedure zeile_hor() 
		WriteStringN(#arkiv,"<a href='images/"+text+"' target='_blank'><img class='photo' src='thumbs/"+text+"' width='200' height='150' alt='thumbs/"+text+"' title='"+text+"'></a>")
	EndProcedure
	
	Procedure zeile_vert()
		WriteStringN(#arkiv,"<a href='images/"+text+"' target='_blank'><img class='photo' src='thumbs/"+text+"' width='150' height='200' alt='thumbs/"+text+"' title='"+text+"'></a>")
	EndProcedure
;}

;{ Init
	pfad = PathRequester("Välj mapp","")
	If pfad = "" Or pfad = "\"
		End
	EndIf
	
	pfad_images = pfad + "images\"
	
	pfad_thumbs = pfad + "thumbs\"
	
	ClearList(bilder())
	; läsa bildfiler
	
	If ExamineDirectory(#directory, pfad, "*.*")
		While NextDirectoryEntry(#directory)
			If DirectoryEntryType(#directory) = #PB_DirectoryEntry_File
        		If Right(DirectoryEntryName(#directory),3) = "png" Or Right(DirectoryEntryName(#directory),3) = "jpg" Or Right(DirectoryEntryName(#directory),3) = "bmp" Or Right(DirectoryEntryName(#directory),3) = "PNG" Or Right(DirectoryEntryName(#directory),3) = "JPG" Or Right(DirectoryEntryName(#directory),3) = "BMP"
        			AddElement(bilder())
        			bilder() = DirectoryEntryName(#directory)
        		EndIf
        	EndIf
		Wend      
		FinishDirectory(#directory)
	EndIf
	
	ResetList(bilder())
	anzahl_bilder = ListSize(bilder())
	
	datum = FormatDate("%yyyy-%mm-%dd", Date())
	header = InputRequester("Eingabe","Überschrift:","")
	If header = ""
		End
	EndIf
	header = ReplaceString(header, "ä", "&auml;")
	header = ReplaceString(header, "Ä", "&Auml;")
	header = ReplaceString(header, "ö", "&ouml;")
	header = ReplaceString(header, "Ö", "&Ouml;")
	header = ReplaceString(header, "ü", "&uuml;")
	header = ReplaceString(header, "Ü", "&Uuml;")
	header = ReplaceString(header, "ß", "&szlig;")
	header = ReplaceString(header, "å", "&aring;")
	header = ReplaceString(header, "Å", "&Aring;")
	
	autor = InputRequester("Eingabe","Autor:","")
	If autor = ""
		End
	EndIf
	autor = ReplaceString(autor, "ä", "&auml;")
	autor = ReplaceString(autor, "Ä", "&Auml;")
	autor = ReplaceString(autor, "ö", "&ouml;")
	autor = ReplaceString(autor, "Ö", "&Ouml;")
	autor = ReplaceString(autor, "ü", "&uuml;")
	autor = ReplaceString(autor, "Ü", "&Uuml;")
	autor = ReplaceString(autor, "ß", "&szlig;")
	autor = ReplaceString(autor, "å", "&aring;")
	autor = ReplaceString(autor, "Å", "&Aring;")
	
	zellen = Val(InputRequester("Eingabe","Anzahl Bilder in einer Zeile (2....10):",""))
	If zellen = 0
		End
	EndIf
	If zellen < 2 Or zellen > 10
		End
	EndIf
	
	CreateDirectory(pfad_images)
	CreateDirectory(pfad_thumbs)
	
	OpenWindow(#fe_main,0,0,200,100,"Verlauf",#PB_Window_TitleBar | #PB_Window_ScreenCentered)
	ProgressBarGadget(#ga_progress,10,45,180,10,0,anzahl_bilder)
	SetGadgetState(#ga_progress,0)
	
	i = 1
	j = 0
	UseJPEGImageDecoder()
	UseJPEGImageEncoder()
	UsePNGImageDecoder()
	UsePNGImageEncoder()
	
	
	CreateFile(#arkiv, pfad + "index.html")
		WriteStringN(#arkiv,"<html>")
		WriteStringN(#arkiv,"<head>")
		WriteStringN(#arkiv,"<title>"+header+"</title>")
		WriteStringN(#arkiv,"</head>")
		WriteStringN(#arkiv,"<body>")
		WriteStringN(#arkiv,"<h2>"+header+"</h2>")
		WriteStringN(#arkiv,"<h4>Autor: "+autor+"<br>")
		WriteStringN(#arkiv,"Datum: "+datum+"</h4>")
		WriteStringN(#arkiv,"<table>")
	
	;}
	
	

;{ Huvudslinga
	Repeat
		Event = WindowEvent()
		If NextElement(bilder())
			text = GetFilePart(bilder())
			LoadImage(#bild_laden,pfad + bilder())
			If ImageHeight(#bild_laden) < ImageWidth(#bild_laden)
				CopyImage(#bild_laden, #bild_image)
				CopyImage(#bild_laden, #bild_thumb)
				ResizeImage(#bild_thumb,200,150)
				
			Else
				CopyImage(#bild_laden, #bild_image)
				CopyImage(#bild_laden, #bild_thumb)
				ResizeImage(#bild_thumb,150,200)
				
			EndIf
			
			; #################################################
 				If Right(text,3) = "jpg" Or Right(text,3) = "JPG"
 					SaveImage(#bild_thumb, pfad_thumbs + text, #PB_ImagePlugin_JPEG,10)
 				ElseIf Right(text,3) = "png" Or Right(text,3) = "PNG"
 					SaveImage(#bild_thumb, pfad_thumbs + text, #PB_ImagePlugin_PNG)
 				Else		; BMP
 					SaveImage(#bild_thumb, pfad_thumbs + text, #PB_ImagePlugin_BMP)
 				EndIf
			; #################################################
			CopyFile(pfad + bilder(),pfad_images + text)
			DeleteFile(pfad + bilder())
			
			j + 1
			
			If j = zellen + 1
				j = 1
				; tr anfangen
				WriteStringN(#arkiv,"<tr>")
				WriteStringN(#arkiv,"<td align=center>")
				If ImageHeight(#bild_laden) < ImageWidth(#bild_laden)
					zeile_hor()
				Else
					zeile_vert()
				EndIf
				WriteStringN(#arkiv,"<p>"+text+"</p>")
				WriteStringN(#arkiv,"</td>")
			ElseIf j = zellen
				; tr abschliessen
				WriteStringN(#arkiv,"<td align=center>")
				If ImageHeight(#bild_laden) < ImageWidth(#bild_laden)
					zeile_hor()
				Else
					zeile_vert()
				EndIf
				WriteStringN(#arkiv,"<p>"+text+"</p>")
				WriteStringN(#arkiv,"</td>")
				WriteStringN(#arkiv,"</tr>")
			ElseIf j = 1
				; tr anfangen
				WriteStringN(#arkiv,"<tr>")
				WriteStringN(#arkiv,"<td align=center>")
				If ImageHeight(#bild_laden) < ImageWidth(#bild_laden)
					zeile_hor()
				Else
					zeile_vert()
				EndIf
				WriteStringN(#arkiv,"<p>"+text+"</p>")
				WriteStringN(#arkiv,"</td>")
			Else
				; normal schreiben
				WriteStringN(#arkiv,"<td align=center>")
				If ImageHeight(#bild_laden) < ImageWidth(#bild_laden)
					zeile_hor()
				Else
					zeile_vert()
				EndIf
				WriteStringN(#arkiv,"<p>"+text+"</p>")
				WriteStringN(#arkiv,"</td>")
			EndIf
			
			
			i + 1
			SetGadgetState(#ga_progress,i)
		Else
			Quit = 1
		EndIf
		
	Until Quit = 1
;}

;{ Programända
	
		If j <> 0
			WriteStringN(#arkiv,"</tr>")
		EndIf
		WriteStringN(#arkiv,"</table>")
		WriteStringN(#arkiv,"</body>")
		WriteStringN(#arkiv,"</html>")
		
	CloseFile(#arkiv)
;}

Entschuldigt, wenn da noch ein bischen schwedisch drin ist

Torsten


Edit: kleinen Fehler entfernt
Edit: zum Code die richtigen Imageplugins hinzu geschrieben
Umlaute werden richtig dargestellt
Zuletzt geändert von tmjuk am 09.07.2009 19:49, insgesamt 7-mal geändert.
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

arbeitet schön, zeigt bloß meine Bilder nicht an :mrgreen:

Und der Thread-Titel sollte nicht Gallerie heißen, sondern Galerie :wink:
Win11 x64 | PB 6.20
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Andesdaf hat geschrieben:arbeitet schön, zeigt bloß meine Bilder nicht an :mrgreen:
Er verschiebt die Bilder im Ordner nach einen Unterordner Images und erstellt eine index.html
Desweiteren werden im Unterordner thumbs noch solche erstellt.

:allright:
Schönes Programm, muß trotzdem meine Ordnung erstmal wieder herstellen :wink:

Gruß

Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

für Windows bitte anpassen:

Code: Alles auswählen

 Procedure zeile_hor()
      WriteStringN(#arkiv,"<a href='images/"+text+"' target='_blank'><img class='photo' src='thumbs/"+text+"' width='200' height='150' alt='thumbs/"+text+"' title='"+text+"'></a>")
   EndProcedure
   
   Procedure zeile_vert()
      WriteStringN(#arkiv,"<a href='images/"+text+"' target='_blank'><img class='photo' src='thumbs/"+text+"' width='150' height='200' alt='thumbs/"+text+"' title='"+text+"'></a>")
   EndProcedure 
zu

Code: Alles auswählen

   
Procedure zeile_hor()
      WriteStringN(#arkiv,"<a href='images\"+text+"' target='_blank'><img class='photo' src='thumbs\"+text+"' width='200' height='150' alt='thumbs\"+text+"' title='"+text+"'></a>")
   EndProcedure
   
   Procedure zeile_vert()
      WriteStringN(#arkiv,"<a href='images\"+text+"' target='_blank'><img class='photo' src='thumbs\"+text+"' width='150' height='200' alt='thumbs\"+text+"' title='"+text+"'></a>")
   EndProcedure
Im ersten Code waren die Ordner mit schrägstrich / getrennt, nicht mit
Backslash
Win11 x64 | PB 6.20
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Andesdaf hat geschrieben: Im ersten Code waren die Ordner mit schrägstrich / getrennt, nicht mit
Backslash
Ist ja auch besser so, solange man Win9x nicht supporten muß!
Windows stört sich da nicht dran.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

stimmt auch wieder. :roll:
Win11 x64 | PB 6.20
tmjuk
Beiträge: 380
Registriert: 30.06.2006 00:10
Wohnort: Backaryd, Schweden

Beitrag von tmjuk »

Tut mir leid für die Gallllerie.
Aber zwischen Deutsch, Englisch, Schwedisch und Norwegisch sind eben so viele Gemeinsamkeiten, dass man eben durcheinander kommt.

Zum Schrägstrich:
Unter HTML wird doch kein Back....Schrägstrich verwendet, oder?

Freut mich wenn's gefällt.
Soll ja als Anreiz dienen. Vielleicht macht einer eine schicke GUI.

Anreger war übrigens KIM (ich glaube das soll KDE Image Manager heißen).
Wobei KIM bedeutend mehr ist als nur dies.
Torsten
PB 4.51 32 Windows Vista, 32 XP, PB 4.51 32 Ubuntu 10.10
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

>Aber zwischen Deutsch, Englisch, Schwedisch und Norwegisch sind eben so viele Gemeinsamkeiten, dass man eben durcheinander kommt.
Den Fehler mit der Gallerie habe ich schon oft gesehen. Vielleicht mache
ich heut ne GUI wenn Lust und Zeit vorhanden ist...
Win11 x64 | PB 6.20
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

hab jetzt grad doch keine Zeit für... vielleicht später :roll:
Win11 x64 | PB 6.20
Benutzeravatar
padawan
Beiträge: 17
Registriert: 17.06.2009 15:59

Beitrag von padawan »

Ein hilfreiches Tool, gute Idee, und funktioniert grundsätzlich auch tadellos. Der Code ist gut nachvollziehbar und das bisschen Schwedisch finde ich nicht störend, weil man aus dem Zusammenhang versteht, was gemeint ist. Danke für´s Posten. Nur: wenn man das Tool dem Zweck zuführt, für den es wohl typischerweise verwendet werden würde - nämlich, man gibt ihm einen Bilderordner, direkt wie man ihn aus der Digicam auf die Festplatte kopiert hat, zu futtern, wo Bilder von 2-3MB nichts seltenes sind - ist es extrem langsam.

Hat bei mir für 30 Bilder je ca. 3 MB insgesamt mehrere Minuten gebraucht und während dieser Zeit den Rechner komplett lahmgelegt. Positiv betrachtet: Der Job wurde erledigt, und das Output sieht auch gut aus. Aber - 30 Bilder je 3MB sind ja nichtmal viel - 90 MB Bilddaten... und dafür dann schon mehrere Minuten komplette Rechnerauslastung... die kleinsten Speicherkarten für Digicams, die heute verkauft werden, sind a.f.a.i.k. schon 256 MB groß, die Tendenz geht eher in den Gigabyte-Bereich. Da kann man shoppen gehen, ehe die Bearbeitung fertig ist. Nee, nicht man kann, sondern man muss, weil man den Rechner in der Zeit für nichts anderes benutzen kann.

Ist denn einer von den verwendeten Bildmanipulationsbefehlen bekanntermaßen extrem langsam und könnte ggf. durch eine schnellere Routine ersetzt werden?
Antworten