MyBB.de Forum

Normale Version: Thumbnail von Bildausschnitt erstellen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo liebe User,

ich habe einen Code und möchte aus der Datei "$file2" eine Thumbnail von einem Bildausschnitt (am besten von der Mitte) generieren lässt.

Wie muss ich mein Code entsprechend ändern?

Codes von Google etc. einzuimplementieren kann ich leider nicht.

Habe aber folgendes gefunden:
PHP-Code:
$old imagecreatefrompng(BLA);
$new imagecreate(BREITEHÖHE);
$x rand(0,ORIGINAL_BREITE-BREITE);
$y =  rand(0,ORIGINAL_HÖHE-HÖHE);
imagecopy($new,$old,0,0,$x,$y,$x+BREITE,$y+HÖHE); 

Dies ist mein Code:
PHP-Code:
$file2       "upload/news/$datei";
                  
$target2    "upload/news/thumb-$datei";
                  
$max_width   "100"//Thumbnailbreite
                  
$max_height   "100"//Thumbnailhöhe
                  
$quality     "90"//Thumbnailqualität
                  
$src_img     imagecreatefromjpeg($file2);
                  
$picsize     getimagesize($file2);
                  
$src_width   $picsize[0];
                  
$src_height  $picsize[1];
                  
                  if(
$src_width $src_height)
                  {
                  if(
$src_width $max_width)
                  {
                    
$convert $max_width/$src_width;
                    
$dest_width $max_width;
                    
$dest_height ceil($src_height*$convert);
                  }
                  else
                  {
                    
$dest_width $src_width;
                    
$dest_height $src_height;
                  }
                  }
                  else
                  {
                  if(
$src_height $max_height)
                  {
                    
$convert $max_height/$src_height;
                    
$dest_height $max_height;
                    
$dest_width ceil($src_width*$convert);
                  }
                  else
                  {
                    
$dest_height $src_height;
                    
$dest_width $src_width;
                  }
                  }
                  
$dst_img imagecreatetruecolor($dest_width,$dest_height);
                  
imagecopyresampled($dst_img$src_img0000$dest_width$dest_height$src_width$src_height);
                  
imagejpeg($dst_img"$target2"$quality);

                  
unlink($file); 

Wäre sehr nett, wenn ihr mir helfen könntet.

Gruß,
Waluigi
Hey Leute... habe es mal probiert.

Es erscheint "Erfolgreich Hochgeladen", jedoch wird das Bild/die Bilder nicht hochgeladen.

Könnt ihr mir vielleicht sagen, woran das liegen könnte?

PHP-Code:
<?php
$ok 
$_GET['ok'];
if(!isset(
$ok) or $ok != "y") {
?>
<form enctype="multipart/form-data" name="publish_news" method="post" action="index.php?site=galerie_add&ok=y">
  <label>
    </label>
  <input type="hidden" name="MAX_FILE_SIZE" value="3145728" />
    <strong>Galerie, Screenshot hochladen</strong><br />
<input name="datei" type="file" />
  </p>
  <p>
    <label>
      <input type="submit" name="go" id="go" value="Hochladen">
    </label>
</form>
<?php
}
else {
//Uploadscript
session_start();
$datei $_FILES['datei']['name']; //Name
$datei str_replace(" ""_""$datei");
$datei htmlentities($datei); //Überflüssige Zeichen wegmachen
$dateityp GetImageSize($_FILES['datei']['tmp_name']);
//Dateitypen = JPG, GIF, PNG
if($dateityp[2] == or $dateityp[2] == or $dateityp[2] == 3)
   {

   if(
$_FILES['datei']['size'] <  3145728//max. Größe in bytes
      
{
      
move_uploaded_file($_FILES['datei']['tmp_name'], "images/galerie/temp-$datei"); //Normale Datei in normaler Größe
                  
$file        "images/galerie/temp-$datei"//Datei
                  
$target       "images/galerie/gross-$datei"//Ausgabename
                  
$max_width   "980"//Breite ändern
                  
$max_height  "980"//Höhe ändern
                  
$quality     "100"//Qualität ändern (max. 100)
                  
if($dateityp[2] == 1) {
                      
$src_img     imagecreatefromgif($file);
                  }
                  if(
$dateityp[2] == 2) {
                      
$src_img     imagecreatefromjpeg($file);
                  }
                  if(
$dateityp[2] == 3) {
                      
$src_img     imagecreatefrompng($file);
                  }
                  
$picsize     getimagesize($file);
                  
$src_width   $picsize[0];
                  
$src_height  $picsize[1];
                  
                  if(
$src_width $src_height)
                  {
                  if(
$src_width $max_width)
                  {
                    
$convert $max_width/$src_width;
                    
$dest_width $max_width;
                    
$dest_height ceil($src_height*$convert);
                  }
                  else
                  {
                    
$dest_width $src_width;
                    
$dest_height $src_height;
                  }
                  }
                  else
                  {
                  if(
$src_height $max_height)
                  {
                    
$convert $max_height/$src_height;
                    
$dest_height $max_height;
                    
$dest_width ceil($src_width*$convert);
                  }
                  else
                  {
                    
$dest_height $src_height;
                    
$dest_width $src_width;
                  }
                  }
                  
$dst_img imagecreatetruecolor($dest_width,$dest_height);
                  
imagecopyresampled($dst_img$src_img0000$dest_width$dest_height$src_width$src_height);
                  
imagejpeg($dst_img"$target"$quality);






                  
// Ab hier wird noch eine Thumbnail erstellt. 
                  
$file2       "images/galerie/gross-$datei";
                  
$target2     "images/galerie/klein-$datei";
                  
$quality     "90"//Thumbnailqualität
                  
if($dateityp[2] == 1) {
                      
$src_img     imagecreatefromgif($file);
                  }
                  if(
$dateityp[2] == 2) {
                      
$src_img     imagecreatefromjpeg($file);
                  }
                  if(
$dateityp[2] == 3) {
                      
$src_img     imagecreatefrompng($file);
                  }
                  
$picsize     getimagesize($file2);
                  
$src_width   $picsize[0];
                  
$src_height  $picsize[1];
                  
                  
$breite       "65";
                  
$hoehe       "65";
                                
                  
$new imagecreate($breite$hoehe);
                  
$x rand(0,$src_width-$breite);
                  
$y =  rand(0,$src_height-$hoehe);
                  
imagecopy($target2,$file2,0,0,$x,$y,$x+$breite,$y+$hoehe); 
                  
                  
unlink($file);
                  
                  echo 
"Erfolgreich hochgeladen!</br>
                  <img src=\"images/galerie/gross-
$datei\"></br>
                  <img src=\"images/galerie/klein-
$datei\">";
              }
              else {
                       echo 
"<center><b>Das Bild darf nicht größer als 2MB sein</b></center>";
               }
        }
    else {
        echo 
"<center><b>Bitte nur Bilder im JPG, GIF oder PNG Format hochladen</b></center>";
    } 
}
?>
Dann musst du wohl debuggen... Toungue
hast du denn mal oberflächlich drübergeschaut und etwas gesehen?

Also debuggen.. was meinste damit genau?^^
Schau doch mal, welche Variable welchen Wert hat. Dann siehst du vielleicht den Fehler. Wink
Ah, ich musste die Berechtigungen der Ordner noch richtig setzen.

Sagt mal... wieso macht er das kleine Thumbnail nicht? Speichert er den nicht richtig?

Den großen speichert er einwandfrei.

PHP-Code:
imagecopy($target2,$file2,0,0,$x,$y,$x+$breite,$y+$hoehe); 

Speichert er das noch nicht?

Ich weiß nicht ganz weiter... ^^'
So, etwas verändert.

Jetzt gibt er leider nur ein schwarzes 65x65 pixel großes Bild aus bzw. speichert dies auf dem Server.

Leider ist dieses nur schwarz.

Vielleicht habe ich da was falsch gerechnet, aber im normalfall, wollte ich das Drittel in der Mitte des Bildes herauskopieren und in 65x65 pixel haben.

Gehen wir davon aus, dass ich ein 960x600 pixel großes Bild hochlade.

Dann soll er ab 326px (Breite von links) und 200px (von oben) ein Bildausschnitt von 326x326 pixeln kopieren.

Wieso gibt er einfach ein schwarzes Bild aus?

Hier mal der Codeausschnitt (davor wird noch das große Bild erstellt):
PHP-Code:
// Ab hier wird noch eine Thumbnail erstellt. 
                  
$file2       "images/galerie/gross-$datei";
                  
$target2     "images/galerie/klein-$datei";
                  
$quality     "90"//Thumbnailqualität
                  
                  
$dateityp getimagesize($file2);
                  if(
$dateityp[2] == 1) {
                      
$src_img     imagecreatefromgif($file2);
                  }
                  if(
$dateityp[2] == 2) {
                      
$src_img     imagecreatefromjpeg($file2);
                  }
                  if(
$dateityp[2] == 3) {
                      
$src_img     imagecreatefrompng($file2);
                  }
                  
$picsize     getimagesize($file2);
                  
$src_width   $picsize[0];
                  
$src_height  $picsize[1];
                  
                  
//Höhe und Breite des neuen Thumbnails
                  
$breite       "65";
                  
$hoehe       "65";
                  
                  
$x rand(0,$src_width-$breite);
                  
$y =  rand(0,$src_height-$hoehe);
                  
                  
$neu imagecreatetruecolor($breite$hoehe);
                  
                  
$neu_height $src_height;
                  
$neu_height $neu_height $neu_height 3;
                  
                  
$neu_width $src_width;
                  
$neu_width $neu_width $neu_width 3;
                  
                  
imagecopyresized($neu$file200$neu_width$neu_height$breite$hoehe$neu_width$neu_width);
                  
imagejpeg($neu"$target2"$quality);
                 
                  
unlink($file); 

Wäre euch sehr dankbar :/