php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 01.08.2004, 18:06  
Gast
 
Beiträge: n/a
Standard Verliere Farben beim verkleinern von Bildern

Hallo zusammen,

ich lade Bilder auf eine WEB Seite hoch. Für die Übersicht will ich Thumbnails erstellen. Meine Thumbnails sind aber weitestgehend farblos... so wird aus dem Original:
[img]
http://www.saitc.de/test/20040801175353mvc00012.jpg
[/img]

dieses hässliche Bildchen

[img]
http://www.saitc.de/test/20040801175....jpg_thumb.png
[/img]

Mein Code dazu sieht so aus. Hat jemand eine Idee, wo ich schrauben kann, um das zu lösen?

Code:
//start image verkleinern
$ThumbSizeX=120;
$ThumbSizeY=120;
$ImInf = GetImageSize( $serverbildpfad );
$XSize = $ImInf[0];
$YSize = $ImInf[1];
$scalefactor = min( $ThumbSizeX / $XSize,$ThumbSizeY / $YSize );
if ($scalefactor>1) {$scalefactor=1;};
$dstImage = ImageCreate( $XSize * $scalefactor,  $YSize * $scalefactor );
$farbe_body=imagecolorallocate($dstImage,222,222,222); 
if (strtolower(substr($serverbildpfad,-4))==".gif"){$sourceimg=imagecreatefromgif($serverbildpfad);};
if (strtolower(substr($serverbildpfad,-4))==".jpg"){$sourceimg=imagecreatefromjpeg($serverbildpfad);};
imagecopyresized( $dstImage, $sourceimg,
                  0, 0, 0, 0,
                  $ImInf[0] * $scalefactor ,
                  $ImInf[1] * $scalefactor,
                  $ImInf[0],
                  $ImInf[1]);
imagepng($dstImage,$serverbildpfad."_thumb.png");
//fertig Image verkleinern
Ich benutze GD 2.


Vielen Dank.
Gruß Stefan
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 01.08.2004, 18:08  
Gast
 
Beiträge: n/a
Standard

imagecreate durch imagecreatetruecolor ersetzen
http://de.php.net/manual/de/function...etruecolor.php
  Mit Zitat antworten
Alt 01.08.2004, 18:21  
Gast
 
Beiträge: n/a
Standard Ergebnis bleibt gleich...

@ Jason: vielen Dank, aber das Ergebnis ist -zumindest optisch- gleich.

Ich glaube der Unterschied zwischen den zwei Funktionen ist dass imagecreatetruecolor direkt mit schwarzem Hintergrund daher kommt.

Gruß Stefan
  Mit Zitat antworten
Alt 01.08.2004, 18:29  
Gast
 
Beiträge: n/a
Standard

am leichtesten nimmst du einfach die funktion aus dem tutorial von supertramp:

PHP-Code:
  function mkthumb($img_src,     // Dateiname
                   
$img_width,   // max. Größe in x-Richtung
                   
$img_height,  // max. Größe in y-Richtung
                   
$folder_scr,  // Ordner der normalen Bilder
                   
$des_src)     // Ordner der Thumbs
  
{
    
$image imagecreatefromjpeg($folder_scr."/".$img_src);
    list(
$src_width$src_height) = getimagesize($folder_scr."/".$img_src);
    if(
$src_width >= $src_height)
    {
      
$new_image_width $img_width;
      
$new_image_height $src_height $img_width $src_width;
    }
    if(
$src_width $src_height)
    {
      
$new_image_height $img_width;
      
$new_image_width $src_width $img_height $src_height;
    }
    
$new_image imagecreatetruecolor($new_image_width$new_image_height);
    
imagecopyresampled($new_image$image0000$new_image_width,$new_image_height$src_width$src_height);
    
imagejpeg($new_image$des_src."/".$img_src100);
  } 
dann sollte es keine probleme geben
  Mit Zitat antworten
Alt 01.08.2004, 18:43  
Gast
 
Beiträge: n/a
Standard Jetzt geht es

@Jason: Klasse!

Ich habe zwar nicht das Beispiel übernommen (ich denke es sind nur Schönheitsunterschiede), aber ich habe 'imagecopyresampled' anstatt 'imagecopyresized' genommen... und schon sieht es gut aus

[img]
http://www.saitc.de/test/20040801183....jpg_thumb.png
[/img]

Danke Dir.
Stefan
  Mit Zitat antworten
Alt 02.08.2004, 09:57  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

Zitat:
Zitat von Jason
am leichtesten nimmst du einfach die funktion aus dem tutorial von supertramp
Danke - aber gerade die Zeilen habe ich mit Einverständnis von www.codeschnipsel.net übernommen...
Von mir kam dann nur noch der Rest...
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline   Mit Zitat antworten
Alt 02.08.2004, 20:45  
Neuer Benutzer
 
Registriert seit: 15.01.2004
Beiträge: 22
papalangi
Standard

supertramp, ich habe da mal eine Verständnisfrage.

warum wird in der Funktion kein

Code:
imagedestroy($image) ; 
imagedestroy($new_image);
gemacht?
wird damit nicht langfristig der Server zugemüllt?

MfG

papalangi
papalangi ist offline   Mit Zitat antworten
Alt 02.08.2004, 21:34  
Erfahrener Benutzer
 
Registriert seit: 01.12.2003
Beiträge: 4.113
supertramp
Standard

weil der Sinn der Funktion der ist, dass das thubnail erhalten bleibt. Ich hatte anfangs diese Idee auch - aber mal ehrlich, wenn du eine Seite hast, wo 50 thumbs erstellt werden müssen - und übertragen werden müssen... Das belastet den Server ganz schön und drückt auf die Performence!
Für den Fall, dass du alle thumbnails erstellt hast und eine Überprüfung drin hast:
Zitat:
Code:
if(!file_exists($des_src."/".$value))
dann erstellt er die thumbs nur auf Bedarf! Die Originale, die den Platz "verschwenden", die kann man dann löschen! Also dein 2,5 MB Bild, ist dann überflüssig...
__________________
Aufstrebend, kompetent und werbefrei.
www.developers-guide.net
supertramp ist offline   Mit Zitat antworten
Alt 03.08.2004, 10:28  
Neuer Benutzer
 
Registriert seit: 15.01.2004
Beiträge: 22
papalangi
Standard

Meine Frage zielte eigentlich in eine andere Richtung.
Die Funktion erstellt die Bilder auf der Platte und gibt das image ja nicht zurück.
Blocken mit file_exists ist da evtl sinnvoll, jedoch würde ich mir da
noch einen Parameter wünschen, der ein overwrite erzwingt.

imagedestroy gibt den Speicher frei, der vom Bild belegt wird.
$image und $new_image sind lokale Variablen der Funktion.
Die Frage geht also in Richtung Garbagge-Collection. Wie behandelt PHP das?
Wird der lokale Speicher unmittelbar mit Verlassen der Funktion entsorgt ,
dann ist imagedestroy überflüssig, oder irgendwann, dann wäre ein imagedestroy anzuraten.
Falsch ist es sicher nicht.

Hier mal meine geänderte Version

Code:
function mkthumb($img_src,     // Dateiname
                   $img_width,          // max. Größe in x-Richtung
                   $img_height,         // max. Größe in y-Richtung
                   $folder_scr,          // Ordner der normalen Bilder
                   $des_src,             // Ordner der Thumbs
                   $quality,              // Qualitaet  30 -- 100 
                   $overwrite);        //  erzwingt überschreiben  true/false 
 {
  if(!file_exists($des_src."/".$img_src)  || $overwrite) {
    $image = imagecreatefromjpeg($folder_scr."/".$img_src);
    list($src_width, $src_height) = getimagesize($folder_scr."/".$img_src);
    if($src_width >= $src_height)
    {
      $new_image_width = $img_width;
      $new_image_height = $src_height * $img_width / $src_width;
    }
    if($src_width < $src_height)
    {
      $new_image_height = $img_width;
      $new_image_width = $src_width * $img_height / $src_height;
    }
    $new_image = imagecreatetruecolor($new_image_width,  $new_image_height);
    imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
    imagejpeg($new_image, $des_src."/".$img_src, $quality);

    // Memory freigeben
    imagedestroy($image);
    imagedestroy($new_image);
  }
 }

Gruß papalangi
papalangi ist offline   Mit Zitat antworten
Alt 04.08.2004, 11:59  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Hi.

Laut den Notes im Manual wird der Speicher nichtmal nach dem Beenden des Skriptes geleert. Ich denke mal, das ist inzwischen behoben, aber dazu fehlen mir Infos. Deshalb wohl besser mal von Hand freigeben...

Basti
Basti ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bild hochladen --&amp;amp;gt; verkleinern --&amp;amp;gt; in Datenbank speich Datenbanken 6 28.02.2011 06:00
Farben versaut fyp PHP-Fortgeschrittene 18 04.04.2008 11:43
Ganz einfaches Programm zum verkleinern von Bildern Plague Off-Topic Diskussionen 10 05.11.2007 10:58
RGB-Farben miteinander vergleichen, Farben aus Bild filtern scraddy PHP Tipps 2006 10 31.10.2006 10:16
Bild verkleinern und EXIF BaedDog PHP-Fortgeschrittene 7 18.04.2006 12:44
bilder uploaden und verkleinern PHP Tipps 2006 1 13.01.2006 00:28
Farben im IE HTML, Usability und Barrierefreiheit 7 23.09.2005 22:31
verliere Session Sonja PHP Tipps 2005 3 27.04.2005 09:32
Bilder automatisch bei der Anzeige verkleinern. PHP Tipps 2004 3 16.08.2004 07:27
Welcher Provider? Will Bilder uploaden und verkleinern? PHP Tipps 2004 7 08.07.2004 16:56
2 oder mehrere Farben nach einander anzeigen TheSkaterFriend PHP Tipps 2004 2 07.06.2004 20:59

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php verkleinern farbe, gd bild runterrechnen 16 farben, php imagecreatefromjpeg farben, php bei seite verlassen session destroy()

Alle Zeitangaben in WEZ +2. Es ist jetzt 22:20 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.