AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fotos in einer DB komprimieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fotos in einer DB komprimieren

Ein Thema von AndreT · begonnen am 28. Sep 2006 · letzter Beitrag vom 29. Sep 2006
Antwort Antwort
Seite 1 von 2  1 2      
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#1

Fotos in einer DB komprimieren

  Alt 28. Sep 2006, 11:34
Datenbank: MS SQL2003 • Zugriff über: ADO
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
Andre
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Fotos in einer DB komprimieren

  Alt 28. Sep 2006, 11:47
Warum wandelst du sie nicht in jpeg, bevor du sie in die Datenbank schreibst?
Markus Kinzler
  Mit Zitat antworten Zitat
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Fotos in einer DB komprimieren

  Alt 28. Sep 2006, 12:03
Sie sind schon in der DB drin. Gesammelt von anderen über Jahre und ich bin nun das "Opfer" was die Gesamtgröße minimieren soll.
Andre
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Fotos in einer DB komprimieren

  Alt 28. Sep 2006, 12:09
Da gibt es noch nie Möglichkeit:
-Auslesen
-Umwandeln
-Zurückschreiben
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#5

Re: Fotos in einer DB komprimieren

  Alt 28. Sep 2006, 12:28
... 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])
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Fotos in einer DB komprimieren

  Alt 29. Sep 2006, 05:43
Zitat von mkinzler:
Da gibt es noch nie Möglichkeit:
-Auslesen
-Umwandeln
-Zurückschreiben
genau so hatte ich es vor



Zitat von chaosben:
Da gibt es noch nie Möglichkeit:
... 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])
und das ist das, wo mir bisher noch das Wissen zu fehlt
Andre
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#7

Re: Fotos in einer DB komprimieren

  Alt 29. Sep 2006, 06:35
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Fotos in einer DB komprimieren

  Alt 29. Sep 2006, 07:01
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:
MyBitmap.LoadFromFile('MyPic.BMP');
MyJpeg.Canvas.Draw (0,0, MyBitmap);
MyJPeg.SaveToFile ('MyPic.JPG');
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.

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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Fotos in einer DB komprimieren

  Alt 29. Sep 2006, 07:07
Zitat von alzaimar:
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.
Zitat von chaosben:
... und falls nur per Delphi zugegriffen wird, kannst du es ziemlich einfach per TCompressionStream komprimieren.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
AndreT

Registriert seit: 5. Nov 2004
Ort: Bocholt
82 Beiträge
 
Delphi 2006 Enterprise
 
#10

Re: Fotos in einer DB komprimieren

  Alt 29. Sep 2006, 08:32
Ihr verwirrt mich

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.
Andre
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz