Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Thumbnails    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Kanufrosch
Mitglied
Anfänger


Dabei seit: 21.03.2009
Herkunft: keine Angabe
Posts: 83
      Zitat | Bearbeiten

naja dorf wird der alternativ trext angezeicgt weilo er kein bild einträgt.
wenn ich das amche steht da auch grafik adresse kopieren ...
aber wenn ich die url kopiere ist das die ul der php seite.
im anhang ist zu sehen was ich sehe und auch was ich seehe beim rechtsklick.


gruß

Dateianhang:
 rechtsklick.jpg  (18 KB, 553 mal herruntergeladen)

04.05.2009, 19:42 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Kann man da auch 2 verschiedene Größen benutzen? Also z.B. Höhe: 80px und Breite: 120px?


10.05.2009, 18:55  
Gast


      Zitat | Bearbeiten

keiner eine ahnung?


10.05.2009, 20:13  
Gast


      Zitat | Bearbeiten

danke sehr hilfreiche antwort. geht dass nun oder nicht?


11.05.2009, 13:28  
spooooongq
Mitglied
Sehr guter User


Dabei seit: 27.02.2009
Herkunft:
Posts: 803
      Zitat | Bearbeiten

ja


Signaturen sind doof
11.05.2009, 16:39 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

und wie kann man das dann machen?


11.05.2009, 18:19  
B.C.
Mitglied
Sehr guter User


Dabei seit: 04.02.2009
Herkunft: Niedersachsen
Posts: 797
      Zitat | Bearbeiten

@Gast guck dir die Funktion an, da wird ausgerechnet, welche Größen das neue Bild bekommt.
Dort lässt du das Ausrechnen (Ob Bild höher als breit ist) einfach weg und gibst für Höhe und Breite halt deine Werte an.


Ich hab mal ne Frage:
Erstmal, vielen Dank für dieses geile Schnipsel, ich benutze das schon lange auf meiner Seite. Aber es gibst Probleme mit Bildern, die Transparenz beinhalten. Bilder, die, wie ich vermute, einen Alphakanal haben, werden zwar verkleinert, aba dann komplett schwarz angezeigt. Wie kann ich also den Alphakanal entfernen und transparente Stellen beispielsweise Weiß einfärben?

Optimal wäre es natürlich, die Transparenz zu behalten =)

*edit* Bei Gif-Bildern funktioniert die Transparenz, allerding ist die HG-ebene schwarz, was die konsequenz hat, dass transpranz schwarz wird. wie bekomme ich nun die HG-ebene auch noch transparent?

Gruß,
Basti




Post wurde schon 3x editiert, das letzte mal am 30.06.2009 um 21:33 von B.C.
30.06.2009, 21:03 Profil | PM | E-Mail  
B.C.
Mitglied
Sehr guter User


Dabei seit: 04.02.2009
Herkunft: Niedersachsen
Posts: 797
      Zitat | Bearbeiten

Hi,

ich hab es nun hinbekommen
Man muss vorerst das ganze, neue Bild mit einer Farbe anmalen, ich male es also mit Transparenz an.
Danach wird das Bild draufkopiert und der Alphakanal gespeichert.

Ich habe die Funtkion mal mit Transparenz etwas verbessert:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
<?php
// Erstellt ein thumbnail eines Bildes
// Ordner unter $speicherordner benötigt ggf. Schreibrechte CHMOD(777)

// Parameter:
// $imgfile: Pfad zur Bilddatei
// $speicherordner: Ordner indem die Thumbnails gespeichert werden sollen
// $filenameOnly: Soll nur der Dateiname als Name für Thumbnail verwendet werden,
// ansonsten inkl. Pfad
function thumbnail($imgfile$speicherordner="./bilder/thumbnail/"$filenameOnly=true)
   {
   
//Max. Größe des Thumbnail (Höhe und Breite)
   
$thumbsize 192;

   
//Dateiname erzeugen
   
$filename basename($imgfile);

   
//Fügt den Pfad zur Datei dem Dateinamen hinzu
   //Aus ordner/bilder/bild1.jpg wird dann ordner_bilder_bild1.jpg
   
if(!$filenameOnly)
      {
      
$replace = array("/","\\",".");
      
$filename str_replace($replace,"_",dirname($imgfile))."_".$filename;
      }

   
//Schreibarbeit sparen
   
$ordner $speicherordner;

   
//Speicherordner vorhanden
   
if(!is_dir($ordner))
      return 
false;

   
//Wenn Datei schon vorhanden, kein Thumbnail erstellen
   
if(file_exists($ordner.$filename))
      return 
$ordner.$filename;

   
//Ausgansdatei vorhanden? Wenn nicht, false zurückgeben
   
if(!file_exists($imgfile))
      return 
false;



   
//Infos über das Bild
   
$endung strrchr($imgfile,".");

   list(
$width$height) = getimagesize($imgfile);
   
$imgratio=$width/$height;

   
//Ist das Bild höher als breit?
   
if($imgratio>1)
      {
      
$newwidth $thumbsize;
      
$newheight $thumbsize/$imgratio;
      }
   else
      {
      
$newheight $thumbsize;
      
$newwidth $thumbsize*$imgratio;
      }

   
//Bild erstellen
   //Achtung: imagecreatetruecolor funktioniert nur bei bestimmten GD Versionen
   //Falls ein Fehler auftritt, imagecreate nutzen
   
if(function_exists("imagecreatetruecolor"))
     
$thumb imagecreatetruecolor($newwidth,$newheight); 
   else
      
$thumb imagecreate ($newwidth,$newheight);

# **** Dieser Abschnitt ist neu **** #

   // Das Bild komplett mit einer Farbe füllen
   // Letzte Zahl von 0 bis 127, 127 = max. transparenz
   
$tranz imagecolorallocatealpha($thumb000127);
   
// Sollte das nicht gehen, benutze das:
   // Gebe da einfach eine Farbe in RGB an, in dieser
   // wird dann die Transparenz angezeigt
   // $tranz = imagecolorallocate($thumb, 255, 255, 255);
   
imagefill($thumb00$tranz); 

# ************************************# 

   
if($endung == ".jpg")
      {
      
imageJPEG($thumb,$ordner."temp.jpg");
      
$thumb imagecreatefromjpeg($ordner."temp.jpg");

      
$source imagecreatefromjpeg($imgfile);
      }
   else if(
$endung == ".gif")
      {
      
imageGIF($thumb,$ordner."temp.gif");
      
$thumb imagecreatefromgif($ordner."temp.gif");

      
$source imagecreatefromgif($imgfile);
      }
   
// AUCH NEU UND MUSS SEIN
   
else if($endung == ".png")
      {
      
imagePNG($thumb,$ordner."temp.png");
      
$thumb imagecreatefrompng($ordner."temp.png");

      
$source imagecreatefrompng($imgfile);
      }

   
imagecopyresized($thumb$source0000$newwidth$newheight$width$height);

   
# *** AUCH NEU *** #
   // Transparenz im Bild speichern
   
imagesavealpha($thumbtrue);

   
//Bild speichern
   
if($endung == ".png")
      
imagepng($thumb,$ordner.$filename);
   else if(
$endung == ".gif")
      
imagegif($thumb,$ordner.$filename);
   else
      
imagejpeg($thumb,$ordner.$filename,100);


   
//Speicherplatz wieder freigeben
   
ImageDestroy($thumb);
   
ImageDestroy($source);


   
//Pfad zu dem Bild zurückgeben
   
return $ordner.$filename;
   }


/* Beispiel */
echo "<img src=\"".thumbnail("foto.jpg")."\" alt=\"Foto\">";
/* Beispiel */
?>


Funktioniert ganz sicher! =)

@Andavos kannst auch gerne diesen Beitrag löschen
und die Transparenz in deiner Funktion einbaun.
Wär nett, wenn de mich erwähnst

Gruß,
Basti




Post wurde schon 5x editiert, das letzte mal am 30.06.2009 um 23:54 von B.C.
30.06.2009, 23:28 Profil | PM | E-Mail  
Kanufrosch
Mitglied
Anfänger


Dabei seit: 21.03.2009
Herkunft: keine Angabe
Posts: 83
      Zitat | Bearbeiten

könntest du mal einen beispiel code angeben ich stell mich da immer ein bissel blöd an
meine parameter sind ganz einfach :
bilder ordner = "bilder"
zielordner = "vorschau"

ich gebe immer den pfad falsch an oder irgendwas mach ich imer falsch



danke im vorraus


07.07.2009, 21:27 Profil | PM | E-Mail  
B.C.
Mitglied
Sehr guter User


Dabei seit: 04.02.2009
Herkunft: Niedersachsen
Posts: 797
      Zitat | Bearbeiten

Hi,

so hab ich auch wenig Ahnung, was du da falsch machst.
Aber wie du in der Funktion siehst, gibt es immer wieder
solche Sachen:

 PHP 
1:
2:
3:
4:
5:
<?php
   
//Ausgansdatei vorhanden? Wenn nicht, false zurückgeben
   
if(!file_exists($imgfile))
      return 
false
?>


Sowas änderst du mal um in:
 PHP 
1:
2:
3:
4:
5:
<?php
   
//Ausgansdatei vorhanden? Wenn nicht, false zurückgeben
   
if(!file_exists($imgfile))
      return 
"Das Bild (Ausgangsdatei) ist nicht vorhanden.";
?>


Das machst du überall, da wo "return false;" steht.
Die Funktion rufst du dann so auf:

echo thumbnail(HIER DIR PARAMETER);

Dann weißt du genau, was falsch ist.

Gruß,
Basti


09.07.2009, 16:55 Profil | PM | E-Mail  
Vielgeist
Mitglied
Exzellenter User


Dabei seit: 26.12.2008
Herkunft: Berlin
Posts: 1371
      Zitat | Bearbeiten

Hi,

ich hab das Problem dass er die Datei nicht hochlädt und demenstrpechend die funktion nicht ausführen kann. ich hab keine Peilung woran das liegt

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:

<?php

//Thumbnail erstellen
move_uploaded_file($_FILES['datei']['name'], "../img/foto/".$_FILES['datei']['name']);

function 
thumbnail($imgfile)
   {
   
//Max. Größe des Thumbnail (Höhe und Breite)
   
$thumbsize 150;

   
//Speicherort der Thumbnails
   //Ordner benötigt ggf. Schreibrechte CHMOD(777)
   
$ordner "img/foto/thumbs/";

   
//Wenn Datei schon vorhanden, kein Thumbnail erstellen
   
if(file_exists($ordner.$imgfile))
      return 
$ordner.$imgfile;


   
//Ausgansdatei vorhanden? Wenn nicht, false zurückgeben
   
if(!file_exists($imgfile))
      return 
false;


   
//Infos über das Bild
   
$endung strrchr($imgfile,".");

   list(
$width$height) = getimagesize($imgfile);
   
$imgratio=$width/$height;

   
//Ist das Bild höher als breit?
   
if($imgratio>1)
      {
      
$newwidth $thumbsize;
      
$newheight $thumbsize/$imgratio;
      }
   else
      {
      
$newheight $thumbsize;
      
$newwidth $thumbsize*$imgratio;
      }

   
//Bild erstellen
      
$thumb imagecreate ($newwidth,$newheight);

   if(
$endung == ".jpg")
      {
      
imageJPEG($thumb,$ordner."temp.jpg");
      
$thumb imagecreatefromjpeg($ordner."temp.jpg");

      
$source imagecreatefromjpeg($imgfile);
      }
   else if(
$endung == ".gif")
      {
      
imageGIF($thumb,$ordner."temp.gif");
      
$thumb imagecreatefromgif($ordner."temp.gif");

      
$source imagecreatefromgif($imgfile);
      }

   
imagecopyresized($thumb$source0000$newwidth$newheight$width$height);

   
//Bild speichern
   
if($endung == ".png")
      
imagepng($thumb,$ordner.$imgfile);
   else if(
$endung == ".gif")
      
imagegif($thumb,$ordner.$imgfile);
   else
      
imagejpeg($thumb,$ordner.$imgfile,100);


   
//Speicherplatz wieder freigeben
   
ImageDestroy($thumb);
   
ImageDestroy($source);


   
//Pfad zu dem Bild zurückgeben
   
return $ordner.$imgfile;

   }

thumbnail($imgfile);

echo 
"<img src=\"img/foto/thumbs/$imgfile\" />";
?>


Was mach ich falsch?


CONTEMPLATION

If today was perfect, there would be no need for tomorrow.


Mein Youtube Channel
20.08.2009, 15:55 Profil | PM | E-Mail  
Vielgeist
Mitglied
Exzellenter User


Dabei seit: 26.12.2008
Herkunft: Berlin
Posts: 1371
      Zitat | Bearbeiten

keiner ne idee?


CONTEMPLATION

If today was perfect, there would be no need for tomorrow.


Mein Youtube Channel
20.08.2009, 17:56 Profil | PM | E-Mail  
B.C.
Mitglied
Sehr guter User


Dabei seit: 04.02.2009
Herkunft: Niedersachsen
Posts: 797
      Zitat | Bearbeiten

Hi,

mit move_uploaded_file(); verschiebst du die hochgeladene Datei nur
(wie der Name schon sagt), aba wo die Datei vor der Verschiebung ist,
erfährst du so:

$_FILES["datei"]["tmp_name"]

also musst du:

move_uploaded_file($FILES["datei"]["tmp_name"], "ordner/".$_FILES["datei"]["name"]);

Sorry, hab dein Post iwie übersehen ...

Gruß,
Basti


20.08.2009, 18:02 Profil | PM | E-Mail  
Vielgeist
Mitglied
Exzellenter User


Dabei seit: 26.12.2008
Herkunft: Berlin
Posts: 1371
      Zitat | Bearbeiten

Hi also Thumb krieg ich jetzt hin. hab ne andere methode gewählt.


CONTEMPLATION

If today was perfect, there would be no need for tomorrow.


Mein Youtube Channel
24.08.2009, 17:19 Profil | PM | E-Mail  
Gast


      Zitat | Bearbeiten

Kleiner Kommentar: Die PNG-Verarbeitung funktioniert nicht. Es fehlt folgender code:


 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//+++++++++++++++

      else if($endung == ".png")
      {
      imagePNG($thumb,$ordner."temp.png");
      $thumb = imagecreatefrompng($ordner."temp.png");

      $source = imagecreatefrompng($imgfile);
      }
      //++++++++++++++++++


an der Stelle, wo auch die anderen Bildarten in der Weise erstellt werden.



MFG

Onkelrocker


21.09.2009, 15:33  
GodHunter
Mitglied
Aktiver User


Dabei seit: 31.08.2008
Herkunft: Deutschland
Posts: 209
      Zitat | Bearbeiten

Hallo,

erstmal danke Andavos für dieses wirklich einfach zu bedienene Script. Funktioniert einwandfrei, allerdings werden bei mir die Thumbnails immer sehr dunkel, liegt das an der Größe der Bilder oder kann ich drauf noch irgendwie einwirken?


19.01.2010, 21:03 Profil | PM | E-Mail  
acadele
Mitglied
Aktiver User


Dabei seit: 12.12.2011
Herkunft: m0m =]
Posts: 120
      Zitat | Bearbeiten

Hallo erstmal!
Auch wenn der Thread bereits uralt ist .. bin vor wenigen Tagen darauf gestoßen und nutze diese Funktion bereits.

Eine kleine Änderung habe ich bisher bereits vorgenommen -> Qualität der Thumbnails verbessern

Evtl. interessiert es den ein' oder anderen der über Google/etc. her stößt.

Ab GD 2.0 gibt es eine alternative Funktion zu ImageCopyResized, welche die Qualität der Bild deutlich verbessert -> ImageCopyResampled

Zeile 105:
 PHP 
1:
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);


Ändern in:
 PHP 
1:
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);


Im Anhang die (deutlich) sichtbare Veränderung.
Bild 1: vorher(imagecopyresized) // Bild 2: nachher (imagecopyresampled)

PS.: Die Datei ist um 5KB kleiner

MfG.

Dateianhang:
 _dergti.jpg  (50 KB, 413 mal herruntergeladen)
 dergti.jpg  (45 KB, 426 mal herruntergeladen)



Post wurde schon 2x editiert, das letzte mal am 13.12.2011 um 22:39 von acadele
13.12.2011, 22:38 Profil | PM | E-Mail  
Hubert
Mitglied
Neuling


Dabei seit: 04.03.2015
Herkunft: D
Posts: 1
     Thumbnail Programmierfehler Zitat | Bearbeiten

Zitat:
Orginal von Gast
Irgendwie funktioniert das nicht immer richtig, mannche .jpg bilder werden gar nicht oder schwarz angezeigt


Hallo,
der Thread ist uralt - wird aber immer noch gefunden. Daher will ich hier die Frage nach den schwarzen Bildern beantworten, nachdem mich die Suche ebenfalls ein paar Stunden gekostet hat und ich an der völlig falschen Stelle gesucht hatte, in der Annahme dass die verwendeten Grafikfunktionen oder die Laufzeit usw. schuld sein könnten.

GRUND:
Der Grund ist aber ganz einfach.
Die Abfragen nach den Dateiendungen ab Zeile 69 (und später nochmal ab Z:87) berücksichtigen nicht den Fall, dass die Dateiendung am Server in Großschreibung vorliegt, z.B. *.JPG statt *.jpg.

FOLGE:
1. Daher wird die Funktion imagecreatefromjpeg(...) nicht aufgerufen, die aus dem umzuwandelnden Bild die später benötigte Grafikresource für das Quellbild erzeugt.
2. Danach wird die Funktion imagecreatetruecolor(...) aufgerufen, die erst mal ein schwarzes Hintergrundbild erzeugt (siehe Manual v. PHP.de).
3. Am Ende wird mit imagecopyresized(...) dieses schwarze Bild in das Zielbild kopiert, weil die o.g. Resource fehlt.
Und schon ist das Kind in den Brunnen gefallen !

Abhilfe
 PHP 
1:
$endung = strtoupper($endung);

einfügen vor Zeile 69 und alle Prüfungen von .jpg auf .JPG (usw.) ändern.
Schon läuft es...

Übrigens
Die Vermutung von B.C. bzgl. des Alphakanals war also nicht der eigentliche Grund für die komplett schwarzen Bilder, aber:
möglicherweise (nicht von mir getestet) wirken sich die von ihm vorgeschlagenen Änderungen auf PNG-Grafiken aus, die Transparenz verwenden. Wer also mit dem Hintergrund von PNGs Probleme hat, sollte sich seinen Beitrag ansehen.

Ausserdem war der Hinweis für das Ersetzen von
 PHP 
1:
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

in
 PHP 
1:
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

ein guter Hinweis. Die Qualität ist besser UND die Dateigröße der Thumbs ist in meinen Tests kleiner ausgefallen, was ein zusätzlicher Vorteil ist.

Dann noch viel Spaß beim Coden...
LG, Hubert


04.03.2015, 10:48 Profil | PM | E-Mail  
Seiten (4):  2  3  4 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Thumbnails   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz