Discussion:
Bilder verkleinert abspeichern lassen
(zu alt für eine Antwort)
Florian Bäthge
2006-05-29 17:40:35 UTC
Permalink
Hallo,

um meinen Freunden das Hochladen von Bildern auf eine Webseite zu
erleichtern, würde ich gern ein kleines Delphi-Programm schreiben, mit dem
ich mehrere Bilder auswählen kann (meinetwegen ein OpenDialog bei dem man
mehreres wählen kann). Außerdem soll eingegeben werden, wie die Bilder
gespeichert werden sollen.

zum Beispiel: bild$i_thumb.jpg oder bild$i_big.jpg
-> Also mann soll auswählen können, unter welchem Namen die gespeichert
werden. $i wäre dann die Nummer, in welcher Reihenfolge die bearbeitet
werden, somit kommt es dann zu keiner Doppelbenennung.

Als drittes Eingabefeld sollte angegeben werden, wie lang die längste Seite
sein soll.
Also bei Thumbs z.B. 200px.

Beim Klick auf nen Button soll dann überprüft werden, soll dann jedes Bild
bearbeitet werden.
Erst soll geprüft werden, ob es hoch oder querformat ist, also welche Seite
länger ist.
Dann soll das Bild so vekleinert werden, dass die größere Seite gleich dem
Maximumwert aus dem Eingabefeld ist.
Dieses Bild soll dann in dem Ordner nach dem Muster, wie es oben festgelegt
wurde, gespeichert werden.

Letztendlich sollen dabei dann mehrere Thumbnails entstehen.

Evtl. wäre es auch noch gut, unten rechts so eine Art Watermark einzubinden,
zumindest die Internetadresse unserer Webseite. Aber das ist wirklich nicht
wichtig. Hauptsache verkleinern...


Das Problem ist nur, ich habe keine Ahnung, wie ich diese Bilder bearbeite.
Und wie kriege ich die erstmal geladen und schließlich gespeichert. Bin noch
am Lernen in Delphi. Ich kann zwar einen OpenDialog einbauen, aber wie kann
man dort mehrere Dateien laden?

Oder gibt es solche Programme irgendwo kostenlos zum downloaden? Dann muss
ich es nicht selbst schreiben. Es geht mir nur darum, den Leuten, die die
Bilder hochladen sollen, das ganze zu vereinfachen

Es wäre echt nett, wenn ihr mir helfen könntet!
--
ciao,
Florian Bäthge (evident)
Wolfgang Fellger
2006-05-29 17:50:09 UTC
Permalink
Post by Florian Bäthge
Oder gibt es solche Programme irgendwo kostenlos zum downloaden?
IrfanView dürfte nahe dran sein; Logo einbinden kann es aber IMO nicht.

Zum Problem: Laden und Speichern wird durch die bei Delphi mitgelieferten
Bibliotheken nur für BMP und JPEG unterstützt. Für letzteres solltest du die
Unit JPEG einbinden, dir steht dann die Klasse TJPEGImage zur Verfügung.
--
Wolfgang Fellger
Stefan M. Huber
2006-05-29 20:05:46 UTC
Permalink
Post by Florian Bäthge
um meinen Freunden das Hochladen von Bildern auf eine Webseite zu
erleichtern, würde ich gern ein kleines Delphi-Programm schreiben, mit dem
schamlose Eingenwerbung:
http://stefan.huberdoc.at/comp/software/tngen.html kann dafür verwendet
werden. Aber das beantwortet deine Frage nicht.

Als erstes würde ich dirin jedem Fall nahelegen, eine Resampling-Unit zu
verwenden. Ich hab eine, die dereinst von Anders Melander portiert wurde
auf meiner Webseite verlinkt, da seine ursprüngliche nicht mehr existiert
(siehe obiger Link).

Damit erhältst du schönere Bilder als mit den Bordmethoden von Delphi.
Post by Florian Bäthge
Als drittes Eingabefeld sollte angegeben werden, wie lang die längste
Seite sein soll.
Also bei Thumbs z.B. 200px.
Das ist einfachere Mathematik.
Post by Florian Bäthge
Evtl. wäre es auch noch gut, unten rechts so eine Art Watermark
einzubinden, zumindest die Internetadresse unserer Webseite. Aber das
ist wirklich nicht wichtig. Hauptsache verkleinern...
Das kann ich nicht mit meinem Programm. Wäre aber eine nette Erweiterung.
Post by Florian Bäthge
Oder gibt es solche Programme irgendwo kostenlos zum downloaden? Dann
muss ich es nicht selbst schreiben. Es geht mir nur darum, den Leuten,
die die
Bilder hochladen sollen, das ganze zu vereinfachen
Dann geht mein Programm vielleicht doch :) Eventuell stell ich es wirklich
mal open source. Aber der Code ist so schirrch, dass ich mich eigentlich
nicht trau, ihn herzuzeigen: Das war ein Werk, wo ich mich erstmals
wirklich mit UI und Grafik beschäftigt hab...Und neu schreiben will ichs
nicht.

Stefan
--
The voice said: "smile, it could be worse!" --- I smiled.
And it became worse.
Andreas Koch
2006-05-29 20:32:57 UTC
Permalink
Post by Florian Bäthge
Das Problem ist nur, ich habe keine Ahnung, wie ich diese Bilder bearbeite.
Und wie kriege ich die erstmal geladen und schließlich gespeichert. Bin noch
am Lernen in Delphi. Ich kann zwar einen OpenDialog einbauen, aber wie kann
man dort mehrere Dateien laden?
Ein paar Stichworte:

