[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: