Thread Bild zentriert einpassen (2 answers)
Opened by pktm at 2012-05-22 21:46

pktm
 2012-05-22 23:09
#158486 #158486
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Wow, ich musste gerade ganzschön grübeln, aber ich glaube, ich habe es verstanden :D

Vorab: richtig, bei einem Faktor > 1 wird das Bild vergrößert.

Allerdings klappt der Ansatz nicht, wenn das Bild höher als breit ist.
Beispiel:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub min($$){ $_[0]<$_[1]?$_[0]:$_[1] };

my $app_w = 400;
my $app_h = 300;

my $image_w = 200;
my $image_h = 600;

my $y_scale = $app_w / $image_w;
my $x_scale = $app_h / $image_h;

my $factor = min $app_w,$app_h / min $image_w,$image_h;

printf("xs: %s, ys: %s, factor: %s", $x_scale, $y_scale, $factor);


Ausgabe:
Quote
xs: 0.5, ys: 2, factor: 1.5


Das Bild müsste um den Faktor 2 skaliert werden (also vergrößert). Die Methodik liefert aber 1,5.

Ich habe mittlerweile diesen Ansatz:
Ich errechne beide Faktoren, schaue welcher größer ist und dann weiß ich, nach welcher Seite ich skalieren muss (ich hoffe, ich hab's jetzt nicht wieder verdreht):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
my $app_w = 400;
my $app_h = 300;

my $image_w = 600;
my $image_h = 200;

my $y_scale = $app_w / $image_w;
my $x_scale = $app_h / $image_h;

if( $y_scale > $x_scale ) {
print "scale on x axis(scale y < scale x ==> $y_scale < $x_scale)\n";
printf("y-axis overlap: %s\n", int(int($image_h - $app_h) / 2));

}elsif( $y_scale < $x_scale ) {
print "scale on y axis(scale y < scale x ==> $y_scale < $x_scale)\n";
printf("x-axis overlap: %s\n", int(int($image_w - $app_w) / 2));

}else{
print 'doesn\'t matter, it will fit. It has the same aspect ratio as the window.';
}


Edit: da war ich zu langsam, du hast es vorher schon gesehen :D
Last edited: 2012-05-22 23:10:46 +0200 (CEST)
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Bild zentriert einpassen