| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

25-05-2005, 13:55
|
|
floho0711
Newbie
|
|
Registriert seit: May 2005
Beiträge: 8
|
|
Bildgröße ändern / quadratische Thumbnails
Hallo!
Vorneweg: ich bin absoluter PHP-Anfänger.
Ich hab folgendes Problem. Für eine Fotogalerie möchte ich ein php-script erstellen, dass mir von vorhanden Bildern ein Thumbnail erstellt. Nichts besonderes bis hierher. Allerdings möchte ich, dass die Thumbnails quadratisch sind (w=h), auch wenn das Originalbild eine Rechteckige Abmessung (w <> h) hat.
Bisher hatte ich folgenden Code:
$size = GetImageSize ($dir.$file);
$bigpic = @imagecreatefromjpeg ($dir.$file);
$w=$size[0];
$h=$size[1];
if ($w>=$h) { $x=$w/$w*$stst; $y=$h/$w*$stst; }
if ($h>=$w) { $x=$w/$h*$stst; $y=$h/$h*$stst; }
$smallpic = imageCreateTrueColor($x,$y);
if (!$smallpic){
$smallpic = imageCreate($x,$y);
ImageCopyResized ($smallpic, $bigpic, 0, 0, 0, 0, $x, $y, $w,$h); }
else{
imagecopyresampled($smallpic,$bigpic,0,0,0,0,$x,$y,$w,$h);
}
ImageJPEG($smallpic,$dir."thumb/tn_".$file);
ImageDestroy($smallpic);
ImageDestroy($bigpic);
Dort habe ich dann die Größenprüfung rausgeworfen und
$x=stst;
4y=stst;
eingesetzt. $stst ist die Größenvorgabe für die Thumbnails. Das funktioniert auch soweit, nur sind die quadratischen Thumbnails natürlich gequetscht bzw. auseinandergezerrt.
Wie kann ich es realisieren, dass die Ausgangsgrafik ($bigpic) vor dem ImageCopyResize erst noch auf ein quadratisches Maß BESCHNITTEN wird?
Es würde genügen, wenn ein Bild im Querformat links und rechts gleichmäßig auf width=hight beschnitten wird. Und Hochformat entsprechend.
Viele Grüße
Flo
|

25-05-2005, 13:59
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.455
|
|
Re: Bildgröße ändern / quadratische Thumbnails
Zitat:
Original geschrieben von floho0711
Wie kann ich es realisieren, dass die Ausgangsgrafik ($bigpic) vor dem ImageCopyResize erst noch auf ein quadratisches Maß BESCHNITTEN wird?
Es würde genügen, wenn ein Bild im Querformat links und rechts gleichmäßig auf width=hight beschnitten wird. Und Hochformat entsprechend.
|
bild so resizen, dass nur die kürzere kante (breite oder höhe) dem gewünschten maß entspricht, und die andere maßstabsgerecht bleibt.
anschließend aus diesem maßstabsgerecht verkleinerten bild dann mit imagecopy o.ä. nur den gewünschten teilbereich rausschneiden (koordinaten dafür vorher berechnen.)
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

25-05-2005, 14:11
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
lass die grössenprüfung drin und benutze die vorgabemaße für ein quadratisches bild NUR für imagecreate() & imagecreatetruecolor(). fertig.
__________________
-
|

25-05-2005, 16:25
|
|
floho0711
Newbie
|
|
Registriert seit: May 2005
Beiträge: 8
|
|
Hi!
Danke für die Antworten. Klappt schon ganz gut. Nur wird jetzt immer der vorder Bildteil kopiert. Das Thumb ist zwar quadratisch und nicht verzerrt, nur eben nicht aus der Bildmitte herausgeschnitten.
Habe schon einiges probiert. Kann es sein, dass man mit ImageCopyResized() den startpunkt nicht festlegen kann?? Eigentlich doch schon, oder???
Ich hab folgendes "Konstrukt" gebildet:
if ($w>=$h) { $x=$w/$h*$stst; $y=$h/$h*$stst; $sx=$w-$h/2; $sy=0; $sw=$h; $sh=$h; }
if ($h>=$w) { $x=$w/$w*$stst; $y=$h/$w*$stst; $sy=$h-$w/2; $sx=0; $sw=$w; $sh=$w; }
$smallpic = imageCreateTrueColor($stst,$stst);
if (!$smallpic){
$smallpic = imageCreate($stst,$stst);
ImageCopyResized ($smallpic, $bigpic, 0, 0, $sx, $sy, $stst, $stst, $sw, $sh); }
Leider klappt das irgendwie nicht. das Ergebnis ist das selbe wie oben beschrieben. muss ich ein "zwsichenimage" erstellen und dann mit ImageCopy() arbeiten? Eigentlich müsste man sich den schritt doch sparen können... oder??
Gruß FLo
|

25-05-2005, 16:33
|
Wurzel
Master  
|
|
Registriert seit: Jul 2002
Ort: double-u-upper-valley
Beiträge: 7.477
|
|
Zitat:
Original geschrieben von floho0711
Kann es sein, dass man mit ImageCopyResized() den startpunkt nicht festlegen kann?? Eigentlich doch schon, oder???
|
klar geht das. du kannst auch negative werte einsetzen.
prüfe mal deine variablenwerte. ich geh mal davon aus, dass du keine ganzzahlen erzeugst. ceil() & floor() sind hier deine freunde. es gibt ja keine 1.3333 pixel
__________________
-
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|