Bildbreite variable bei fester höhe?

Will dir ja nicht zu nahe treten, aber hast du schon mal über einen Editor mit Syntax-Highlighting und -Check nachgedacht? Es gibt x kostenlose Lösungen, die einem beim Programmieren Hilfestellung leisten. Z.B. Eclipse+PDT.

Das ist ja nicht dein erster Syntax-Fehler hier im Thread ;-)

Vermutlich ist das Bracket nach echo $md zu viel.
 
nein, du tritts mir nicht zu nahe, und ich habe bereits einen Editor der mir zeigt wo ich bin, was ich schreibe und ob das korrekt ist (php html, usw....) der oben genannte fehler lag auch an mir, ich war in der zeile verrutscht, :/

der Code geht jetzt auch, die Bilder werden korrekt angezeigt, ohne fehlermeldung, nur zeigt es jetzt bilder die Hochkannt aufgenommen wurden, immernoch gestreckt.

Ein gutes beispiel ist das hier http://www.rosenthal-bielatal.de/to...&layout=loc&task=edit&cid[]=25&id=25&liste=80

dort kann man gut erkennen das er jetzt die Thumb bilder wirklich so anzeigt wie diese vorliegen, das heist wenn ein Tumb 70x70px ist, (das1.) dann wird dies auch so angezeigt, die anderen sind aber 117x70px berechnet, und diese Thumbs liegen daher auch so auf dem Server, und werden auch so angezeigt.

Ich denke das dies etwas mit der Thumb bild erstellung zu tun hat, weniger mit der Anzeige der kleinen Bilder... hier nochmal der Thumb erstellungscode

