Modul
Imager 1.019
Ich versuche ein Bild zu rotieren, weil das Original per EXIF eine andere Orientierung hat.
Mein Testcase, ob das Rotieren überhaupt klappt:
Programm a.pl
Bild a-hoch.jpg
a.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use strict;
use warnings;
use 5.024;
use utf8;
use Imager;
my $img = Imager->new;
my $filename = shift;
my $angle = shift // 45;
$img->read( file => $filename ) or warn $img->errstr;
$img->rotate( degrees => $angle ) or warn $img->errstr;
$img->write( file => "ROT-" . $angle . "_" . $filename) or warn $img->errstr;
Ich rufe das Programm so auf:
a.pl a-hoch.jpg 30
und es erzeugt ROT-30-a-hoch.jpg
Aber das Bild ist dann trotzdem nicht um 30° rotiert.
Irgendeine Idee was ich falsch mache?
Getestet mit
Perl 5.32 / Linux Debian 11
Strawberry Perl 5.32 / Windows 11.
//EDIT 16:12
Selbst das klappt nicht mit einem lauft EXIF um 90° Uhrzeigersinn gedrehten Bild eine Smartphones.
1
2
3
4
5
6
7
8
9
10
11
12
use Imager;
my $img = Imager->new;
my $filename = shift;
my $angle = shift // 90;
die "Nur 90, 180 und 270 als Rotation im Unhrzeigersinn"
if ($angle !~ /^(90|270|180)$/);
$img->read( file => $filename ) or warn $img->errstr;
$img->rotate( right => $angle ) or warn $img->errstr;
$img->write( file => "ROT-" . $angle . "_" . $filename) or warn $img->errstr;
Was nun?
Kann doch nicht sein, dass sowas in heutiger Zeit nicht geht, ein Bild zu Drehen, um die richtige Ausrichtung zu haben.
//EDIT 17:20 Tja, wenn es eine Zuhause probiert, und dort perldoc und CPAN lesen kann.
Sieht so aus als wirke das rotate() nicht auf das $img-Objekt.
Stattdessen muss ich folgendes machen:
$img->read( file => $filename ) or warn $img->errstr;
my $img_rotated;
$img_rotated = $img->rotate( degrees => $angle ) or warn $img->errstr;
$img_rotated->write( file => "ROT-" . $angle . "_" . $filename) or warn $img_rotated->errstr;
Lesen bildet, aber nur wenn ich per Perldoc (nicht auf dem Rechner wo ich war) oder WWW (CPAN war heute gestört) dran komm.
Das vorherige geht kürzer:
$img->read( file => $filename ) or warn $img->errstr;
$img = $img->rotate( degrees => $angle ) or warn $img->errstr;
$img->write( file => "ROT-" . $angle . "_" . $filename) or warn $img->errstr;
Anhänge
Last edited: 2023-09-25 09:58:08 +0200 (CEST)