uses jpeg;
tjpegimage.loadfromfile
tbitmap.assign(tjpegimage)
tbitmap.canvas.stretchdraw
tbitmap.canvas.textout
tjpegimage.assign(tbitmap)
tjpegimage.savetofile

Wenn dir die Qualität die Stretchdraw produziert nicht reicht, musst
du dir eine Routine für Antialiasing schreiben (bitmap.canvas.pixels,
Mittelwert errechnen) oder suchen...
Joachim Duerr
2006-05-30 07:06:11 UTC
Permalink
Post by Florian Bäthge
Dann soll das Bild so vekleinert werden, dass die größere Seite
gleich dem Maximumwert aus dem Eingabefeld ist.
unit jpgutils;

interface

uses sysutils,types,graphics,jpeg;

procedure ResizeJpeg(jpg: TJPEGImage; maxdim:integer);

implementation

procedure ResizeJpeg(jpg: TJPEGImage; maxdim:integer);
var
bmp: TBitmap;
rect: TRect;
begin
bmp := TBitmap.Create;
try
if jpg.Width>jpg.Height
then begin
bmp.Width:=maxdim;
bmp.Height:=(maxdim*jpg.Height) div jpg.Width;
end
else begin
bmp.Height:=maxdim;
bmp.Width:=(maxdim*jpg.Width) div jpg.Height;
end;
rect.Top:=0;
rect.Left:=0;
rect.Right:=bmp.Width;
rect.Bottom:=bmp.Height;
bmp.Canvas.StretchDraw(rect,jpg);
jpg.Assign(bmp);
finally
FreeAndNil(bmp);
end;
end;

end.
--
Joachim Dürr
Senior Product Support Analyst (Advantage Database Server)
iAnywhere Solutions / Extended Systems
Advantage[at]extendsys.de
Joachim Duerr
2006-05-30 07:08:03 UTC
Permalink
Post by Florian Bäthge
Dann soll das Bild so vekleinert werden, dass die größere Seite
gleich dem Maximumwert aus dem Eingabefeld ist.
oder gleich auf der Webseite in PHP:

function resizejpg($src,$dst,$max)
{

$src_img=ImagecreateFromJpeg($src);

$oh = imagesy($src_img); # original height
$ow = imagesx($src_img); # original width

$new_h = $oh;
$new_w = $ow;

if($oh > $max || $ow > $max)
{
$r = $oh/$ow;
$new_h = ($oh > $ow) ? $max : $max*$r;
$new_w = $new_h/$r;
}
$dst_img = ImageCreateTrueColor($new_w,$new_h);

ImageCopyResized($dst_img, $src_img, 0,0,0,0, $new_w, $new_h,
ImageSX($src_img), ImageSY($src_img));

ImageJpeg($dst_img, $dst);
}
--
Joachim Dürr
Senior Product Support Analyst (Advantage Database Server)
iAnywhere Solutions / Extended Systems
Advantage[at]extendsys.de
Norbert Melzer
2006-05-31 17:58:03 UTC
Permalink
Post by Florian Bäthge
Dann soll das Bild so vekleinert werden, dass die größere Seite
gleich dem Maximumwert aus dem Eingabefeld ist.
Könnte zu Problemem führen wenn die max Upload Filesize zB auf 1 MB
steht, das Bild aber mal eben 1,5 MB, so wie es auf der Kamera meiner Ex
schon bei _niedrigster_ Auflösung standard ist...

MFG
Norbert
Joachim Duerr
2006-06-01 06:57:53 UTC
Permalink
Post by Norbert Melzer
Könnte zu Problemem führen wenn die max Upload Filesize zB auf 1 MB
steht, das Bild aber mal eben 1,5 MB, so wie es auf der Kamera meiner
Ex schon bei niedrigster Auflösung standard ist...
für diesen Fall habe ich mir einen Importer geschrieben: Dateien
einfach per FTP in ein Verzeichnis auf dem Webserver und dann ein
Script aufrufen, welches das Importverzeichnis durchsucht, die
Bildgröße justiert für die normale Anzeige, eine Vorschau erstellt,
das Ganze in das richtige Verzeichnis verschiebt und in der
zugrundeliegenden DB die Bilder in das entsprechende Album aufnimmt.
Aber das wird hier langsam OT;)
--
Joachim Dürr
Senior Product Support Analyst (Advantage Database Server)
iAnywhere Solutions / Extended Systems
Advantage[at]extendsys.de
Florian Bäthge
2006-06-16 18:56:55 UTC
Permalink
richtig... mein Ziel ist es ja, uploadzeiten zu verkürzen... deswegen will
ich es schon vorher verkleinern. Mit PHP kriegi ch das auch problemlos hin,
nur muss ich es ja dazu theoretisch hochladen, was auch dauert... :)
und die Leute, die hochladen sollen, haben nunmal nicht alle PHP offline auf
dem rechner installiert und könnten das so machen...

Naja, ich nehm jetzt erstmal die Batch-Konvertierung von IrfanView... Wieso
soll ich das Rad denn neu erfinden? :D

Bei Gelegenheit mache ich das aber mal selbst... :)

Danke!
--
ciao,
Florian Bäthge (evident)
***@baethge.com
http://www.florian.baethge.com
Lesen Sie weiter auf narkive:
Loading...