Beim Erstellen eines Homepage-Aufrufbilds ist es manchmal erforderlich, ein Bild mit fester Größe zu erhalten, da die Bildposition der Homepage normalerweise vom Designer festgelegt wird. Wenn das Bild der neuesten Version aufgerufen werden soll, ist nicht bekannt, was Daher gibt es manchmal keine Möglichkeit, den Anteil des Bildes zu bestimmen. Autoren von Frontend-Seiten verwenden normalerweise eine Methode zur Festlegung der Höhe und Breite des img-Elements, um zu verhindern, dass das Bild überläuft. Wenn die Proportionen des Bildes jedoch nicht den erforderlichen Proportionen entsprechen, wird das Bild nach dem Aufruf verformt. Eine Lösung besteht darin, es entsprechend den Proportionen des Originalbildes zu skalieren. Das skalierte Bild weist zwangsläufig Leerstellen mit Farbe auf. Auf diese Weise wird das Bild zwar nicht verformt, es kommt jedoch zu starken Verzerrungen, wenn der Benutzer beispielsweise ein Bild sendet Es ist zwar hoch, hat aber eine durchschnittliche Breite, und wenn es zu einem 1:1-Bild komprimiert wird, ist das Bild nach der Komprimierung grundsätzlich nicht sichtbar.
Meine Lösung besteht darin, jedes Bild auf eine feste Größe zuzuschneiden, das Bild wird nicht verformt und der Leerraum wird gestreckt und gefüllt. Das Bild wird immer ohne Leerraum gefüllt. Freunde, die bcastr verwendet haben, sollten wissen, dass bcastr stellt sicher, dass der Bildaufruf nicht deformiert wird. Bei einem Ausgabebildrahmen mit fester Größe weist das Quellbild die folgenden Situationen auf:
1: Die Höhe und Breite des auszugebenden Bildes sind kleiner als die Höhe und Breite des Quellbildes, geschrieben als Urteil $new_width<$src_width && $new_height<$src_width
2: Die Höhe und Breite des auszugebenden Bildes sind größer als die Höhe und Breite des Originalbildes, geschrieben als Urteil $new_width>$src_width && $new_height>$src_width
3: Schließen Sie die beiden Typen 1 und 2 aus, dh die Situation des gleichzeitigen Vergrößerns und Verkleinerns sowie die Beurteilung der Gleichheit. Für 1 und 2 sind die Funktionsverarbeitungscodes genau gleich, sodass sie zusammengefasst werden können in eine Verarbeitungsanweisung umwandeln,
um den PHP-Implementierungscode
<?php
zu erhalten
/*
*Beschreibung: Die Funktion besteht darin, ein Bild auf ein Bild beliebiger Größe zuzuschneiden, ohne das Bild zu verformen.
* Parameterbeschreibung: Geben Sie den Dateinamen des zu verarbeitenden Bildes ein, generieren Sie den Speicherdateinamen des neuen Bildes, generieren Sie die Breite des neuen Bildes und generieren Sie die Höhe des neuen Bildes.
* geschrieben von smallchicken
* Zeit 18.12.2008
*/
// Erhalten Sie ein Bild beliebiger Größe, strecken Sie die fehlenden Teile, keine Verformung, kein Leerraum
Funktion my_image_resize($src_file, $dst_file, $new_width, $new_height) {
if($new_width <1 || $new_height <1) {
echo „Params Breiten- oder Höhenfehler!“;
Ausfahrt();
}
if(!file_exists($src_file)) {
echo $src_file . „ist nicht vorhanden!“;
Ausfahrt();
}
//Bildtyp
$type=exif_imagetype($src_file);
$support_type=array(IMAGETYPE_JPEG, IMAGETYPE_PNG, IMAGETYPE_GIF);
if(!in_array($type, $support_type,true)) {
echo „Dieser Bildtyp wird nicht unterstützt! Unterstützt nur JPG, GIF oder PNG“;
Ausfahrt();
}
//Bild laden
switch($type) {
Fall IMAGETYPE_JPEG:
$src_img=imagecreatefromjpeg($src_file);
brechen;
Fall IMAGETYPE_PNG:
$src_img=imagecreatefrompng($src_file);
brechen;
Fall IMAGETYPE_GIF:
$src_img=imagecreatefromgif($src_file);
brechen;
Standard:
echo „Fehler beim Laden des Bildes!“;
Ausfahrt();
}
$w=imagesx($src_img);
$h=imagesy($src_img);
$ratio_w=1.0 * $new_width / $w;
$ratio_h=1.0 * $new_height / $h;
$verhältnis=1,0;
// Die Höhe und Breite des generierten Bildes sind kleiner oder größer als die des Originals. Das Prinzip besteht darin, in einem großen Verhältnis zu vergrößern und in einem großen Verhältnis zu verkleinern (das verkleinerte Verhältnis wird kleiner sein).
if( ($ratio_w < 1 && $ratio_h < 1) || ($ratio_w > 1 && $ratio_h > 1)) {
if($ratio_w < $ratio_h) {
$ratio = $ratio_h ; // Fall 1, das Breitenverhältnis ist kleiner als die Höhenrichtung, entsprechend dem Höhenverhältnisstandard zuschneiden oder vergrößern
}anders {
$ratio = $ratio_w ;
}
// Definieren Sie ein temporäres Zwischenbild, dessen Seitenverhältnis genau den Zielanforderungen entspricht
$inter_w=(int)($new_width / $ratio);
$inter_h=(int) ($new_height / $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
imagecopy($inter_img, $src_img, 0,0,0,0,$inter_w,$inter_h);
// Erzeuge ein temporäres Bild mit der maximalen Seitenlänge als Zielbild-$ratio-Verhältnis
//Definiere ein neues Bild
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_img,$inter_img,0,0,0,0,$new_width,$new_height,$inter_w,$inter_h);
switch($type) {
Fall IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100); // Bild speichern
brechen;
Fall IMAGETYPE_PNG:
imagepng($new_img,$dst_file,100);
brechen;
Fall IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
brechen;
Standard:
brechen;
}
} // Ende, wenn 1
// 2 Eine Seite des Zielbilds ist größer als das Originalbild und eine Seite ist kleiner als das Originalbild. Vergrößern Sie zuerst das normale Bild und schneiden Sie es dann zu.
// =if( ($ratio_w < 1 && $ratio_h > 1) || ($ratio_w >1 && $ratio_h <1) )
anders{
$ratio=$ratio_h>$ratio_w? $ratio_h : $ratio_w; //Nimm den Wert mit dem größeren Verhältnis
// Definiere ein großes Bild in der Mitte, die Höhe oder Breite des Bildes entspricht dem Zielbild und vergrößere dann das Originalbild
$inter_w=(int)($w * $ratio);
$inter_h=(int) ($h * $ratio);
$inter_img=imagecreatetruecolor($inter_w , $inter_h);
//Das Originalbild nach der Skalierung zuschneiden
imagecopyresampled($inter_img,$src_img,0,0,0,0,$inter_w,$inter_h,$w,$h);
//Definiere ein neues Bild
$new_img=imagecreatetruecolor($new_width,$new_height);
imagecopy($new_img, $inter_img, 0,0,0,0,$new_width,$new_height);
switch($type) {
Fall IMAGETYPE_JPEG:
imagejpeg($new_img, $dst_file,100); // Bild speichern
brechen;
Fall IMAGETYPE_PNG:
imagepng($new_img,$dst_file,100);
brechen;
Fall IMAGETYPE_GIF:
imagegif($new_img,$dst_file,100);
brechen;
Standard:
brechen;
}
}//if3
}// Endfunktion
?>