imagecopyresized und bessere qualität

dr_Alex

Erfahrenes Mitglied
hallo,
ich hab hier n script, der macht aus einen bild von hoher auflösung ein bild mit kleineren :-)

dabei beachtet er die propotionnen und fühlt den rest mit weisser farbe. wenn ich das jedoch mache, werden die bilder sehr schlecht dargestellt. siehe screenshots weiter unten.

der script sieht etwa so aus:

PHP:
// config lite :)
$breite=100;
$hoehe=100;
// original bild rein
$im4=imagecreatefromjpeg($uploaddir.$filename.'_or.jpg');
// neues bild 100*100
$im5=imagecreate ($breite,$hoehe);
// weisse farbe ermittlen
$weiss = imagecolorallocate($im4,255,255,255);
// das neue bild mit weiss ausmalen
imagerectangle ($im5,0,0,$breite,$hoehe,$weiss);
// nimmt volle kanne die grösse
$image2x = getimagesize($uploaddir.$filename.'_or.jpg');  
// und mach volle kanne das verhältnis ausrechnen
if ($image2x[0]>$image2x[1]){ 
	$divs = $image2x[0]/$breite; 
	$y=intval($image2x[1]/$divs); 
	$x=$breite; 
	$x2=($breite-$x)/2; 
	$y2=($hoehe-$y)/2; 
}else{ 
	$divs = $image2x[1]/$hoehe; 
	$x=intval($image2x[0]/$divs); 
	$y= $hoehe; 
	$x2 = ($breite-$x)/2; 
	$y2 = ($hoehe-$y)/2; 
}     
// kopieren voll in einander
imagecopyresized ($im5,$im4,$x2,$y2,0,0,$x,$y,$image2x[0],$image2x[1]); 
// ausgeben
imagejpeg($im5,$uploaddir.$filename.'_sm.jpg',100);

screen.jpg


die 2 grossen bildern sind original und die kleinen, sind die kaputten bilder. :(

danke vorraus
 
jo mit kombination von imagecreatetruecolor klappt das. nur die leere fläche ist irgentwie schwarz geworden :) idee warum?
 
diese:

PHP:
// neues bild 100*100 
$im5=imagecreate ($breite,$hoehe); 
// weisse farbe ermittlen 
$weiss = imagecolorallocate($im4,255,255,255); 
// das neue bild mit weiss ausmalen 
imagerectangle ($im5,0,0,$breite,$hoehe,$weiss);

der script erstell ja n bild das 100*100 gross ist und setzt in die mitte des bildes das verkleinerte original bild. wenn das kleine verkleinerte original bild zB 80 px hoch ist, dann hat man ja 20px leere fläche.
 
ok thx hab geschaft

hab anstelle von einen viereck in das bild rein malen
PHP:
imagerectangle ($im5,0,0,$breite,$hoehe,$weiss);
das bild mit weiser farbe ausgefüllt
PHP:
imagefill ($im5,0,0,$weiss);

danke dir vielmals
mfg alex
 
Wieso benutzt du nicht einfach imagefill():
PHP:
<?php
	[…]
	$im = imagecreate(100, 100);
	$white  = imagecolorallocate($im, 255, 255, 255);
	imagefill($im, 0, 0, $white);
	[…]
?>
 
Du brauchst auf alle Fälle die Funktion

imagecreatetruecolor();

Damit haben die neuen Bilder dann auch net vernüftige Qualität...
das alte Bild würde ich dann mit imagecopyresized() oder imagecopyresampled().

Ich habe zu Hause n bissel Quelltext, indem ich das so genutzt habe.
Denke so gegen 20 h kann ich hier den mal posten.
 
Bissel aussem Zusammenhang gerissen, aber ich denke da ist allwas was du brauchst ;-)
$newy wurde angegeben und war dann die neue Bildbreit, die Höhe wurde dann einfach ausgerechnet.

Das Script speichert das Bild direkt ab, zur Ausgabe müsstest du halt einfach n Header entsprechend setzen.

PHP:
     $imgsrcsz = getimagesize($file);
     $multi = $imgsrcsz[1]/$newy;
     $newx = $imgsrcsz[0]/$multi;
     $thumb = imagecreatetruecolor($newx, $newy);
     switch($imgsrcsz[2]){
                case"1":
                $imgsrc = imagecreatefromgif($file);
                break;
                case"2":
                $imgsrc = imagecreatefromjpeg($file);
                break;
                case"3":
                $imgsrc = imagecreatefrompng($file);
                break;
                default:
                $imgsrc = imagecreatefromwbmp($file);
                }
     imagecopyresampled($thumb,$imgsrc,0,0,0,0,$newx,$newy,$imgsrcsz[0],$imgsrcsz[1]);
     imageinterlace($thumb,1);
     imagepng($thumb,$folder."/thumb/".$bild[0]."_".$newy.".png",75);
     imagedestroy($thumb);


hoffe das hilft dir ein wenig ;)

@aKraus:
Jo... war wirklich n Fehler.... und das nach fast 4 Jahren .... :-)
 
Zuletzt bearbeitet:
Zurück