JPEG, PNG, GIF - Resize
Re: JPEG, PNG, GIF - Resize
... nur so´n Gedanke:
Evtl. hilft es ja, wenn du im Hintergrund immer eine Datei wie z.B. die thumbs.db bei Windows erstellst (oder bei Win, falls vorhanden, diese nutzt) und bei der Miniaturansicht zuerst diese ausliest?! Somit könnte man einen schnellen Start ermöglichen, in der Zwischenzeit, während der User sich durch Thumbnails blättert, könnten ja die anderen Dateien in die Miniaturansicht geladen werden.
Evtl. hilft es ja, wenn du im Hintergrund immer eine Datei wie z.B. die thumbs.db bei Windows erstellst (oder bei Win, falls vorhanden, diese nutzt) und bei der Miniaturansicht zuerst diese ausliest?! Somit könnte man einen schnellen Start ermöglichen, in der Zwischenzeit, während der User sich durch Thumbnails blättert, könnten ja die anderen Dateien in die Miniaturansicht geladen werden.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Ich benötige die Thumbnails fürs Internet sonst hätte ich direkt Theo's Superlösung OPBitmap genutzt die würde sonst allemal reichen!
Da ich von meinen Tausenden Bildern keine Voransichten in den unterschiedlichsten Auflösungen auf meiner Platte haben möchte, generiere ich sie immer aus dem Original, im Moment mache ich alles noch mit GDIPlus unter Windows, wie schon erwähnt jedes Thumbnail ~100x75 8-16 ms und davon dann noch bis zu 8 gleichzeitig, da ist nur die Bandbreite meines bescheidenen Internetanschlusses ein Problem!
215 Requests, also ~200 Bilder und alles Andere drum herum in 5,3 Sekunden halte ich da noch für akzeptabel.
Ich speichere die Thumbs auch nie in eine Datei (dann spare ich mir die Zeit fürs speichern) sondern sende sie immer als Stream, das ist auch kein Problem mehr bei dem Beispiel braucht man dann nur das Speichern durch Folgende Zeile ersetzen!
Ich suche nun noch einen schnellen Weg um an die Voransichten aus den JPEGs (Exif) zu kommen, dann müsste das Problem mit den ~500 Thumbs
in einer Galerie auch zu lösen sein. Dafür brauche ich allerdings eine ordentliche Exif-Routine.
Das Problem mit den GIFs ist nicht so tragisch, zumindest im Moment, denn ich habe keine GIFs die zur Laufzeit skaliert werden müssten, wäre halt nur schön damit es komplett wäre!
Wenn man PHP nutzt nimmt man sich adaptive-image und kümmert sich um nichts, dann werden die Voransichten zwischengespeichert (müllen einem die Platte voll) und da möchte ich nicht hin! Mal abgesehen davon das die php-Funktionen grotten lahm im Vergleich zu Free Pascal sind
und es beim ersten generieren dann trotz dem sehr lange dauert!
Da ich von meinen Tausenden Bildern keine Voransichten in den unterschiedlichsten Auflösungen auf meiner Platte haben möchte, generiere ich sie immer aus dem Original, im Moment mache ich alles noch mit GDIPlus unter Windows, wie schon erwähnt jedes Thumbnail ~100x75 8-16 ms und davon dann noch bis zu 8 gleichzeitig, da ist nur die Bandbreite meines bescheidenen Internetanschlusses ein Problem!
215 Requests, also ~200 Bilder und alles Andere drum herum in 5,3 Sekunden halte ich da noch für akzeptabel.
Ich speichere die Thumbs auch nie in eine Datei (dann spare ich mir die Zeit fürs speichern) sondern sende sie immer als Stream, das ist auch kein Problem mehr bei dem Beispiel braucht man dann nur das Speichern durch Folgende Zeile ersetzen!
Code: Alles auswählen
Writer.ImageWrite(MemoryStream, DestImage);