Code:
//-------------class img-----------------
   
  function addimg($id_site)
  {
   
   
  
$db  =& JFactory::getDBO();
   $query = "SELECT  wimg, vwimg, vhimg, max_img FROM #__lbresa_config";  $db->setQuery( $query );  $confimg = $db->loadObject();
   
  $datepic = date('Ymdhis');
  $name = $id_site."_".$datepic;
   
        $wimg= $confimg->wimg;
        $vwimg= $confimg->vwimg;
        $vhimg= $confimg->vhimg;
        
        $max_img= $confimg->max_img;
   
   
  $dir = 'components/com_joomloc/images'; $dir_temp = 'components/com_joomloc/images/temp'; 
   
  $ratio = $wimg;
   
   
   
   
   
      if (isset($_FILES['file']))  
      {
          if ($_FILES['file']['error'] == UPLOAD_ERR_OK) 
          {
             
        $tableau = @getimagesize($_FILES['file']['tmp_name']); 
        if ($tableau == FALSE) { 
           
           unlink($_FILES['file']['tmp_name']); 
           $erreur = "<h1>".JText::_( 'Votre fichier n est pas une image.' )."</h1>"; 
               echo "$erreur";
        } 
        else { 
                
          
          
           if ($tableau[2] == 1 || $tableau[2] == 2 || $tableau[2] == 3) { 
              
              $file_upload = 'site_'.$id_site."_img_".$name.".jpg";
                    
                    copy ($_FILES['file']['tmp_name'], $dir_temp.'/'.$file_upload); 
                    
   
    $query = "INSERT INTO #__lbresa_img(id, id_site, img) values('', '$id_site', '$file_upload')";
    $db->setQuery( $query );
     $db->query();
   
   // si notre image est de type jpeg --------------------------------------------------------------
   
              if ($tableau[2] == 2) { 
                 // on crée une image à partir de notre grande image à l'aide de la librairie GD 
                 $src = imagecreatefromjpeg($dir_temp.'/'.$file_upload); 
              
                      if($tableau[0]<=$ratio and $tableau[1]<=$ratio)
                      {
                      copy ($_FILES['file']['tmp_name'], $dir.'/'.$file_upload); 
                       $src = imagecreatefromjpeg($dir.'/'.$file_upload);
                      }
                      else
                      {
                 // on teste si notre image est de type paysage ou portrait 
                 if ($tableau[0] > $tableau[1]) { 
                    $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
                    imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
                 } 
                 else { 
                    $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
                    imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
                 } 
                 // on copie notre fichier généré dans le répertoire des miniatures 
                 imagejpeg ($im, $dir.'/'.$file_upload); 
                       }
                       
                        $imv = imagecreatetruecolor($vwimg, $vhimg); 
                    imagecopyresampled($imv, $src, 0, 0, 0, 0, $vwimg, $vhimg, $tableau[0], $tableau[1]); 
                       imagejpeg ($imv, $dir.'/vignettes/'.$file_upload);
                       unlink($dir_temp.'/'.$file_upload); 
                      }
       
  //----------

leider finde ich mit meinen begrenzten wissen nicht die stelle die ich anpassen muss das es die Breite varaibel berechnet und die höhe der kleinen bilder halt auf die eingestellten (zb) 70px lässt...
 
Zuletzt bearbeitet:
Der Hund liegt hier:

PHP:
        $wimg= $confimg->wimg;
        $vwimg= $confimg->vwimg;
        $vhimg= $confimg->vhimg;
        
        $max_img= $confimg->max_img;

Da wird pauschal davon ausgegangen, das die Breite vorgegeben ist. Man müsste einen Prüf-Algorythmus einbauen, der folgendermaßen reagiert:

Code:
hole breite
hole hoehe
hole max. breite
hole max. hoehe

prüfe ob breite höher max. breite {
  merke ratio max.breite / breite 
  setze breite auf max. breite
  setze hoehe auf hoehe / ratio_breite
}
prüfe ob hoehe höher max. hoehe {
  merke ratio max.hoehe / hoehe
  setze hoehe auf max. hoehe
  setze breite auf breite / ratio_hoehe
}

oder so ähnlich.
 
Zuletzt bearbeitet:
Die Be-/Umrechnung der Bildgröße habe ich dir oben doch schonmal geschrieben.

Hier gibt es nochmal ein Beispiel wie Thumbs erstellt werden können. Vielleicht kommst du ja damit weiter.
 
So mit eurer Hilfe habe ich nun den Code verschiedenartig verändert, zb in dem ich die breite und die höhe gewechselt habe....

Code:
 //-------------class img-----------------
   
  function addimg($id_site)
  {
   
   
  
$db  =& JFactory::getDBO();
   $query = "SELECT  wimg, vwimg, vhimg, max_img FROM #__lbresa_config";  $db->setQuery( $query );  $confimg = $db->loadObject();
   
  $datepic = date('Ymdhis');
  $name = $id_site."_".$datepic;
   
        $vhimg= $confimg->vhimg;
        $vwimg= $confimg->vwimg;
        $vhimg= $confimg->vhimg;
        
        $max_img= $confimg->max_img;
   
   
  $dir = 'components/com_joomloc/images'; $dir_temp = 'components/com_joomloc/images/temp'; 
   
  $ratio =  $vhimg;
   
   
   
   
   
      if (isset($_FILES['file']))  
      {
          if ($_FILES['file']['error'] == UPLOAD_ERR_OK) 
          {
             
        $tableau = @getimagesize($_FILES['file']['tmp_name']); 
        if ($tableau == FALSE) { 
           
           unlink($_FILES['file']['tmp_name']); 
           $erreur = "<h1>".JText::_( 'Votre fichier n est pas une image.' )."</h1>"; 
               echo "$erreur";
        } 
        else { 
                
          
          
           if ($tableau[2] == 1 || $tableau[2] == 2 || $tableau[2] == 3) { 
              
              $file_upload = 'site_'.$id_site."_img_".$name.".jpg";
                    
                    copy ($_FILES['file']['tmp_name'], $dir_temp.'/'.$file_upload); 
                    
   
    $query = "INSERT INTO #__lbresa_img(id, id_site, img) values('', '$id_site', '$file_upload')";
    $db->setQuery( $query );
     $db->query();
   
   // si notre image est de type jpeg --------------------------------------------------------------
   
              if ($tableau[2] == 2) { 
                 // on crée une image à partir de notre grande image à l'aide de la librairie GD 
                 $src = imagecreatefromjpeg($dir_temp.'/'.$file_upload); 
              
                      if($tableau[0]<=$ratio and $tableau[1]<=$ratio)
                      {
                      copy ($_FILES['file']['tmp_name'], $dir.'/'.$file_upload); 
                       $src = imagecreatefromjpeg($dir.'/'.$file_upload);
                      }
                      else
                      {
                 // on teste si notre image est de type paysage ou portrait 
                 if ($tableau[0] > $tableau[1]) { 
                    $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
                    imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
                 } 
                 else { 
                    $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
                    imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
                 } 
                 // on copie notre fichier généré dans le répertoire des miniatures 
                 imagejpeg ($im, $dir.'/'.$file_upload); 
                       }
                       
                        $imv = imagecreatetruecolor($vwimg, $vhimg); 
                    imagecopyresampled($imv, $src, 0, 0, 0, 0, $vwimg, $vhimg, $tableau[0], $tableau[1]); 
                       imagejpeg ($imv, $dir.'/vignettes/'.$file_upload);
                       unlink($dir_temp.'/'.$file_upload); 
                      }
       
  //----------

leider funktioniert das so einfach nicht, hat jemand noch eine Idee?!
 
Zuletzt bearbeitet:
Sorry aber bei dem Code blicke ich nicht so ganz durch a) weil nicht mit PHP formatiert ist und b) die Kommentare auch noch französisch sind.

Ich hänge dir hier nochmal ein Beispiel dran. Es enthält 1 Bild mit 640 x 480 Pixeln und ein Bild mit 480 x 640 Pixeln und dann die Datei wo die Bilder angepasst und angezeigt werden.

In dieser Datei werden die Bilder jeweils in ihrem Originalformat/-größe angezeigt und zweimal jeweils mit der gewünschten Höhe von 70 Pixeln.

Die verkleinerte Ausgabe erfolgt im ersten Beispiel durch die Berechnung der entsprechenden Abmessungen und im zweiten Beispiel dadruch das einfach nur "height=70" im HTML-Tag angegeben wird.

Beide Ausgaben liefern die korrekte Bildgröße!? !? !?
 

Anhänge

So nach langem Suchen und Probieren, habe ich nun folgendes Raußgefunden der nachfolgende Code berechnet das Bild, und mit dem 2. Codeschnippsel wird eigentlich nur noch das Bild verschoben, ich hoffe ich habe soweit reicht, dies ist wichtig für mich damit ich das verstehen kann ...

PHP:
//-------------class img-----------------

function addimg($id_site)
{



 $db 	=& JFactory::getDBO();
 $query = "SELECT  wimg, vwimg, vhimg, max_img FROM #__lbresa_config";
 $db->setQuery( $query );
 $confimg = $db->loadObject();
 
$datepic = date('Ymdhis');
$name = $id_site."_".$datepic;

	$wimg= $confimg->wimg;
	$vwimg= $confimg->vwimg;
	$vhimg= $confimg->vhimg;
	
	$max_img= $confimg->max_img;


$dir = 'components/com_joomloc/images';  
$dir_temp = 'components/com_joomloc/images/temp'; 

$ratio = $vhimg;





    if (isset($_FILES['file']))  
    {
        if ($_FILES['file']['error'] == UPLOAD_ERR_OK) 
        {
           
      $tableau = @getimagesize($_FILES['file']['tmp_name']); 
      if ($tableau == FALSE) { 
         
         unlink($_FILES['file']['tmp_name']); 
         $erreur = "<h1>".JText::_( 'Votre fichier n est pas une image.' )."</h1>"; 
		 echo "$erreur";
      } 
      else { 
	  	  
	  
        
         if ($tableau[2] == 1 || $tableau[2] == 2 || $tableau[2] == 3) { 
            
            $file_upload = 'site_'.$id_site."_img_".$name.".jpg";
			
			copy ($_FILES['file']['tmp_name'], $dir_temp.'/'.$file_upload); 
			
 
  $query = "INSERT INTO #__lbresa_img(id, id_site, img) values('', '$id_site', '$file_upload')";
  $db->setQuery( $query );
   $db->query();

PHP:
// type jpeg --------------------------------------------------------------
 
            if ($tableau[2] == 2) { 
               // on crée une image Ã* partir de notre grande image Ã* l'aide de la librairie GD 
               $src = imagecreatefromjpeg($dir_temp.'/'.$file_upload); 
		
			  if($tableau[0]<=$ratio and $tableau[1]<=$ratio)
			  {
			  copy ($_FILES['file']['tmp_name'], $dir.'/'.$file_upload); 
			   $src = imagecreatefromjpeg($dir.'/'.$file_upload);
			  }
			  else
			  {
               // on teste si notre image est de type paysage ou portrait 
               if ($tableau[0] > $tableau[1]) { 
                  $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio); 
                  imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
               } 
               else { 
                  $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1])); 
                  imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]); 
               } 
               // on copie notre fichier généré dans le répertoire des miniatures 
               imagejpeg ($im, $dir.'/'.$file_upload); 
			   }
			   
			    $imv = imagecreatetruecolor($vwimg, $vhimg); 
                  imagecopyresampled($imv, $src, 0, 0, 0, 0, $vwimg, $vhimg, $tableau[0], $tableau[1]); 
			   imagejpeg ($imv, $dir.'/vignettes/'.$file_upload);
			   unlink($dir_temp.'/'.$file_upload); 
			  }
     
//-------------------

SO nun habe ich versucht, mein Problem dadurch zu lösen, das ich als Ratio nicht mehr die breite nehme sondern die höhe, nur leider funktioniert das auch nicht, das Thumbbild wird weiterhin 70x70pixel berechnet, ich muss also weiterhin die berechnung ändern...

Mein Problem was ich noch habe, ist ich sehe bei dem Beispiel von tombe keinen unterschied in der Berechnung...

Querformat
PHP:
<?php
$img = "1.jpg";
$size = getimagesize( $img);
// den Wert 70 musst du eventuell anpassen
$max_height = 70;
$faktor = 1;

if ($size[1] > $max_height) {
	$faktor = $max_height / $size[1];
}
?>

Hochformat
PHP:
<?php
$img = "2.jpg";
$size = getimagesize( $img);
// den Wert 70 musst du eventuell anpassen
$max_height = 70;
$faktor = 1;

if ($size[1] > $max_height) {
	$faktor = $max_height / $size[1];
}
?>
Das ist der dich gleiche berechnungscode für das Thumbnail ****? Aber trotzdem wir das korrekt einmal hochkannt und einmal Quer dargestellt.


Eine idee wäre auch noch, gibt es mehrere Thumbnailbildgeneratoren ****? Sodass ich einfach einen anderen nutze denn vielleicht kann" meiner" das einfach nicht ****?
 
Also in Beitrag #24 habe ich dir einen Link angegeben wo beschrieben wird wie man Thumbs erstellen kann. Bin eigentlich davon ausgegangen das du auch liest was man dir schreibt!?

Was ich bei obigem Code nicht so ganz verstehe ist wofür die Werte in der Datenbank stehen. Der Wert für $ratio muss normalerweise anhand der Bildgröße berechnet werden. Du übergibst aber immer nur den Inhalt von $vhimg bzw. $confimg->vhimg. Wo findet da die Berechnung statt?
 
Ich habe mir den Beitrag natürlich durchgelesen, aber ich verstehe nicht alles, was bedeuten zb. die vielen nullen?!

PHP:
imagecopyresampled(
    $thumb,
    $image,
    0, 0, 0, 0, // Startposition des Ausschnittes
    $thumbwidth, $thumbheight,
    $imagewidth, $imageheight
);

Wo findet da die Berechnung statt?

Ich dachte hier, zumindest wird hier der PHP Befehl verwendet, nachdem die Größe in die Variable gespeichert wurde ****? Oder lieg ich falsch****?

(Mein Posting #28 teilauszug aus dem 2. PHP Code)

PHP:
... 
  imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]); 
               } 
               else { 
                  $im = imagecreatet......
 
Zurück