Webstatt.org - Community seit 2006 - 2012 (2024?)

PHP Bildkonvertierung runde Ecken

user-323
05.01.2007 09:45

Hallo,
ich arbeite gerade an einem Script, dass eine eckiges Bild mit rundne Ecken ausstatten soll. Das funktioniert auch schon soweit, nur sind die Ecken transparent, auch wenn ein Bild drunter liegt. Also er nimmt dann nicht dei Farben des Bildes an, sondern bleibt transparent. ich finde den fehler einfach nicht. weiss da vielleicht jemand eine lösung?
die grafiken sind alle png 24 mit alphafilter.

hier ist ma ein auszug aus dem code und ein generiertes bild:


class ROUNDCORNERS
{
// Funktion roundedimage bekommt das Quellbild und das Zielbild übergeben,
// verkleinert das Quellbild auf die vorgebene Grösse und fügt dem Bild
// Rahmen, Schatten und Rundungen hinzu. Abgespeichert wird das Bild unter dem
// Namen, der beim Aufruf mitgegeben wurde (Argument 2)

function roundedimage($source, $destination) {

// Bildgrösse feststellen
$info = getimagesize($source);

// Bild aus Datei laden
switch ($info['mime']) {
case 'image/jpeg' :
$image = imagecreatefromjpeg($source);
break;
case 'image/png' :
$image = imagecreatefrompng($source);
break;

case 'image/gif' :
$image = imagecreatefromgif($source);
break;
default:
return FALSE;
}

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($image, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($image, true);

// Breite des Bildes abfragen
$image_w = imagesx($image);
$image_h = imagesy($image);

// maximale Breite und Höhe des Bildes
$maxwidth = "250";
$maxheight = "350";

// wenn die Breite des Bildes grösser ist als 250 px,
// wird das Bild proportional verkleinert.
if ($image_w > $maxwidth)
{
// wenn das Bild zu gross ist, wird die Breite auf die Maximalbreite von 250px gesetzt
// Die Höhe des Bildes wird dann dementsprechend runtergerechnet
$imageprop = $maxwidth/$image_w;
$imagevsize = $image_h * $imageprop;
$new_w=$maxwidth;
$new_h=ceil($imagevsize);
}
else
{
// Ist die Bildbreite kleiner gleich der Maximalbreite von 250px
// muss das Bild nicht verändert werden
$new_w = $image_w;
$new_h = $image_h;
}

// leeres Truecolorbild anlegen mit der Grösse 250px x 350px
$temp = imagecreatetruecolor(250, 350)
or die ("Kann kein neues Bild erzeugen"zwinkern;

// Farbe "lime" definieren. Farbe ist gut geeignet
// für imagecolortransparent()
$lime = imagecolorallocate($temp, 255, 255, 255);

// Leeres Bild mit der Farbe lime füllen
imagefill($temp, 0, 0, $lime);

// Hintergrundfarbe entfernen (transparent)
imagecolortransparent($temp, $lime);

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($temp, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($temp, true);

// Ursprüngliches Bild auf die Maße 250px x 350 px skalieren
// und in dem neuen Truecolorbild abspeichern.
// imagecopyresampled anstatt imagecopyresized, um Qualitätsverlust
// beim verleinern des Bildes zu vermeiden.
imagecopyresampled($temp, $image,(125 - ($new_w / 2)),(175 - ($new_h / 2)),0,0,$new_w,$new_h,$image_w,$image_h);

// Breite und Höhe des verkleinerten / vergrösserten Bildes abfragen
$temp_w = imagesx($temp);
$temp_h = imagesy($temp);

// Runde Ecke oben links hinzufügen
$crnimage_nw = imagecreatefrompng("images/corner_nw_trans.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_nw, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_nw, true);

$crnimage_nw_w = imagesx($crnimage_nw);
$crnimage_nw_h = imagesy($crnimage_nw);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_nw, 0, 0, 0, 0,$crnimage_nw_w, $crnimage_nw_h);

.....
......

// Schatten unten dem Bild hinzufügen
$crnimage_shadow_bottom = imagecreatefrompng("images/shadow_bottom_trans.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_shadow_bottom, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_shadow_bottom, true);

$crnimage_shadow_bottom_w = imagesx($crnimage_shadow_bottom);
$crnimage_shadow_bottom_h = imagesy($crnimage_shadow_bottom);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_shadow_bottom,4, 345, 0, 0, 255-($crnimage_se_w+$crnimage_sw_w), $crnimage_shadow_bottom_h);

// Schatten rechts dem Bild hinzufügen
$crnimage_shadow_right = imagecreatefrompng("images/shadow_right_trans.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_shadow_right, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_shadow_right, true);

$crnimage_shadow_right_w = imagesx($crnimage_shadow_right);
$crnimage_shadow_right_h = imagesy($crnimage_shadow_right);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_shadow_right, 243, 7, 0, 0, $crnimage_shadow_right_w, 355-($crnimage_ne_h+$crnimage_se_h));

// Rahmen links dem Bild hinzufügen
$crnimage_border_left = imagecreatefrompng("images/border_left.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_border_left, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_border_left, true);

$crnimage_border_left_w = imagesx($crnimage_border_left);
$crnimage_border_left_h = imagesy($crnimage_border_left);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_border_left, 0, 8, 0, 0, $crnimage_border_left_w, 352-($crnimage_ne_h+$crnimage_se_h));

// Rahmen oben dem Bild hinzufügen
$crnimage_border_top = imagecreatefrompng("images/border_top.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_border_top, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_border_top, true);

$crnimage_border_top_w = imagesx($crnimage_border_top);
$crnimage_border_top_h = imagesy($crnimage_border_top);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_border_top, 5, 0, 0, 0, 252-($crnimage_se_w+$crnimage_sw_w), $crnimage_border_top_h);

// Lupe unten links hinzufügen
$crnimage_icon_lupe = imagecreatefrompng("images/icon_lupe.png"zwinkern;

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($crnimage_icon_lupe, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($crnimage_icon_lupe, true);

$crnimage_icon_lupe_w = imagesx($crnimage_icon_lupe);
$crnimage_icon_lupe_h = imagesy($crnimage_icon_lupe);

// Bildausschnitt kopieren mit entprechenden Parametern
// Der Ausschnitt wird an die x/y-Koordinaten dst_x und dst_y kopiert.
// Aufruf: int ImageCopy (resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h )
imagecopy($temp, $crnimage_icon_lupe, 2, 320, 0, 0,$crnimage_icon_lupe_w , $crnimage_icon_lupe_h);

// Alphablending für PNG-Bilder ausschalten
// imagealphablending muss ausgeschaltet sein, damit man imagesavealpha benutzen kann
imagealphablending($temp, false);

// Speichern des Bildes mit Alphafilter anstatt wie gewöhnlich die Transparenz auf eine
// Farbe zu beschränken (GIF)
imagesavealpha($temp, true);

// Speichern des neuen Bildes im Format image/png
// und mit dem Namen der als 2. Argument mitgegeben wurde
imagepng($temp, $destination);


}
}

?>