Das Problem mit den GIFs ist nicht so tragisch, zumindest im Moment, denn ich habe keine GIFs die zur Laufzeit skaliert werden müssten, wäre halt nur schön damit es komplett wäre!
Wenn man PHP nutzt nimmt man sich adaptive-image und kümmert sich um nichts, dann werden die Voransichten zwischengespeichert (müllen einem die Platte voll) und da möchte ich nicht hin! Mal abgesehen davon das die php-Funktionen grotten lahm im Vergleich zu Free Pascal sind

MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Hallo zusammen,
also der erste Test ist gelungen, Zeit zum erzeugen nicht messbar
zumindest nicht mit GetTickCount, na geht doch!
Nun noch einen Weg finden der die hässlichen Balken entfernt!
also der erste Test ist gelungen, Zeit zum erzeugen nicht messbar

MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Also das Selbe kann die Routine die ich schon gefunden habe auch, ich möchte sie eigentlich abspecken denn ich benötige nur RelatedImageWidth, RelatedImageHeight und das Thumbnail. Aus den beiden Werten lässt sich das Seitenverhältnis berechnen, womit ich dann die Differenzen im Thumbnail ermitteln kann (also die schwarzen Balken) um sie abzuschneiden!Christian hat geschrieben:https://github.com/cutec-chris/promet-erp/tree/master/promet/source/components/dexif
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Hallo zusammen,
kennt jemand von Euch einen Weg aus einem TFPMemoryImage heraus ein GIF zu speichern oder besser als Stream auszulesen, denn ein TFPReaderGIF gibt es aber ein TFPWriterGIF nicht?
kennt jemand von Euch einen Weg aus einem TFPMemoryImage heraus ein GIF zu speichern oder besser als Stream auszulesen, denn ein TFPReaderGIF gibt es aber ein TFPWriterGIF nicht?
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: JPEG, PNG, GIF - Resize
Hatte ich doch hier schon geschrieben: http://www.lazarusforum.de/viewtopic.php?p=64596#p64596gocher hat geschrieben:Hallo zusammen,
kennt jemand von Euch einen Weg aus einem TFPMemoryImage heraus ein GIF zu speichern oder besser als Stream auszulesen, denn ein TFPReaderGIF gibt es aber ein TFPWriterGIF nicht?
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Gibts nen Grund warum du die abspecken willst, oder hast zuviel zeit ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Ich hab ZeitChristian hat geschrieben:Gibts nen Grund warum du die abspecken willst, oder hast zuviel zeit ?


GIFs sind im eigentlichen auch die Nebensache da sie eh meist nicht skaliert werden müssen, meistens sind es halt JPEGs und selten bei mir auch Grafiken/Diagramme als PNGs, aber dennoch möchte ich auch GIFs unterstützen und die Routine klein und schnell halten, denn im Augenblick ist sie gerade mal 330 Zeilen lang und nutzt die Units: FPImage, FPImgCanv, FPReadJPEG, FPWriteJPEG, FPReadPNG, FPWritePNG, FPReadGIF, FPReadBMP und ist schneller (zumindest im Haupteinsatzgebiet) als die bisher eingesetzte GDIPlus.
Aber es macht auch nichts wenn sich damit noch keiner befasst hat, war nur eine Frage, OpBitmap und besonders Vampyre sind halt zu schwerfällig, besonders weil ich das ganze Drumherum nicht benötige.
Unter Lazarus /Free Pascal stehen einem etliche Möglichkeiten zu Verfügung, BGRABitmap unterstützt wohl auch alle Formate, aber ich such dann den Vergleich und muss wohl wieder eine Testroutine schreiben und alle Komponenten testen, so bin ich nun mal!


MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: JPEG, PNG, GIF - Resize
Was bitte ist "schwerfällig"? OpBitmap ist superleicht.gocher hat geschrieben: Aber es macht auch nichts wenn sich damit noch keiner befasst hat, war nur eine Frage, OpBitmap und besonders Vampyre sind halt zu schwerfällig,

