mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 10:04 Benutzername: Passwort: Auto-Login

Thema: [php]Bilder verkleinern klappt nicht korrekt vom 10.11.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [php]Bilder verkleinern klappt nicht korrekt
Seite: 1, 2, 3  Weiter
Autor Nachricht
123456
Threadersteller

Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht: Männlich
Verfasst Mo 10.11.2008 22:29
Titel

[php]Bilder verkleinern klappt nicht korrekt

Antworten mit Zitat Zum Seitenanfang

Hallo,

nutze schon seit einiger Zeit das gleiche Bildu-verkleinerungs-script (selbst zusammengewurschtelt) und das klappte bisher immer, nur jetzt in einem anderen Projekt nicht mehr...

Beide erzeugten Bilder sind klein, obwohl eines klein (440x370) und eines groß (800x600) sein müsste.
Original Größe des Bildes ist übrigens bei 2000 x irgendwas...

Es gibt sicher bessere Funktionen als meine, aber sie funktionierte bisher immer und mir ist schleierhaft, warum er beides klein macht. Denn ich wende den 2ten Funktionsaufruf doch auf eine ganz andere Datei an... Oder läuft beim "Copy" was schief?

Verzweifle langsam...
Danke!

Code:

$Bild1 =  $config['BASE_DIR'].'/bildupload/'.$filename;     //original datei auf dem server
$Bild2 =  $config['BASE_DIR'].'/bildupload/B_'.$filename;
   
copy($Bild1, $Bild2);    //zum original wird noch eine kopie angelegt
      

bildgroesse(600,800,$Bild2);  //aufruf der funktion mit übergabe pfad und gewünschter größe
bildgroesse(370,440,$Bild1);

//und hier die funktion
function bildgroesse($height,$width,$path)
{
   $Speicherort =  $path;   
   $datei = GetImageSize($Speicherort);
   
     switch ($datei['mime'])               //aktion für passenden dateityp wählen
     {
         case 'image/jpeg':
            $src = imagecreatefromjpeg($Speicherort);
            break;
         case 'image/gif':
            $src = imagecreatefromgif($Speicherort);
            break;
         case 'image/png':
            $src = imagecreatefrompng($Speicherort);
            break;
     }

     $ImageSize=GetImageSize($Speicherort);   //Größe anzeigen
     if(($width<$datei[0])OR($height<$datei[1]))
     {
         $FaktorHeight=($height/$ImageSize[1]);
         $FaktorWidth=($width/$ImageSize[0]);
          
        if($FaktorHeight>$FaktorWidth)
        {
           $NewHeight=($FaktorWidth*$ImageSize[1]);
           $NewWidth=($FaktorWidth*$ImageSize[0]);
        }
        else
        {
          $NewHeight=($FaktorHeight*$ImageSize[1]);
          $NewWidth=($FaktorHeight*$ImageSize[0]);
        }
     }
     else
     {
        $NewHeight=$ImageSize[1];
        $NewWidth=$ImageSize[0];
     }
    
     $tmp=imagecreatetruecolor($NewWidth, $NewHeight);      //Farben
     imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]);   //resample
   
   
     switch ($datei['mime'])                     //Output
     {
         case 'image/jpeg':
            $src = imagejpeg($tmp, $Speicherort, 100);   //100=qualität ..0 bis 100 möglich
            break;
         case 'image/gif':
            $src = imagegif($tmp, $Speicherort, 100);
            break;
         case 'image/png':
            $src = imagepng($tmp, $Speicherort, 100);
            break;
     }    
     imagedestroy($tmp);   
}


Zuletzt bearbeitet von 123456 am Mo 10.11.2008 22:31, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
Darkdragon

Dabei seit: 23.05.2006
Ort: Berlin
Alter: 41
Geschlecht: Männlich
Verfasst Di 11.11.2008 08:07
Titel

Antworten mit Zitat Zum Seitenanfang

Hat es mit dieser größe immer Funktioniert?? ansonsten würd ich sagen das bild ist zu größ oder der server hat ein zugeringen time-out..
  View user's profile Private Nachricht senden
Anzeige
Anzeige
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Di 11.11.2008 10:17
Titel

Re: [php]Bilder verkleinern klappt nicht korrekt

Antworten mit Zitat Zum Seitenanfang

123456 hat geschrieben:
... Oder läuft beim "Copy" was schief?


setz doch mal dein error_reporting höher und prüfe parallel, ob copy hinhaut. hier steht ein wenig dazu (inkl. prüffunktion)
http://de3.php.net/copy

dass das timeout zu gering ist, würde ich fast nicht vermuten, da du je scheinbar thumbs bekommst... nur halt die falschen. ein versuch, das timeout höher zu setzen, könnte natürlich dennoch nicht schaden...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Di 11.11.2008 11:03
Titel

Antworten mit Zitat Zum Seitenanfang

Ich hab jetzt mal nix getestet aber ich liste dir mal ein paar sachen die du umbauen solltest:

1. Die Variablen $datei und $ImageSize. Eine davon kannst du rauswerfen. Du verschwendest verdammt viele Ressourcen damit! Ein getimagesize ist verdammt teuer! Das komplette Bild wird immer jeweils 2 mal in den Speicher geworfen und das ist völlig unnötig.

2. Die zuweisung der Variable Speicherort ist unnötig. Arbeite lieber gleich mit dem parameter $path

3. GetImageSize -> versuch mal getimagesize. Falls bei dir die Zend Engine läuft: Es stand mal zur Diskussion (und es gab auch mal einen patch wenn ich mich recht entsinne) um die funktionsnamen in der Zend Engine case sensitive zu machen. Weiss jetzt allerdings nicht wie der Ausgang der Diskussion war und ob das am Ende wirklich in die Zend Engine mit aufgenommen wurde. Eher unwahrscheinlich aber prüf es trotzdem mal.


Ansonsten lass dir mal den Inhalt der Variablen $NewWidth und $NewHeight einmal ausgeben und hangel dich rückwärts durch deinen Code bis du den Fehler hast. So würdest du die Zeile die was anderes tut als erwartet schnell und effektiv rausfinden. Ich hatte jetzt aber auch ehrlich gesagt keine lust das zu machen.

Hab jetzt mal nur grob drüber gelesen.

Wir sollten hier dringend mal ein "Wie debugge ich meinen Code richtig" FAQ einführen * Mal bisschen die Nase pudern... *
  View user's profile Private Nachricht senden
123456
Threadersteller

Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht: Männlich
Verfasst Di 11.11.2008 16:24
Titel

Antworten mit Zitat Zum Seitenanfang

Pixelpole hat geschrieben:
Wir sollten hier dringend mal ein "Wie debugge ich meinen Code richtig" FAQ einführen * Mal bisschen die Nase pudern... *

wär cool...

danke erstmal für eure antworten!

hmm hab jetzt alle deine vorgeschlagenen änderungen durchgeführt, aber wieder beide bilder im kleinen format.

hab dann auch noch vor imagecreatetruecolor ein echo eingebaut und es gibt sogar die richtigen werte aus!

Code:

 echo "newwidth: ".$NewWidth." und height: ".$NewHeight." ";
    
  $tmp=imagecreatetruecolor($NewWidth, $NewHeight);      //Farben
  imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]);   //resample

gibt korrekt erst "800x600" und danach "440x370" aus * Keine Ahnung... *

"error_reporting(E_ALL);" bringt keine ausgabe
timeout hochsetzen bringt auch nix
der copy befehl funzt auch - bringt erstens kein false zurück und zweitens existieren ja beide dateien


Zuletzt bearbeitet von 123456 am Di 11.11.2008 16:33, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
Pixelpole

Dabei seit: 25.10.2004
Ort: Trier
Alter: 37
Geschlecht: Männlich
Verfasst Di 11.11.2008 16:27
Titel

Antworten mit Zitat Zum Seitenanfang

paste mal deinen momentanen code hier rein und ich schau mir das mal grade genau an. hätte grade ein paar minuten.
  View user's profile Private Nachricht senden
123456
Threadersteller

Dabei seit: 15.01.2006
Ort: Dresden
Alter: -
Geschlecht: Männlich
Verfasst Di 11.11.2008 16:41
Titel

Antworten mit Zitat Zum Seitenanfang

boah super vielen dank!
wenn der zweite funktionsaufruf auskommentiert wird, macht ers übrigens richtig im 800x600er format
also sowohl das normale und die kopie sind 800x600

dank dir schonmal[/code]

Code:

$Bild1 =  '/bildupload/B_'.$filename;
$Bild2 =  '/bildupload/'.$filename;   
//$datei = GetImageSize($Speicherort);

bildgroesse(600,800,$Bild2);
if (!copy($Bild2, $Bild1))
{
   echo "failed to copy $file...\n";
}
bildgroesse(370,440,$Bild2);


function bildgroesse($height,$width,$path)
{
   error_reporting(E_ALL);
   $datei = getimagesize($path);
   
     switch ($datei['mime'])               //aktion für passenden dateityp wählen
     {
         case 'image/jpeg':
            $src = imagecreatefromjpeg($path);
            break;
         case 'image/gif':
            $src = imagecreatefromgif($path);
            break;
         case 'image/png':
            $src = imagecreatefrompng($path);
            break;
     }

     if(($width<$datei[0])OR($height<$datei[1]))
     {
         $FaktorHeight=($height/$datei[1]);
         $FaktorWidth=($width/$datei[0]);
          
        if($FaktorHeight>$FaktorWidth)
        {
           $NewHeight=($FaktorWidth*$datei[1]);
           $NewWidth=($FaktorWidth*$datei[0]);
        }
        else
        {
          $NewHeight=($FaktorHeight*$datei[1]);
          $NewWidth=($FaktorHeight*$datei[0]);
        }
     }
     else
     {
        $NewHeight=$datei[1];
        $NewWidth=$datei[0];
     }
    
     echo "newwidth: ".$NewWidth." und height: ".$NewHeight." ";
    
     $tmp=imagecreatetruecolor($NewWidth, $NewHeight);      //Farben
     imagecopyresampled($tmp, $src, 0,0,0,0,$NewWidth,$NewHeight,$datei[0],$datei[1]);   //resample
   
   
     switch ($datei['mime'])                     //Output
     {
         case 'image/jpeg':
            $src = imagejpeg($tmp, $path, 100);   //100=qualität ..0 bis 100 möglich
            break;
         case 'image/gif':
            $src = imagegif($tmp, $path, 100);
            break;
         case 'image/png':
            $src = imagepng($tmp, $path, 100);
            break;
     }    
     imagedestroy($tmp);   
}


Zuletzt bearbeitet von 123456 am Di 11.11.2008 16:42, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Di 11.11.2008 16:58
Titel

Antworten mit Zitat Zum Seitenanfang

auf den ersten blick würde ich sagen, dass du derzeit bild2 resized und dann nochmal resized Grins

Code:

bildgroesse(600,800,$Bild2);
if (!copy($Bild2, $Bild1))
{
   echo "failed to copy $file...\n";
}
bildgroesse(370,440,$Bild2);


oder?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen bilder proportional verkleinern
phpBB Frage - Bilder verkleinern
[php] Bilder während upload verkleinern
Bilder online umrechnen/verkleinern?
Bilder verkleinern > trotzdem scharf
Viele Bilder immer wieder verkleinern
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2, 3  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.