Seite 1 von 1
capiImgScale Verkleinern & Zuschneiden => fixe Breite
Verfasst: Do 28. Dez 2006, 13:10
von jcf
Hallo Zusammen!
Da ich im Forum beim besten Willen keine Lösung gefunden habe, muss ich wohl einen neuen Thread eröffnen. Falls ich nicht gründlich genug gesucht habe, weist mich bitte darauf hin!
Ich möchte die Thumbnails in der Newsliste auf eine fixe Breite und Höhe verkleinern (80x80) und die überstehenden Bildinformationen abschneiden, so dass immer die gleiche Höhe und Breite bei den Thumnails entsteht. Wenn ich dem capiImgScale nun den Befehl "$crop = true" gebe, verkleinert er das Foto allerdings nicht - er beschneidet es lediglich. Gibt es hier eine Möglichkeit das Bild erst zu skalieren und dann zu beschneiden? Danke für Eure Antwort!
Code: Alles auswählen
capiImgScale($img_path, $img_size, $img_size, $crop = true, $expand = false, $cacheTime = 1000, $wantHQ = true);
Vielen Dank noch mal an dieser Stelle.
Verfasst: Do 28. Dez 2006, 13:13
von stese
hm und wenn du es in zwei schritten ausführst?
also erster schritt: bild verkleiner crop = false, danach das gecachte bild nehmen, und dieses bild dann beschneiden - habe mir die funktion nicht genauer angeschaut, kann aber sein, dass die aktuelle vorgehensweise so gewollt ist
Verfasst: Do 28. Dez 2006, 13:30
von jcf
Hm, hatte ich auch schon überlegt. Ich weiß aber nicht wie ich an die Originalgröße des Ursprungsbildes komme. Ich muss ja je nach Seitenverhältnis die längere Seite als Grundlage für die Verkleinerung nehmen. Beispiel:
Das Foto ist 500 x 300. Dann muss das Bild im ersten Schritt 133 x 80 sein:
$img_teaser_2 = capiImgScale($img_path, 133, 133, $crop = false, $expand = false, $cacheTime = 1000, $wantHQ = true);
Anschließend kann ich den Crop anwenden, so dass es auf 80 x 80 kommt.
$img_teaser = capiImgScale($img_teaser_2, 80, 80, $crop = true, $expand = false, $cacheTime = 1000, $wantHQ = true);
Aber wo bekomme ich die Information über die Größe des Ursprungsbildes her?
Verfasst: Do 28. Dez 2006, 13:36
von stese
Verfasst: Do 28. Dez 2006, 13:53
von jcf
Das ist schon mal Prima. Die Umrechnung funktioniert schon mal. Allerdings funktioniert scheinbar die Übergabe von img_teaser2 zu img_teaser nicht. Hast du da auch noch eine Idee?
Code: Alles auswählen
$originalsize = getimagesize($img_path); //Original Größe des Bildes
$img_size = "CMS_VALUE[14]"; //Zielgröße
if ($originalsize[0] > $originalsize[1]) {
$img_size2 = $originalsize[0] / $originalsize[1] * $img_size; // Verwendung der Breite, falls diese größer ist
} else {
$img_size2 = $originalsize[1] / $originalsize[0] * $img_size; // Verwendung der Höhe, falls diese größer ist
}
$img_teaser2 = capiImgScale($img_path, $img_size2, $img_size2, $crop = false, $expand = false, $cacheTime = 1000, $wantHQ = true);
$img_teaser = capiImgScale($img_teaser2, $img_size, $img_size, $crop = true, $expand = false, $cacheTime = 1000, $wantHQ = true);
Ich hoffe, dass das nicht nervt. Aber ich glaube, dass diese Sache u.U. für andere Leute auch mal interessant sein könnte.
Verfasst: Do 28. Dez 2006, 14:03
von jcf
Zur Not würde es auch mit "overflow:hidden" gehen. Dann würde ich das Bild halt im Quelltext beschneiden. Zwar nicht sehr schön, aber hätte die gleiche Wirkung.

Verfasst: Do 28. Dez 2006, 14:07
von silicone
Hallo,
ich habe mal für ein kleines Flash-CMS etwas ähnliches benötigt:
Code: Alles auswählen
function createThumb($source, $destination = "", $width = 245,
$max_height = 170)
{
list($src_width, $src_height, $type) = getimagesize($source);
switch ($type)
{
case 1: $src_img = imagecreatefromgif($source); break;
case 2: $src_img = imagecreatefromjpeg($source); break;
case 3: $src_img = imagecreatefrompng($source); break;
default: return false;
}
$dst_height = (int)round($width * $src_height / $src_width);
$dst_img = imagecreatetruecolor($width,
min($dst_height, $max_height));
$dst_y = (int)round((imagesy($dst_img) - $dst_height) / 2);
imagecopyresampled($dst_img, $src_img, 0, $dst_y, 0, 0,
$width, $dst_height, $src_width, $src_height);
if (empty($destination)) $destination = $source;
$destination = preg_replace('/\.[a-z]+$/i', '.jpg',
$destination);
imagejpeg($dst_img, $destination);
return true;
}
Die Funktion skaliert erst und beschneidet so, dass die Bildmitte übrig bleibt.
Vielleicht kannst du das ja für dich anpassen...
Gruß,
Tom