Dann lass das Drumherum weg.gocher hat geschrieben: besonders weil ich das ganze Drumherum nicht benötige.
Afaik ist BGRABitmap auf TFPCustomImage aufgebaut und unterstützt gar keine weiteren Formate als die TFPWriter.gocher hat geschrieben: BGRABitmap unterstützt wohl auch alle Formate,
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Ok, da hast Du wohl mehr Ahnung, da bist Du tiefer in der Materie, ich schau mich halt gerade erst mal um und da bin ich halt auf das Lazarus Wiki http://wiki.freepascal.org/Graphics_libraries gestoßen, um alle Alternativen zu finden dachte ich wäre das eine gute Übersicht.theo hat geschrieben: Afaik ist BGRABitmap auf TFPCustomImage aufgebaut und unterstützt gar keine weiteren Formate als die TFPWriter.
Ich dachte halt wenn dort Supported File Formats steht heißt das halt unterstützte Dateiformate, aber ich lasse mich gerne eines besseren belehren!
Ok dann schaue ich mir OpBitmap noch mal an!
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Also abgekürzt siet mein Test nun so aus:
In der Explorer Voransicht ist alles ok, aber wenn ich mir das Ergebnis unter Paint oder Paint.Net ansehen/öffnen möchte, bekomme ich folgende Meldungen! Muss ich vorm speichern noch Parameter setzen, gibt es zu OpBitmap eine Dokumentation?
Code: Alles auswählen
uses .., opbitmapformats;
function getScaledImage(const InFile, OutFile: string; const maxWidth, maxHeight: word): boolean;
var
StartTime: DWord;
bmp: TOPPicture;
begin
...
StartTime := GetTickCount();
bmp := TOPPicture.create;
bmp.LoadFromFile(InFile);
bmp.Bitmap.Canvas.Resample(160,109);
WriteLn('Zeit nach (ResizeImage): ' + IntToStr(GetTickCount() - StartTime));
bmp.SaveToFile(OutFile);
bmp.free;
...
end;
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: JPEG, PNG, GIF - Resize
Ich bin auch nicht total sicher, aber GIF wird von FPImage lesernderweise unterstützt. Wenn du dort einen WriteGif Code findest, lass es mich wissen.gocher hat geschrieben: Ich dachte halt wenn dort Supported File Formats steht heißt das halt unterstützte Dateiformate, aber ich lasse mich gerne eines besseren belehren!
Re: JPEG, PNG, GIF - Resize
Keine Ahnung, unter Linux (Gimp, Showfoto, Okular etc.) geht's. Die Browser (Firefox, Opera, Chromium, Konqueror) haben auch kein Problem damit.gocher hat geschrieben: In der Explorer Voransicht ist alles ok, aber wenn ich mir das Ergebnis unter Paint oder Paint.Net ansehen/öffnen möchte, bekomme ich folgende Meldungen!
Vllt. ist diese Software sehr intolerant gegenüber kleinen Inkompatibilitäten. Ich weiss es nicht.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: JPEG, PNG, GIF - Resize
Also ich habe mir die Resultierende Datei mal im Hexeditor angesehen:
Der Gif-Header sollte so aussehen:
In gifwrite.pas Zeile: 690 soll das wohl auch passieren aber rWidth und rHeight sind 0.
Wenn Du in gifwrite.pas Zeile: 548 die beiden Zeilen einfügst, funktioniert es:
Es wäre noch zu prüfen ob es so auch für Animated-GIFs richtig ist, aber so weit wollte ich mich eigentlich gar nicht hinein knien, denn eigentlich habe ich ja was fertiges gesucht oder nur eine einfache Lösung!
Ich habe dann noch einmal das Bild mit Paint.Net und GDIPlus generiert und festgestellt das die anderen Routinen alle den Gif-Header nach den Konventionen generieren.Der Gif-Header sollte so aussehen:
Code: Alles auswählen
TGifHeader = record
Signature: array [0..5] of char;
Width, Height: word;
Flags, Background, Aspect: byte;
end;
Code: Alles auswählen
WriteSourceInteger(2, rWidth); // logical screen width
WriteSourceInteger(2, rHeight); // logical screen height
Code: Alles auswählen
rGlobalColorValid := true;
rWidth := Abitmap.Width; //**neu
rheight := Abitmap.Height; //**neu
end; // with
Zuletzt geändert von gocher am So 6. Okt 2013, 16:57, insgesamt 2-mal geändert.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me