proportional skalieren auf eine feste Seitenlänge

volare

Mitglied
Registriert
17.10.03
Beiträge
104
Ort
München
Trophäen
* * * ! ! {**}
Hallo zusammen,

ich habe bei der Abifeier meiner Tocher viele Aufnahmen gemacht,Bilder bearbeitet,Bildkanten beschnitten und weiterhin optimiert mit FF.
Kann man per Stapel oder Script die Größe des Bildes so ändern,dass die längste Seite des bearbeiteten Bildes immer 800 pix beträgt und die Kürzere dazu immer proportional ergänzt wird,oder muss man das per "Fuß" ;D erledigen ?

Gruß

Christian



(Anmerkung: Betreff abgeändert für die Suchefunktion)
 
Re:Größe ändern

Skripte->Skalieren->Cropper im Zubehörbereich müsste das Passende sein.
 
Re:Größe ändern

Hallo Joachim,

danke für die Information,leider kann ich mit diesem Script in Bezug auf meine Frage nichts anfangen,
vielleicht verstehe ich es auch nicht ??? ??? ???


Gruß

Christian
 
Re:Größe ändern

Irrtum meinerseits. Probier mal dieses JScript:
Code:
//FFSubmenu=Skalieren
//FFName=Skalieren & Komprimieren

var fso = new ActiveXObject("Scripting.FileSystemObject");
var dlg = "Skalieren & Komprimieren";
FF_AddDialog(dlg,120,44);
var widtht = new Control("Breite:","STATIC",2,2,20,11);
var width = new Control("Breite","EDIT",24,3,20,9);
var heightt = new Control("Höhe:","STATIC",70,2,20,11);
var height = new Control("Höhe","EDIT",94,3,20,9);
var compt = new Control("Kompression (1-100):","STATIC",36,16,56,11);
var comp = new Control("Kompression","EDIT",94,17,20,9);
var action = new Control("Ausführen","BUTTON",2,30,50,11);
FF_ActivateControl(dlg,width.name);
FF_SetControl(dlg,width.name,"800");
FF_SetControl(dlg,height.name,"600");
FF_SetControl(dlg,comp.name,"80");

for(;;)
   {
   var result = FF_ShowDialog(dlg);
   switch(result)
      {
      case action.name:      Scale();
      default:            result = "CANCEL"; break;
      }
   if(result == "CANCEL") break;
   }
FF_CloseDialog(dlg);

function Scale()
   {
   var   i,cnt=FF_GetImageCount();
   var   name,parts,oxs,oys,sxs,sys,c;

   sxs = parseInt(width.Get()); sys = parseInt(height.Get()); c = comp.Get();
   if(sys > sxs) {i = sxs; sxs = sys; sys = i;}
   for(i=0; i<cnt; i++)
      {
      FF_SetProgress(i,cnt-1);
      name = FF_GetImageName(i);
      if(!FF_LoadImage(name)) continue;
      oxs = FF_GetImageWidth(); oys = FF_GetImageHeight();
      if(oxs > oys) FF_HQScale(sxs,sys,true);
      else FF_HQScale(sys,sxs,true);
      parts = SplitPath(name);
      oxs = FF_GetImageWidth(); oys = FF_GetImageHeight();
      name = parts.dir + parts.file + "-" + oxs + "x" + oys + ".jpg";
      FF_SaveImage(name,c);
      }
   }
   
function Control(name,type,x,y,w,h,style)
   {
   this.name = name;
   FF_AddControl(dlg,name,type,x,y,w,h);
   if(style != 0) FF_SetControlStyle(dlg,name,style);

   this.Set = function(val) {FF_SetControl(dlg,this.name,val);}
   this.Get = function() {return FF_GetControl(dlg,this.name);}
   }

// liefert Verzeichnis mit abschließendem Backslash,
// Dateinamen und Erweiterung mit einleitendem Punkt
function SplitPath(path)
   {
   var   result = new Object();
   result.dir = fso.GetParentFolderName(path) + "\\";
   result.file = fso.GetBaseName(path);
   result.ext = "." + fso.GetExtensionName(path);
   return result;
   }
 
Re:Größe ändern

Hallo Joachim,

das wunderbare Skript weckt Wünsche für Nichtskripter.
Idee eins: Tif wird wieder als Tif gespeichert (e.g. png)
Ein neuer Unterordner für die Umgeformten kann angegeben werden; das spart auseinanderfieseln für Faulpelze wie mich...


Rabe
 
Re:Größe ändern

Die Beschäftigung mit der Zeile vor FF_SaveImage() macht den Nichtskripter schnell zum Skripter. Z.B. ".jpg" austauschen gegen parts.ext
 
Re:Größe ändern

Danke :)

Rabe
 
Re:Größe ändern

Hi Stefan

Ich denke das FF_SaveImage() die Dateien in dem Format speichert, wie sie als Dateiendung angegeben sind. .jpg schreibt JPEG, .tif schreibt Tiffdateien.

Und wenn man die Zeile:

Code:
name = parts.dir + parts.file + "-" + oxs + "x" + oys + ".jpg";

zu

Code:
name = parts.dir + parts.file + "-" + oxs + "x" + oys + parts.ext;

verändert, so werden die Bilder im ursprünglichen Format gespeichert.
 
Hallo Björn,

danke für den Hinweis. Ist natürlich blöd (von mir), wenn man nur mit jpg-Bilder testet. Ich hatte ein Eingabe- bzw. Auswahlfeld erwartet, was natürlich nicht kam.
Alles klar jetzt, das Script arbeitet einwandfrei und so wie von Rabe gewünscht.

Danke und Gruß
Stefan
 
Hallo Joachim,

spitze :D :D

genau dieses hatte ich mir vorgestellt,danke für die schnelle Lösung meines Problemes :)



Gruß

Christian
 
Ganze Verzeichnisse konvertieren

Meine Tochter (7J.) hat einen kleinen alten Laptop mit nur 4GB und möchte jetzt ihre eigenen Fotos darauf anschauen (Wer Kinder hat und nicht ständig um seine DigiCam kämpfen will, sollte sich mal mit der Sony U 60 beschäftigen: endlich keine Sorgen mehr am Strand, im Regen, am Pool etc. - ein geniales Teil).

Zurück zum Thema: ich möchte ihr dafür unsere Bilder von 5 M-Pixel Auflösung verkleinern für Ihren Bildschirm, d.h. auf max. 1024x768, das reicht ja zum Angucken.

Ich wüsste, wie ich das mit Irfanview mache, möchte aber gern bei FF bleiben. Frage also: wie geht das?

Am liebsten würde ich das Verzeichnis angeben, sagen "verkleinere alle Bilder hier und in den Verzeichnissen darunter und speichere in einem anderen Pfad"

Mit herzlichem Dank für Eure Unterstützung (ich bin sicher, die kommt) im voraus!

Herby
 
Re:Ganze Verzeichnisse konvertieren

Hallo Herby,

Ist eigentlich ganz einfach:

1. Das gewünschte Verzeichnis öffnen
2. Mit Ctrl-A alle Bilder markieren (ggf. mit Strg + LMT Einzelbilder abwählen)
3. Datei -> Stapelverarbeitung

4. Button "Größe verändern" -> Gewünschtes Format einstellen
5. ggf. weitere Änderungen vornehmen (Name etc.)

6. Wichtig: Zielverzeichnis unter dem "Buttonfeld" auswählen

7. Ausführen


Ich würde das beim ersten Mal mit einem Testverzeichnis probieren, damit Du sicher bist das Richtige zu tun.


Viel Spaß


Thorsten
 
Re:Ganze Verzeichnisse konvertieren

Ja, aber die Unterverzeichnisse,

ich habe einige hundert Ordner. Meine Hoffnung wäre, die in einem Rutsch durchzukriegen!

Kann ich nicht irgendwo anklicken "Mit Unterverzeichnissen"?

Aber: viel wichtiger noch: wie erreiche ich, dass die Bilder proportional bleiben, wenn ich bei Bildgröße ändern, 1024 und 768 angebe und das Häkchen bei "proportional" anklicke, so werden mir auch hochkant Bilder im 2:3 Format zu 768*1024 konvertiert, werden also verzerrt und sind größer als der Bildschirm.

Ich würde mir aber wünschen, dass FF das Format beibehält und bei 768:512 landet, das würde den Bildschirm richtig ausnutzen und das Verhältnis 2:3 bewahren.

Das macht FF jedoch nur, wenn ich mit einem Bild im Verhältnis 2:3 starte. Nach dem ersten Bild richten sich die Proportionen aller weiteren Bilder.

Irgendwelche Ideen?

Danke!

Herby
 
Re:Ganze Verzeichnisse konvertieren

Hallo Herby,

ich mag jetzt völlig falsch liegen, aber ich war bisher immer der Ansicht, daß Computerbildschirme ein 4:3-Format besitzen. Deshalb auch 1024x768, 800x600 oder 640x480 Pixel.

Schönen Gruß,

Martin
 
Re:Ganze Verzeichnisse konvertieren

Nö, da liegst du nicht richtig.

Ich sitze zum Beispiel im Moment vor einem senkrecht gedrehten mit 1024 (breit) x 1280 (hoch). Darauf läuft im unteren Bereich FF (und andere Programme) mit den üblichen 1024x768 und oben habe ich Platz für einen Fernsehmonitor und meine wichtigsten Desktop-Icons.

Aber das nur am Rande ;)

Der Monitor meiner Tochter ist natürlich nur klassisch im 4:3 (1024 x 768) Format. Wenn ich jetzt aber ein gedrehtes Hochkant-Bild im 2:3 Format anzeigen will würde ich gern die maximale Höhe des Monitors (768) ausnutzen, da bleibt dann für die Breite nur 512 übrig. Also 2 dicke schwarze Balken links und rechts. Ein Hochkant-Bild auf breitem Monitor halt.

Herzlichen Gruß,

Herby
 
Re:Ganze Verzeichnisse konvertieren

