Bild immer gleich groß

proloser

Erfahrenes Mitglied
Hallo,

ich brauche eine Möglichkeit mit der ich erreiche damit meine Bilder immer auf die selbe größe geschnitten werden.
Ich verwende bereits Thumbnails, allerdings wird die Breite auf eine fixe größe gebracht und die Höhe verhältnis gemäß angepasst.

Meine Bilder sollten zB 60 x 80 groß sein, nun sollte das Bild auch genau 60 x 80 haben, wenn es sich nicht ausgeht wird der teil vom Bild einfach weggeschnitten damit es sich vom Verhälnis ausgeht.

Wie mach ich so etwas am besten?

Bisschen schwer zu erklären aber ich denke Ihr wisst was ich meine :rolleyes:

MfG proloser
 
Thumbnails ist schon richtig, du musst die umrechnung halt so umbauen, dass
1. WENN höhe > breite DANN die höhe auf 60px und die breite anpassen
2. WENN breite > höhe DANN breite auf 60px und höhe anpassen.
dann um alle bilder einen <div> mit 60*60px größe ziehen und alle pics sind gleichgroß...

gruß
 
Wie meinst das mit dem <div> und 60 x 60?

So hab ichs jetzt, allerdings schneidet der nichts weg und passt das bild eben auf die Höhe an.

PHP:
      $bilddaten = getimagesize($profil_foto);
      $org_breite = $bilddaten[0];
      $org_hoehe = $bilddaten[1];
      
      $thumb_breite = 60;

      if($org_breite < $thumb_breite) { $thumb_breite = $org_breite; }

      $faktor = $org_breite / $thumb_breite;
      $thumb_hoehe = intval($org_hoehe / $faktor);
    
 
      $thumb_hoehe = 80;

      if($org_hoehe < $thumb_hoehe) { $thumb_hoehe = $org_hoehe; }

      $faktor = $org_hoehe / $thumb_hoehe;
      $thumb_breite = intval($org_breite / $faktor);
 
Zuletzt bearbeitet:
Genau so etwas brauch ich, weiss aber nicht wirklich wie ich das am besten umsetze :rolleyes:

Nehmen wir an du hast ein 400 mal 300 Pixel großes bild (breite mal höhe) - also Querformat, da das Bild breiter als hoch ist.
du musst also dafür sorgen, ersteinmal ein 300*300 großen Teil auszuschneiden (du willst ja möglichst wenig verlust haben).
Nun ermittelst du die Differenz zwischen neuer breiter und alter breite (400-300=100).
Damit gehen 100 Pixel verloren (in der Breite).
Am besten, sollten diese links und rechts je zur Hälfte verloren gehen, nicht wahr?
Also 50 Pixel Links, 50 Pixel rechts.

Nun fängst du also an. Du schneidest entlang der x-Achse ab dem 51. Pixel genau 300 Pixel aus (auf einer Höhe von 300 Pixeln).
Nun hast du temporär ein quadratisches Bild. Dieses machste nun noch ganz einfach zu einem Thumbnail und - ta da, du hast ein schoenes immer gleich bleibendes Thumbnailformat.
 
PHP:
      $bilddaten = getimagesize($profil_foto);
      $org_breite = $bilddaten[0];
      $org_hoehe = $bilddaten[1];
      
      $thumb_breite = 60;

      if($org_breite < $thumb_breite) { $thumb_breite = $org_breite; }

      $faktor = $org_breite / $thumb_breite;
      $thumb_hoehe = intval($org_hoehe / $faktor);
    
      $thumb_hoehe = 80;

      if($org_hoehe < $thumb_hoehe) { $thumb_hoehe = $org_hoehe; }

      $faktor = $org_hoehe / $thumb_hoehe;
      $thumb_breite = intval($org_breite / $faktor);

OK, hier mal meine Version:

PHP:
$max = 80;
$tmp= GetImageSize($image);
$altWidth  = $tmp[0];
$altHeight = $tmp[1];						

if ($altWidth > $altHeight) {
	$neuWidth = $max;
	$neuHeight = ($neuWidth/ $altWidth) * $altHeight;
} else  {
	$neuHeight = $max;
	$neuWidth = ( $neuHeight / $altHeight) * $altWidth;
}
Und im HTML-Code:
Code:
<div style="width: 80px; height: 80px; vertical-align: center; text-align: center">
<img src="thumbnailimg.jpg">
</div>

@ proloser: Dabei wird das Bild aber ja abgeschnitten... Das macht bei den wenigsten Bilder Sinn...
 
Zuletzt bearbeitet:
Das Problem ist ich habe viele Profilfotos die untereinander aufgelistet werden, wenn da alle verschieden hoch sind sieht das ziehmlich beschissen aus, es ist also egal wenn die seiten abgeschnitten werden, denn das orginal Bild ist im Profil dann sowieso zu sehen.

Bei deiner Lösung hab ich ja dann das Problem damit das Bild verzerrt wird ...
 
Zuletzt bearbeitet:
Nene wird es nicht, die Größen werden genau umberechnet :)

Code:
(der rahmen außen rum ist der <div>)
++++++++++++
|          |
|----------|
|          |
|          |
|----------|
|          |
++++++++++++

oder

++++++++++++
|  |    |  |
|  |    |  |
|  |    |  |
|  |    |  |
|  |    |  |
|  |    |  |
++++++++++++
(tolle grafik :))
 
So hab ichs jetzt, allerdings verhaltet sich das ganze gleich wie ich es schon hatte, eine Seite vom Bild wird der anderen angepasst.

PHP:
<?php 

$max = 80;
$tmp= GetImageSize("bild.jpg");
$altWidth  = $tmp[0];
$altHeight = $tmp[1];                        

if ($altWidth > $altHeight) {
    $neuWidth = $max;
    $neuHeight = ($neuWidth/ $altWidth) * $altHeight;
} else  {
    $neuHeight = $max;
    $neuWidth = ( $neuHeight / $altHeight) * $altWidth;
}  

$Originalgrafik = ImageCreateFromJPEG("bild.jpg");
$Thumbnailgrafik = ImageCreateTrueColor($neuWidth, $neuHeight);
ImageCopyResampled($Thumbnailgrafik, $Originalgrafik, 0, 0, 0, 0, $neuWidth, $neuHeight, $altWidth, $altHeight);
ImageJPEG($Thumbnailgrafik, "bild.jpg");

?>
      
<div style="width: 80px; height: 80px; vertical-align: center">
<img src="bild.jpg">
</div>




EDIT:

Ich brauche also so etwas:

1181220272.jpg

Es soll einfach von der mitte des Bildes zB 80 x 80 ausschneiden!
 
Zuletzt bearbeitet:
Schon mal imagecopy() angeguckt?
Anhand deiner obigen Methode kannst du ja die Differenz ausrechnen und so an die Bildmitte kommen, und dann hiermit ausschneiden...

So, bittee schön:
PHP:
// geht natürlich so nur wenn bild auf jeden fall größer als 80*80..

$path = "path_to_image.jpg";
$clip = 80;

$image_old = imagecreatefromjpeg($path);

// Alte Größen ermitteln
$size = getimagesize($path);
$altWidth = $size[0];
$altHeight = $size[1];

$image_new = imagecreatetruecolor($clip, $clip);

// Abzuschneidendes ermitteln
$difWidth  = $altWidth - $clip;
$difHeight = $altHeight - $clip;

// Auschnitt in neues Bild kopieren
imagecopy($image_new, $image_old, 0, 0, ($difWidth / 2), ($difHeight / 2), $clip, $clip);

imagejpeg($image_new);
 
Zuletzt bearbeitet:
Zurück