![]() |
Datenbank: MS SQL2003 • Zugriff über: ADO
Fotos in einer DB komprimieren
Hallo zusammen,
ich habe rund 2500 Fotos mit je~700kb auf einer Datenbank (MS SQL2003 Server: Feldtyp:Image) gespeichert. Ich würde nun gerne die Fotos alle ähnlich dem Jpeg Prinzip komprimieren, sprich Größe beibehalten, aber Qualität verringern. Ist das überhaupt möglich? Weiß auch jemand wie? Danke Gruß Andre :dp: |
Re: Fotos in einer DB komprimieren
Warum wandelst du sie nicht in jpeg, bevor du sie in die Datenbank schreibst?
|
Re: Fotos in einer DB komprimieren
Sie sind schon in der DB drin. Gesammelt von anderen über Jahre und ich bin nun das "Opfer" was die Gesamtgröße minimieren soll. :shock:
|
Re: Fotos in einer DB komprimieren
Da gibt es noch nie Möglichkeit:
-Auslesen -Umwandeln -Zurückschreiben |
Re: Fotos in einer DB komprimieren
... und falls nur per Delphi zugegriffen wird, kannst du es ziemlich einfach per TCompressionStream komprimieren. (Ja, das ist kein jpeg ... aber es ist verlustfrei komprimiert [was ja an sich nichts schlechtes ist])
|
Re: Fotos in einer DB komprimieren
Zitat:
Zitat:
|
Re: Fotos in einer DB komprimieren
Also der erste Schritt ist, das du die Bilder im Delphi als Stream verfügbar hast. Das machst du am besten mit den dir bekannten DB-Komponenten.
Danach brauchst du nur noch den Bild-Stream in einen TCompressionStream schreiben und dann den komprimierten Stream zurückschreiben. |
Re: Fotos in einer DB komprimieren
So eine verlustfreie Kompression (mit TCompressionStream) bringt aber nicht viel, denn die Bilder sind ja quasi verschlüsselt in der DB. Sie lassen sich mit einem normalen Programm nicht ohne Weiteres anzeigen.
Es gibt bei Delphi eine JPEG-Komponente, bzw. eine JPEG Unit, die Du einfach einbinden kannst. Dann gehst Du Record für Record durch deine Tabelle und wandelst eben Bild für Bild um. Probiere es zunächst mit einem Bild auf der Festplatte. Ich würde das jetzt so machen:
Delphi-Quellcode:
Das klappt natürlich so nicht 1:1, aber im Prinzip lädst Du die Bitmap und zeichnes dieses Bild auf die Leinwand ('Canvas') des Jpeg-Objektes. Hinterher speicherst Du das wieder ab.
MyBitmap.LoadFromFile('MyPic.BMP');
MyJpeg.Canvas.Draw (0,0, MyBitmap); MyJPeg.SaveToFile ('MyPic.JPG'); Anschließend liest du die Datei nicht per 'LoadFromFile' ein, sondern erstellst einen FileStream und lädst das Bild per 'LoadFromStream'. Dann machst Du das Gleiche beim Speichern. Und zum Schluss kommt der Stream nicht aus einer Datei, sondern von dem Blob-Feld ('TBlobField') der DB. |
Re: Fotos in einer DB komprimieren
Zitat:
Zitat:
|
Re: Fotos in einer DB komprimieren
Ihr verwirrt mich :?: :coder2:
von wo nach wo umwandeln. Wenn ich das Bild einfach via DBImage1 -> über Datasource zeigt es das Bild des Aktuellen Datensatzes an. DBImage1.Picture.SaveToFile('d:\test.jpg'); habe ich ein Jpg mit 799kb. Das soll kleiner werden und wieder zurück in die DB. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz