Re: Bilder qualitätsverlustfrei drehen?
Dirk Salva wrote:
hat hier jemand mal einen Tip für mich, wie ich Bilder von
Digitalkameras, welche im Hochformat gemacht wurden,
qualitätsverlustfrei drehen kann? Die Bilder liegen im .jpg-Format vor.
Mit gimp ergibt sich folgende Merkwürdigkeit:
Drehe ich dort die Bilder (Bild->Transformation->90°_rechts) und will
die dann hinterher abspeichern, so habe ich, wenn ich im Dialog "Als
jpeg speichern" als Qualität 85 nehme, kleinere Dateien als vorher.
Nehme ich 100, so habe ich um 1/3 größere Dateien als vorher.
Gibt es keine Möglichkeit, die Bilder verlustfrei zu drehen?
Ganz ohne Grössenänderung wird es nicht gehen. Digitalkameras speichern
im jpeg nebem dem eigentlichen Bild, oft noch ein Vorschaubild und ein
Thumbnail, dazu noch die EXIF-Informationen. Auch das angesprochene
exiftran angewandt auf ein Nikon D70 jpg resultiert in einer etwas
kleineren Datei.
$ exiftran -9 dsc_0132.jpg -o dsc_0132-turned.jpg
$ ls dsc_0132*.jpg -all
-rwxr-xr-x 1 helmut helmut 2655101 2006-06-03 15:52 dsc_0132.jpg
-rw-r--r-- 1 helmut helmut 2637841 2006-07-13 22:37 dsc_0132-turned.jpg
Wie vermutet, wirft exiftran das
Preview Image : (Binary data 27939 bytes)
weg. BTW ändert es auch die Grösse des Thumbnail.
Vielleicht, in dem ich dann sowieso sofort in .png abspeichere!?
png ist für Fotos nicht ideal.
Was willst Du bezwecken, was ist Dein Endprodukt?
Ich speicher die Bilder von der Kamera mal so ab, wie sie sind. Dort
bleiben sie unverändert.
Will ich sie weiter bearbeiten, dann mach ich ein tif draus.
Sollen sie unverändert auf eine Webseite, dann mache ich resize, drehen,
entfernen des EXIF-Ballastes in einem Arbeitsgang:
#!/usr/bin/perl -w
use Image::Magick;
use Image::ExifTool;
my $srcfile = "dsc0001.jpg";
my $destfile = "dsc001_web_auto.jpg";
my $filter = "Lanczos";
my $x;
my $maxlen = 450;
my $IM = Image::Magick->new(magick=>'jpg');
$x = $IM->Read($srcfile);
warn "$x" if "$x";
my $orig_width;
my $orig_height;
# resize
($orig_width, $orig_height) = $IM->Get('width','height');
if ( $orig_width > $orig_height ) {
my $new_width = $maxlen;
my $new_height = sprintf ("%f", ($new_width *
($orig_height/$orig_width)));
$x =
$IM->Resize(width=>$new_width,height=>$new_height,filter=>$filter);
}
else {
my $new_height = $maxlen;
my $new_width = sprintf ("%f", ($new_height *
($orig_width/$orig_height)));
$x =
$IM->Resize(width=>$new_width,height=>$new_height,filter=>$filter);
}
warn "$x" if "$x";
# extract Orientation from EXIF
# Orientation int16u IFD0
# 1 = Horizontal (normal)
# 2 = Mirror horizontal
# 3 = Rotate 180
# 4 = Mirror vertical
# 5 = Mirror horizontal and rotate 270 CW
# 6 = Rotate 90 CW
# 7 = Mirror horizontal and rotate 90 CW
# 8 = Rotate 270 CW
my @ioTagList = ('Orientation');
my $exifTool = new Image::ExifTool;
my $info = $exifTool->ImageInfo($srcfile, \@ioTagList);
my $orientation = $$info{'Orientation'};
print "Orientation: $orientation\n";
if ( $orientation =~ m/^Rotate (\d+)/ ) {
my $degrees = $1;
$x = $IM->Rotate($degrees);
warn "$x" if "$x";
}
$IM->Set(quality=>75);
$IM->Write($destfile);
warn "$x" if "$x";
undef $IM;
sub CleanJpg($);
CleanJpg($destfile);
sub CleanJpg($)
{
[...]
}
BTW: kennt jemand eine gute deutsche Seite mit Tips für gimp? Da sind
viel zu viele Einstellmöglichkeiten vorhanden, bei denen ich keine
Ahnung habe, ob die default-Einstellung wirklich optimal ist.
Hätte ich auch gern.
Helmut Wollmersdorfer
Reply to: