Bild in Datenbank speichern

Raven280438

Erfahrenes Mitglied
Hi,

ich möchte die Bilder, die mittels eines Formulars hochgeladen wurden in 2 verschiedenen Größen in einer Datenbank speichern.

Wie kann ich die in der Größe veränderten Bilder ohne sie vorher zwischenzuspeichern in einen String lesen, damit ich ihn in der Datenbank speichern kann?

Hier meine Funktion:
PHP:
<?php

//Bild in Orginal- und Thumb-Größe in Datenbank speichern
function save_pic($pfad) {
	//Bild mit Breite 900 
	$size = getimagesize($pfad);

	$width = $size[0];
	$height = $size[1];
	$new_width = 900;
	$new_height = intval($height*$new_width/$width);
	
	$image_p = imagecreatetruecolor($new_width, $new_height);
	
	if($size[2] == 1) {
		//GIF
		$image = imagecreatefromgif($pfad);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
		$bildtyp = "GIF";
	} elseif ($size[2] == 2) {
		//JPEG
		$image = ImageCreateFromJPEG($pfad);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
		$bildtyp = "JPEG";
	} elseif ($size[2] == 3) {
		//PNG
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
		#$image_orginal = ImagePNG($image_p);
		$bildtyp = "PNG";
	}
	
	$image_orginal = $image_p;
	unset($size,$width,$height,$new_width,$new_height,$image_p,$image);
	
	//Bild in Thumbnail-Größe
	$size = getimagesize($pfad);
	
	$width = $size[0];
	$height = $size[1];
	$new_height = 100;
	$new_width = intval($width*$new_height/$height);

	$image_p = imagecreatetruecolor($new_width, $new_height);
	
	if($size[2] == 1) {
		//GIF
		$image = imagecreatefromgif($pfad);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	} elseif ($size[2] == 2) {
		//JPEG
		$image = ImageCreateFromJPEG($pfad);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	} elseif ($size[2] == 3) {
		//PNG
		$image = ImageCreateFromPNG($pfad);
		imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
	}
	
	$image_thumb = $image_p;
	
	//in Datenbank speichern
	db_query("INSERT INTO bilder (id,name,bildtyp,bild_normal,bild_thumb) VALUES('','".basename($pfad)."','$bildtyp','$image_orginal','$image_thumb')");
}

?>

Im Moment wird nich das Bild in der Datenbank gespeichert, sondern einfach nur "Resource id #14".


Kann mir jemand weiterhelfen?


Gruß
 
Dein Problem besteht darin dass die Image-Variablen nicht die Image-Daten beinhalten sondern lediglich referenzieren.
Falls Du die Bilder wirklich in der Datenbank speicher willst (wovon ich im Grunde erstmal abrate, denn fuer sowas ist die Datenbank eigentlich nicht unbedingt gedacht) dann fallen mir dazu zwei Wege ein:
  1. Speichere die generierten Bilder und lies sie dann wie normale Dateien aus. Anschliessend kannst Du die gespeicherten Bilder loeschen.
  2. Nutze Output-Buffering, gib die Bilder aus und schreibe den Buffer in eine Variable. Dadurch sparst Du die Auslagerung auf der Festplatte.
 
Na zum Thema Output Buffer gibt es auf php.net so einiges zu lesen. ;)

Mal ein ganz kleines Beispiel:
PHP:
ob_start();
echo 'Dieser Text wird gleich in eine Variable uebertragen.';
$text=ob_get_contents();
ob_end_clean();
Nun steht der Text der dort ausgegeben wurde (aber nicht an den Browser, da Output-Buffering aktiv war) in der Variable $text und Du kannst damit tun und lassen was Du willst.
Genauso kannst Du auch mit Bildern verfahren.
 
Zurück