Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Bildverkleinerung

Empfohlene Antworten

Huhu allerseits,

ich arbeite gerade an einem recht umfangreichen kundenprojekt bei dem folgendes passieren soll:

ich habe eine definierte Fläche (Rahmen) in die ein Bild hineingeladen werden soll.

Sagen wir die Fläche ist 150x80 pixel groß.

Ich will jetzt ein Bild von der Größe 1024x768 in diesen Rahmen rein setzen.

also rechne ich den verkleinerungsfaktor anhand der längeren bildseite aus:

150/1024 = 0,146484375

Neue Breite ist also: 768*0,146484375 = 112,5

112,5 ist aber zu groß um in meinen Rahmen mit 80px Höhe rein zu passen.

Hat jemand eine Idee wir ich das Bild so resized kriege dass es in den Rahmen passt? Ich verzweifle da grad dran :(

mein aktueller code:


private function _resizeItemImage($image,$width,$height,$dest_width,$dest_height) {

if ( $height==$dest_height && $width==$dest_width ) {
return $image;
}

$dest = imagecreatetruecolor($dest_width,$dest_height);
$bg = imagecolorallocate ($dest, 255, 255, 255);
imagefill($dest, 0, 0, $bg);

if ( $height<$dest_height && $width<$dest_width ) {
// bild passt in den rahmen WORKS
$pos_x = round($dest_width/2 - $width/2);
$pos_y = round($dest_height/2 - $height/2);

imagecopy($dest,$image,$pos_x,$pos_y,0,0,$width,$height);
return $dest;
}

// bild ist irgendwo zu groß für den rahmen
if ( $height>$dest_height && $width<=$dest_width) {
// breite passt, wir müssen aber trotzdem runter rechnen, weil die höhe nicht passt
$factor = $dest_height/$height;
} elseif ($width>$dest_width && $height<=$dest_height ) {
// höhe passt, wir müssen aber trotzdem runter rechnen, weil die breite nicht passt
$factor = $dest_width/$width;
} else {

if ( $height > $width ) {
$factor = $dest_height/$height;
if ( ($width*$factor)>$dest_width ) {
// zielbild wird nicht passen, muss noch kleiner

}
} else {
$factor = $dest_width/$width;
}
}

$new_width = $width * $factor;
$new_height = $height * $factor;

$pos_x = round($dest_width/2 - $new_width/2);
$pos_y = round($dest_height/2 - $new_height/2);

imagecopyresampled($dest,$image,$pos_x,$pos_y,0,0,$new_width,$new_height,$width,$height);
header('Content-Type: image/jpeg');
imagejpeg($dest);
exit;

return $dest;

}
[/PHP]

die bildausgabe ist da testhalber drin ...

gruß

Jan

ich habe eine definierte Fläche (Rahmen) in die ein Bild hineingeladen werden soll.

Sagen wir die Fläche ist 150x80 pixel groß.

150x80 ist kein 4:3 Format. Kein Wunder dass 1024x768 sich nicht einfach so verkleinern läßt ;)

Allgemein: Bestimme das Verkleinerungsverhältnis für die Höhe und die Breite und prüf ob die Verkleinerung nach der Breite reicht, und wenn nicht (wie in deinem Beispiel) Verkleiner das Bild nach dem anderen Verhältnis.

Habs endlich hinbekommen:

Ich gucke ob die verkleinerten Dimensionen in die eine Richtung immer noch zu groß sind und rechne den faktor einfach nochmal runter.

trotzdem danke @JesterDay


private function _resizeItemImage($image,$width,$height,$dest_width,$dest_height) {

if ( $height==$dest_height && $width==$dest_width ) {
return $image;
}

$dest = imagecreatetruecolor($dest_width,$dest_height);
$bg = imagecolorallocate ($dest, 255, 255, 255);
imagefill($dest, 0, 0, $bg);

if ( $height<$dest_height && $width<$dest_width ) {
// bild passt in den rahmen WORKS
$pos_x = round($dest_width/2 - $width/2);
$pos_y = round($dest_height/2 - $height/2);

imagecopy($dest,$image,$pos_x,$pos_y,0,0,$width,$height);
return $dest;
}

// bild ist irgendwo zu groß für den rahmen
if ( $height>$dest_height && $width<=$dest_width) {
// breite passt, wir müssen aber trotzdem runter rechnen, weil die höhe nicht passt
$factor = $dest_height/$height;
} elseif ($width>$dest_width && $height<=$dest_height ) {
// höhe passt, wir müssen aber trotzdem runter rechnen, weil die breite nicht passt
$factor = $dest_width/$width;
} else {

if ( $height > $width ) {
$factor = $dest_height/$height;
if ( ($width*$factor)>$dest_width ) {
// zielbild wird nicht passen, muss noch kleiner
$factor = $factor * (($width*$factor)/$dest_width);
}
} else {
$factor = $dest_width/$width;
if ( ($height*$factor)>$dest_height ) {
// zielbild wird nicht passen, muss noch kleiner
$factor = $factor * ($dest_height/($height*$factor));
}
}
}

$new_width = $width * $factor;
$new_height = $height * $factor;

$pos_x = round($dest_width/2 - $new_width/2);
$pos_y = round($dest_height/2 - $new_height/2);

imagecopyresampled($dest,$image,$pos_x,$pos_y,0,0,$new_width,$new_height,$width,$height);

return $dest;
}

[/PHP]

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.