Schrift
[thread]9212[/thread]

PerlMagick: Gleichgroße Bilder

Leser: 3


<< >> 10 Einträge, 1 Seite
Froschpopo
 2007-07-20 22:34
#78725 #78725
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich hab ne menge Bilder.
Nun will ich Thumbs erstellen die aber alle gleich groß sind.
Die Originale haben allerdings unterschiedliche Größen.
Die Thumbs sollten deshalb den mittleren Teil des Bildes anzeigen, so wie http://singles.freenet.de/ es auf der startseite mit den Userbildern macht.
GwenDragon
 2007-07-21 00:07
#78726 #78726
User since
2005-01-17
14554 Artikel
Admin1
[Homepage]
user image
Und was für ein Problem hast du jetzt mit PerlMagick genau?
Was hat du schon probiert?
die Drachin, Gwendolyn


Unterschiedliche Perl-Versionen auf Windows (fast wie perlbrew) • Meine Perl-Artikel

sid burn
 2007-07-21 00:45
#78727 #78727
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/perl
use warnings;
use strict;
use Image::Magick;

my $filename = shift;
my $target = $filename;
$target =~ s/(\..*)$/_thumb$1/;


my $image = new Image::Magick;

$image->Read( $filename );
$image->Scale( '320x200' );

$image->Write( $target );


Hmm, ich verstehe den Sinn nicht dahinter den "mittleren Teil" anzeigen zu lassen.

Das obere Skript liest einfach einen Dateinamen als Argument und erzeugt ein maximal 320x200 großes Thumbnail. (Originalname + _thumb vor dem letzten Punkt im Dateinamen) Maximal deswegen weil die Seitenverhältnise beigehalten werden.

Wie groß das Bild letztendlich selber ist, spielt doch keine Rolle!?

P.S.:
Tut mir leid. Ich habe auf Froschpopos Kommentar geantwortet und gegen die Perl Regeln verstoßen. Bitte Peitscht mich aus. :'(\n\n

<!--EDIT|sid burn|1184964393-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2007-07-21 00:45
#78728 #78728
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich erzeuge ein Thumb:
Code: (dl )
$image->Thumbnail(geometry => 'geometry', width=>100, height=>100);

Das Problem ist, dass er das ganze Bild mit unveränderten Proportionen verkleinert. Kurz gesagt: z.b. ein breites Panoramabild wird zerquetscht.
sid burn
 2007-07-21 00:52
#78729 #78729
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
@Froschpopo

Das liegt daran das du mit width => xxx und height => xxx direkt Werte angibst wenn du.

Code: (dl )
$image->Thumbnail('100x100');


schreibst, dann behält das Bild seine Proportionen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2007-07-21 01:01
#78730 #78730
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
doch, es spielt eine Rolle. Das Bild muss 100x100 Pixel groß sein.
Mit Maximalwerten kann ich nichts anfangen.
Schau nochmal auf http://singles.freenet.de dort sind alle Bilder Rechteckig.
Der rest wird offensichtlich weggeschnitten. Ich schätze mal, dass der sichtbare Teil genau die Mitte des Bildes ist.

habe dasselbe eben nochmal bei Kwick gefunden:
http://www.kwick.de/Bombe77
Schaut euch das Bild von dem Typen an. Und dann klickt es mal zur Vergrößerung an. Dann werdet ihr sehen, welcher Teil im Thumb weggeschnitten wurde.\n\n

<!--EDIT|Froschpopo|1184966643-->
sid burn
 2007-07-21 02:01
#78731 #78731
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl
use warnings;
use strict;
use Image::Magick;

my $filename = shift;
my $target   = $filename;
   $target =~ s/(\..*$)/_thumb$1/;

my $image = new Image::Magick;

$image->Read( $filename );
my ($width, $height) = $image->get('width', 'height');

if ( $width > $height ) {
    my $diff = $width - $height;
    $width -= $diff;
    my $xoffset = ( $diff / 2 );
    $image->Crop( geometry => "${width}x$height+$xoffset+0" );
}
else {
    my $diff = $height - $width;
    $height -= $diff;
    my $yoffset = ( $diff / 2 );
    $image->Crop( geometry => "${width}x$height+0+$yoffset" );
}

$image->Scale( width => 100, height => 100 );
$image->Write( $target );


Extra ohne Kommentare! ;)
Verstehen musst es jetzt selber. ;)

P.S.: Aber vielleicht gibt es ja eine bessere Lösung, kenne mich mit Image::Magick auch nicht sooo super aus.\n\n

<!--EDIT|sid burn|1184968979-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2007-07-21 02:16
#78732 #78732
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ahaa interessant. Jetzt weiss ich wenigstens schonmal, dass ich Crop benötige . Das ist ja schonmal ein guter Schritt nach vorn.
sid burn
 2007-07-21 02:34
#78733 #78733
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=Froschpopo,21.July.2007, 00:16]ahaa interessant. Jetzt weiss ich wenigstens schonmal, dass ich Crop benötige . Das ist ja schonmal ein guter Schritt nach vorn.[/quote]
Was heißt nen guter Schritt nach vorne?

Das Stückchen Code schneidet entweder links und rechts gleichviel ab, wenn es in der Weite größer ist. Oder von oben und unten, wenn es höher als Weit ist.

Damit schneidest du letztendlich genau ein Rechteck aus der Mitte heraus welches anschließend auf 100x100 reduziert wird.

Das sieht nach deiner Aufgabenstellung wie die Ziellinie aus. *g* ;)\n\n

<!--EDIT|sid burn|1184971051-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
Froschpopo
 2007-07-21 02:46
#78734 #78734
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Super! Nochmal vielen Dank für die Inspiration! Funzt nämlich prima. DU bist ein naturtalent ;)
<< >> 10 Einträge, 1 Seite



View all threads created 2007-07-20 22:34.