Thread [Imager] Bild wird nicht rotiert? (0 answers)
Opened by GwenDragon at 2023-07-31 15:02

GwenDragon
 2023-07-31 15:02
#195212 #195212
User since
2005-01-17
14607 Artikel
Admin1
[Homepage]
user image
Modul CPAN: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
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl

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.

Code (perl): (dl )
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:
Code: (dl )
1
2
3
4
$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:
Code: (dl )
1
2
3
$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
image/jpeg
371 x 655
a-hoch.jpg
a-hoch.jpg

Last edited: 2023-09-25 09:58:08 +0200 (CEST)

View full thread [Imager] Bild wird nicht rotiert?