Multimedia-Artist
Hallo allerseits,
es geht bei mir um folgendes: momentan arbeite ich an einer website
für mein studium, die dynamisch mit php und mysql aufgebaut ist.
Auf der Seite gibt es eine Bildergalerie
Diese kann man wenn man im Adminbereich eingeloggt ist "befüllen".
DAS funktioniert auch: das Formular wird abgeschickt - auf dieser Seite(die die Daten vom Formular entgegen nimmt) werden meine Funktionen includiert und die Funktion "upload_gallery()"
wird ausgeführt.
Wie gesagt das funktioniert: neues Bild wird hochgeladen, thumbnail wird erstellt und die Namen und Pfade werden in die Datenbank gespeichert.
Ich weiß sieht noch ziemlich unaufgeräumt aus, und die Ausgaben unter dem thumb mal bitte ignorieren.
OK, nun zu meinem eigentlichen Problem:
Ich möchte dem Admin die Möglichkeit geben einzelne Bilder zu berarbeiten, d.h. Bild austauschen und Titel ändern.
Er kann sich das Bild auswählen und kommt auf folgendes Formular:
Wird nur der Name geändert -> so wird nur der Name geändert und das
Bild bleibt;
wird noch zusätzlich ein Bild hochgeladen -> so werden die alten Bilder(grosses Bild und thumbnail) gelöscht, das neue Bild hochgeladen,
thumbnail erstellt,Pfade in datenbank usw.
Ich bediene mich wieder der oben genannten Funktion, nur leicht umgeschrieben - das Problem: das thumbnail ist leider SCHWARZ.
Die Pfade sind alle gleich - das "grosse" Bild wird auch erzeugt und in der
Galerie angezeigt.
Ich dachte vielleicht wird das hochgeladene Bild nicht gefunden(was dann noch verkleinert und beschnitten wird), aber dann wäre das "grosse"Bild ja
auch nicht da. Ich habe viel probiert und nach Fehlern gesucht, leider erfolglos.
Hier die Update Funktion:
Ich denke das Problem liegt im code relativ weit unten, bei
"#Skalierung" also bei:
imagecopyresampled($neuesBild,$altesBild, 0, 0, 0, 0, $x, $y, $img_x, $img_y);
.
.
.
Ich weiß, das war jetzt sehr langatmig und ausführlich und mein code
kann man sicherlich besser schreiben (für Vorschläge bin ich offen),
vielleicht hatte jemand hier auch schon ein ähnliches Problem oder weiß einen Lösungsansatz.
Vielen Dank für eure Hilfe
es geht bei mir um folgendes: momentan arbeite ich an einer website
für mein studium, die dynamisch mit php und mysql aufgebaut ist.
Auf der Seite gibt es eine Bildergalerie
Diese kann man wenn man im Adminbereich eingeloggt ist "befüllen".
DAS funktioniert auch: das Formular wird abgeschickt - auf dieser Seite(die die Daten vom Formular entgegen nimmt) werden meine Funktionen includiert und die Funktion "upload_gallery()"
wird ausgeführt.
Code:
//-------------------------------------- FUNCTION GALLERY NEW PICTURE ------------------------------------
function upload_gallery()
{
$gallery_name = $_POST['upload_gallery_name'];
$report_img = '';
$IMG_WIDTH = $_POST['strWidth'];
$IMG_HEIGHT = $_POST['strHeight'];
$IMG_ROOT_DB = "uploads/gallery/".$gallery_name;
$IMG_ROOT = "../../../uploads/gallery/".$gallery_name;
$IMG_ROOT2_DB = "uploads/gallery/".$gallery_name."/thumbs";
$IMG_ROOT2 = "../../../uploads/gallery/".$gallery_name."/thumbs";
$thumb = "th_";
$fileName = explode(".", $_FILES['strFile']['name']);
$name = str_replace(' ', '_', $fileName[0]);
$acceptedTypes = array('image/jpeg', 'image/jpg', 'image/pjpeg');
if(!in_array($_FILES['strFile']['type'], $acceptedTypes) || trim($_FILES['strFile']['tmp_name']) == "" || trim($_FILES['strFile']['tmp_name']) =="none")
{
echo '<div id="upload">
<h1>Das geht leider nicht</h1>
<p>Du hast kein Bild ausgewählt, oder es handelt sich um kein unterstütztes Format.</p>
</div>';
}
else
{
$img_orig_size = getimagesize($_FILES['strFile']['tmp_name']);
$img_orig_width = $img_orig_size[0];
$img_orig_height = $img_orig_size[1];
$img_original = ImageCreateFromJpeg($_FILES['strFile']['tmp_name']);
$image_stored = $_POST['strName'] .'-'. "$name.jpg";
ImageJPEG($img_original, "$IMG_ROOT/$image_stored");
# <div id='upload'>
echo "
<h1>Das hat geklappt</h1>
<p>Du hast hochgeladen: {$_FILES['strFile']['name']}<br>
Neuer Name: $image_stored<br>
Breite: $img_orig_width<br>
Höhe: $img_orig_height<br>
</p>
<p>
<a target='_blank' href='$IMG_ROOT/$image_stored'>Orginal anschauen</a>
</p>";
$link_SQL_insert = "INSERT INTO gallery_content (gallery_name,pic_name,pic_url,thumb_url) VALUES ('$gallery_name','$image_stored','$IMG_ROOT_DB/$image_stored','$IMG_ROOT2_DB/$thumb$image_stored')";
$bool = mysql_query($link_SQL_insert);
if($bool==1)
{
echo "<div class=\"report_zeile\">";
echo "Neues Bild wurde gespeichert";
echo "</div>";
}
if($bool<>1)
{
echo "<div class=\"report_zeile\">";
echo "Beim Aufnehmen des Bildes ist ein Fehler aufgetreten<br>";
echo "<a href=\"../../index.php?seite=clients\" class=\"back\">zurück</a>";
echo "</div>";
}
if($img_orig_width <= $IMG_WIDTH || $img_orig_height <= $IMG_HEIGHT)
{
echo "<p>Das von dir ausgewählte Bild ist kleiner als deine Angaben</p><p>Es wurde also kein Thumbnail erzeugt.</p></div>";
}
else
{
$img_x = $img_orig_width;
$img_y = $img_orig_height;
if ($img_x > $img_y )
{
$x=150;
$y = round(($x*$img_y)/$img_x);
}
else
{
$y=150;
$x=round(($y*$img_x)/$img_y);
}
$ergebnisbreite = $x;
$ergebnishoehe = $y;
$breite_th = '75';
$hoehe_th = '100';
$quality = '100';
$altesBild = ImageCreateFromJpeg($_FILES['strFile']['tmp_name']);
$neuesBild = imagecreatetruecolor($ergebnisbreite,$ergebnishoehe);
$neuesBild2 = imagecreatetruecolor($breite_th,$hoehe_th);
$pic_x = imagesx($neuesBild)/5;
$pic_y = imagesy($neuesBild)/5;
#Skalierung
imagecopyresampled($neuesBild, $altesBild, 0 , 0 , 0 , 0, $x, $y, $img_x, $img_y);
#Kopieren eines Ausschnitts vom Skalierten Bild in ein neuees mit der Zielgrösse
imagecopy($neuesBild2,$neuesBild,0,0,$pic_x,$pic_y,$breite_th,$hoehe_th);
$img_name = "th_$image_stored";
ImageJPEG($neuesBild2,"$IMG_ROOT2/$img_name",$quality);
ImageDestroy($neuesBild);
$mg_new_size = filesize("$IMG_ROOT2/$img_name");
echo "<h2>Das erzeugte Thumbnail</h2>
<p>Deine Einstellungen: $IMG_WIDTH x $IMG_HEIGHT<br>
Breite: $img_new_width<br>
Höhe: $img_new_height<br>
Größe: $mg_new_size (in bytes)
</p>
<img src='$IMG_ROOT2/$img_name' />";
// </div>";
}
}
}
Ich weiß sieht noch ziemlich unaufgeräumt aus, und die Ausgaben unter dem thumb mal bitte ignorieren.
OK, nun zu meinem eigentlichen Problem:
Ich möchte dem Admin die Möglichkeit geben einzelne Bilder zu berarbeiten, d.h. Bild austauschen und Titel ändern.
Er kann sich das Bild auswählen und kommt auf folgendes Formular:
Wird nur der Name geändert -> so wird nur der Name geändert und das
Bild bleibt;
wird noch zusätzlich ein Bild hochgeladen -> so werden die alten Bilder(grosses Bild und thumbnail) gelöscht, das neue Bild hochgeladen,
thumbnail erstellt,Pfade in datenbank usw.
Ich bediene mich wieder der oben genannten Funktion, nur leicht umgeschrieben - das Problem: das thumbnail ist leider SCHWARZ.
Die Pfade sind alle gleich - das "grosse" Bild wird auch erzeugt und in der
Galerie angezeigt.
Ich dachte vielleicht wird das hochgeladene Bild nicht gefunden(was dann noch verkleinert und beschnitten wird), aber dann wäre das "grosse"Bild ja
auch nicht da. Ich habe viel probiert und nach Fehlern gesucht, leider erfolglos.
Hier die Update Funktion:
Code:
//-----------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------- FUNCTION EDIT GALLERY ENTRY(PIC) ---------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------
function edit_pic()
{
$id = $_POST['id'];
$gallery_name = $_POST['gallery_name'];
$pic_name = $_POST['strName'];
$query = "SELECT pic_name FROM gallery_content WHERE id = '$id'";
$sql = mysql_query($query) or die($query.' Fehlermeldung der DB: '.mysql_error());
$row = mysql_fetch_object($sql);
$pic_name_db = $row->pic_name;
//-------------------------------------- Falls neuer Bildname naders als der alte Bildname ist -> Bildname Update -------------------------------------------
if ($pic_name_db != $pic_name)
{
$sql="UPDATE gallery_content SET pic_name = '".$pic_name."' WHERE ID = ".$id;
$bool = mysql_query($sql);
if($bool==1)
{
echo "<div class=\"report_zeile\">";
echo "Bildname $pic_name_db wurde in $pic_name geändert";
echo "</div>";
}
if($bool<>1)
{
echo "<div class=\"report_zeile\">";
echo "Beim Aufnehmen des neuen Bildnamens ist ein Fehler aufgetreten";
echo "</div>";
}
}
//-------------------------------------- Falls Bild mithochgeladen wurde -> altes Bild löschen und neues uploaden -------------------------------------------
if (is_uploaded_file($_FILES['strFile']['tmp_name']))
{
$link_select_sql = "SELECT * FROM gallery_content WHERE id = '$id' LIMIT 1";
$link_select_result = mysql_query($link_select_sql);
while($links = mysql_fetch_array($link_select_result))
{
$datei = "../../../".$links['pic_url'];
$datei_th = "../../../".$links['thumb_url'];
$picture_name = $links['pic_name'];
}
unlink($datei);
unlink($datei_th);
echo "<div class=\"report_zeile\">";
echo "Das Bild <font color=\"#CC6600\">$pic_name_db und thumbnail</font> wurden gelöscht";
echo "</div>";
//echo "<script type=\"text/javascript\">";
//echo "setback_gallery( );";
$report_img = '';
$IMG_WIDTH = 75;
$IMG_HEIGHT = 100;
$IMG_ROOT_DB = "uploads/gallery/".$gallery_name;
$IMG_ROOT = "../../../uploads/gallery/".$gallery_name;
$IMG_ROOT2_DB = "uploads/gallery/".$gallery_name."/thumbs";
$IMG_ROOT2 = "../../../uploads/gallery/".$gallery_name."/thumbs";
$thumb = "th_";
$fileName = explode(".", $_FILES['strFile']['name']);
$name = str_replace(' ', '_', $fileName[0]);
$acceptedTypes = array('image/jpeg', 'image/jpg', 'image/pjpeg');
if(!in_array($_FILES['strFile']['type'], $acceptedTypes) || trim($_FILES['strFile']['tmp_name']) == "" || trim($_FILES['strFile']['tmp_name']) =="none")
{
echo '<div id="upload">
<h1>Das geht leider nicht</h1>
<p>Du hast kein Bild ausgewählt, oder es handelt sich um kein unterstütztes Format.</p>
</div>';
}
else
{
$img_orig_size = getimagesize($_FILES['strFile']['tmp_name']);
$img_orig_width = $img_orig_size[0];
$img_orig_height = $img_orig_size[1];
$img_original = ImageCreateFromJpeg($_FILES['strFile']['tmp_name']);
$image_stored = $_POST['strName'];
ImageJPEG($img_original, "$IMG_ROOT/$image_stored");
# <div id='upload'>
echo "
<h1>Das hat geklappt</h1>
<p>Du hast hochgeladen: {$_FILES['strFile']['name']}<br>
Neuer Name: $image_stored<br>
Breite: $img_orig_width<br>
Höhe: $img_orig_height<br>
</p>
<p>
<a target='_blank' href='$IMG_ROOT/$image_stored'>Orginal anschauen</a>
</p>";
$link_SQL_insert ="UPDATE gallery_content SET pic_url = '$IMG_ROOT_DB/$image_stored', thumb_url = '$IMG_ROOT2_DB/$thumb$image_stored' WHERE ID = ".$id;
$bool = mysql_query($link_SQL_insert);
if($bool==1)
{
echo "<div class=\"report_zeile\">";
echo "Altes Bild wurde ersetzt";
echo "</div>";
}
if($bool<>1)
{
echo "<div class=\"report_zeile\">";
echo "Beim Aufnehmen des Bildes ist ein Fehler aufgetreten<br>";
echo "<a href=\"../../index.php?seite=clients\" class=\"back\">zurück</a>";
echo "</div>";
}
$breite_th = '75';
$hoehe_th = '100';
$ergebnisbreite = $x;
$ergebnishoehe = $y;
$quality = '100';
if($img_orig_width <= $IMG_WIDTH || $img_orig_height <= $IMG_HEIGHT)
{
echo "<p>Das von dir ausgewählte Bild ist kleiner als die Vorgaben</p><p>Es wurde also kein Thumbnail erzeugt.</p></div>";
}
else
{
$img_x = $img_orig_width;
$img_y = $img_orig_height;
if ($img_x > $img_y )
{
$x=150;
$y = round(($x*$img_y)/$img_x);
}
else
{
$y=150;
$x=round(($y*$img_x)/$img_y);
}
$altesBild = $img_original;
$neuesBild = imagecreatetruecolor($ergebnisbreite,$ergebnishoehe);
$neuesBild2 = imagecreatetruecolor($breite_th,$hoehe_th);
$pic_x = imagesx($neuesBild)/5;
$pic_y = imagesy($neuesBild)/5;
#Skalierung
imagecopyresampled($neuesBild,$altesBild, 0, 0, 0, 0, $x, $y, $img_x, $img_y);
#Kopieren eines Ausschnitts vom Skalierten Bild in ein neuees mit der Zielgrösse
imagecopy($neuesBild2,$neuesBild,0,0,$pic_x,$pic_y,$breite_th,$hoehe_th);
$img_name = "th_$image_stored";
ImageJPEG($neuesBild2,"$IMG_ROOT2/$img_name",$quality);
ImageDestroy($neuesBild);
$mg_new_size = filesize("$IMG_ROOT2/$img_name");
echo "<h2>Das erzeugte Thumbnail</h2>
<p>Deine Einstellungen: $IMG_WIDTH x $IMG_HEIGHT<br>
Breite: $img_new_width<br>
Höhe: $img_new_height<br>
Größe: $mg_new_size (in bytes)
</p>
<img src='$IMG_ROOT2/$img_name' />";
// </div>";
}
}
}
else
{
echo "<div class=\"report_zeile\">";
echo "Das Bild wurde nicht verändert";
echo "</div>";
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------- FUNCTION EDIT GALLERY ENTRY(PIC) END ---------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------
?>
"#Skalierung" also bei:
imagecopyresampled($neuesBild,$altesBild, 0, 0, 0, 0, $x, $y, $img_x, $img_y);
.
.
.
Ich weiß, das war jetzt sehr langatmig und ausführlich und mein code
kann man sicherlich besser schreiben (für Vorschläge bin ich offen),
vielleicht hatte jemand hier auch schon ein ähnliches Problem oder weiß einen Lösungsansatz.
Vielen Dank für eure Hilfe