Herby schrieb:
Aber: viel wichtiger noch: wie erreiche ich, dass die Bilder proportional bleiben, wenn ich bei Bildgröße ändern, 1024 und 768 angebe und das Häkchen bei "proportional" anklicke, so werden mir auch hochkant Bilder im 2:3 Format zu 768*1024 konvertiert, werden also verzerrt und sind größer als der Bildschirm.

[...]

Irgendwelche Ideen?

Ich habe das Problem per Script gelöst. Ich gebe nur noch an, wie lang die längste Seite eines Bildes sein soll, den Rest erledigt das Script. Durch minimale Abänderung des Scripts kann man auch erreichen, daß z. B. die Bildhöhe immer konstant bleibt und je nach Format nur die Bildbreite variiert wird.

Code:
pixel = 640
breite = FF_GetImageWidth()
hoehe = FF_GetImageHeight()
asprat = breite/hoehe
if asprat > 1 then
   call FF_HQScale(pixel,pixel/asprat,true)
elseif asprat < 1 then
   call FF_HQScale(pixel*asprat,pixel,true)
elseif asprat = 1 then
   call FF_HQScale(pixel,pixel,true)
end if

Das Ergebnis des obigen Scriptes: Alle Querformat-Bilder werden auf 640*427 Pixel (Format 3:2) skaliert, alle Hochformat-Bilder auf 427*640 Pixel.
 
Re:Ganze Verzeichnisse konvertieren

Hallo,

Script, das war das Stichwort. Das Problem war schon mal dagewesen:
[POST]22277[/POST]

Hier das JScript von Joachim, das bei mir wunderbar läuft:
Code:
//FFSubmenu=Skalieren
//FFName=Skalieren & Komprimieren

var fso = new ActiveXObject("Scripting.FileSystemObject");
var dlg = "Skalieren & Komprimieren";
FF_AddDialog(dlg,120,44);
var widtht = new Control("Breite:","STATIC",2,2,20,11);
var width = new Control("Breite","EDIT",24,3,20,9);
var heightt = new Control("Höhe:","STATIC",70,2,20,11);
var height = new Control("Höhe","EDIT",94,3,20,9);
var compt = new Control("Kompression (1-100):","STATIC",36,16,56,11);
var comp = new Control("Kompression","EDIT",94,17,20,9);
var action = new Control("Ausführen","BUTTON",2,30,50,11);
FF_ActivateControl(dlg,width.name);
FF_SetControl(dlg,width.name,"800");
FF_SetControl(dlg,height.name,"600");
FF_SetControl(dlg,comp.name,"80");

for(;;)
   {
   var result = FF_ShowDialog(dlg);
   switch(result)
      {
      case action.name:      Scale();
      default:            result = "CANCEL"; break;
      }
   if(result == "CANCEL") break;
   }
FF_CloseDialog(dlg);

function Scale()
   {
   var   i,cnt=FF_GetImageCount();
   var   name,parts,oxs,oys,sxs,sys,c;

   sxs = width.Get(); sys = height.Get(); c = comp.Get();
   if(sys > sxs) {i = sxs; sxs = sys; sys = i;}
   for(i=0; i<cnt; i++)
      {
      FF_SetProgress(i,cnt-1);
      name = FF_GetImageName(i);
      if(!FF_LoadImage(name)) continue;
      oxs = FF_GetImageWidth(); oys = FF_GetImageHeight();
      if(oxs > oys) FF_HQScale(sxs,sys,true);
      else FF_HQScale(sys,sxs,true);
      parts = SplitPath(name);
      oxs = FF_GetImageWidth(); oys = FF_GetImageHeight();
      name = parts.dir + parts.file + "-" + oxs + "x" + oys + parts.ext;
      FF_SaveImage(name,c);
      }
   }
   
function Control(name,type,x,y,w,h,style)
   {
   this.name = name;
   FF_AddControl(dlg,name,type,x,y,w,h);
   if(style != 0) FF_SetControlStyle(dlg,name,style);

   this.Set = function(val) {FF_SetControl(dlg,this.name,val);}
   this.Get = function() {return FF_GetControl(dlg,this.name);}
   }

// liefert Verzeichnis mit abschließendem Backslash,
// Dateinamen und Erweiterung mit einleitendem Punkt
function SplitPath(path)
   {
   var   result = new Object();
   result.dir = fso.GetParentFolderName(path) + "\\";
   result.file = fso.GetBaseName(path);
   result.ext = "." + fso.GetExtensionName(path);
   return result;
   }

Problem dabei: die skalierten Bilder werden im gleichen Ordner abgespeichert. Sie können jedoch leicht über den Explorer/Sorterung nach Dateigröße in einem Rutsch markiert und wo anders hin verschoben werden. Eine Konvertierung von Verzeichnissen einschl. Unterverzeichnissen ist mir nicht bekannt.

Gruß
Stefan
 
Hallo!

Damit das mit Unterverzeichnissen funktioniert, muß man eine Bilderliste anlegen, siehe Bedienungsanleitung. ;)

Gruß,

Ralf
 
Zurück
Oben