Ich möchte meine Bilder auf 400 x 300px Größe ändern. Und wenn das Bild größer als 400 px in der Breite ist, möchte ich zuerst die Größe ändern, bevor ich die Höhe beschneide.Php img Größe ändern vor Crop
Die Bilder kommen von Remote-Websites, so dass es im Hochformat und kann Landschaft sein, aber was ich erreichen möchte, ist die Menge des Zuschneidens wenn möglich zu minimieren, und Größe vor dem Zuschneiden wenn möglich.
Ich benutze die folgenden Codes (ich bin ein sehr verwirrend, um ehrlich zu sein). Nicht gerade gut mit Verhältnis und Zahlen. Codes stammen von mehreren SO-Antwortcodes.
function makeThumb($imgsrc, $imgtarg, $imgtarg_d) {
$ext = exif_imagetype($imgsrc);
if ($ext == false) {
return;
}
//getting the image dimensions
list($width, $height) = getimagesize($imgsrc);
//saving the image into memory (for manipulation with GD Library)
switch($ext) {
case 1:
$myImage = imagecreatefromgif($imgsrc);
break;
case 2:
$myImage = imagecreatefromjpeg($imgsrc);
break;
case 3:
$myImage = imagecreatefrompng($imgsrc);
break;
}
// calculating the part of the image to use for thumbnail
if ($width > $height) {
$y = 0;
$x = ($width - $height)/2;
$smallestSide = $height;
if ($width >= 400) {
$thumbSizeWidth = 400;
$thumbSizeHeight = 300;
} else {
$thumbSizeWidth = $width;
$thumbSizeHeight = 300;
}
} else {
$x = 0;
$y = ($height - $width)/2;
$smallestSide = $width;
if ($height >= 300) {
$thumbSizeHeight = 300;
$thumbSizeWidth = 400;
} else {
$thumbSizeHeight = $height;
$thumbSizeWidth = 400;
}
}
$thumb = imagecreatetruecolor($thumbSizeWidth, $thumbSizeHeight);
/*RESIZE FIRST*/
imagecopyresampled($thumb, $myImage, 0, 0, 0, $y, $thumbSizeWidth, $thumbSizeHeight, $width, $height);
/*CROP*/
imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSizeWidth, $thumbSizeHeight, $smallestSide, $smallestSide);
//final output
imagejpeg($thumb, $imgtarg_d . '/' . $imgtarg,80);
imagedestroy($thumb);
}
Die Bilder werden immer von der Mitte abgeschnitten (wie beabsichtigt), aber es ist Ändern der Größe nicht erst, wenn die Bilder mehr als 400px breit.
imagecopyresampled($thumb, $myImage, 0, 0, 0, $y, $thumbSizeWidth, $thumbSizeHeight, $width, $height);
imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSizeWidth, $thumbSizeHeight, $smallestSide, $smallestSide);
Ihr Code funktioniert sehr gut! Wie auch immer, ich denke ... kannst du mir zeigen, wo ich schneiden kann? IF Breite ist mehr als Höhe .. Ich möchte nicht die Höhe zuschneiden. –