Bräucht mal en Script mit GD...

Alles, was PHP betrifft, kann hier besprochen werden.

Bräucht mal en Script mit GD...

Postby HardySim » 19. February 2004 16:40

Hey jungs.., ich bräucht mal hilfe..

kann mir einer en script geben, bzw. hat ma jmd was gesehen was mir:

- ein bestehendes bild (was per zufall ermittelt wird) auf ne kleinere größe verkleinert und das dann auf die seite ausgibt.. also praktisch irgendwie des bild copiert, koeuen macht und in nen chache ordner schiebt, weil ich das immer nur für den einen aufruf der seite brauch und net immer das große bild verwenden will..

müsst doch mit GD gehn, nur komm ich damit echt net zurecht..

wenn jmd was hat, bite melden!! :oops:
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby Stefan » 19. February 2004 18:47

Servus mr panic,

*** http://de.php.net/manual/de/function.im ... esized.php


Code: Select all
<?php
/**
 * Wo Du das Bild herholst, ist Deine Sache.
 *
 * @param string  $IMAGE_SOURCE * Quelle des Bildes            -> "/home/fauler/sack/na_und.jpg"
 * @param int     $THUMB_X      * Neue Breite des Bildes       -> "90"
 * @param int     $THUMB_Y      * Neue Höhe des Bildes         -> "150"
 * @param string  $OUTPUT_FILE  * Ort und Name der neuen Datei -> "/home/wenig/arbeit/schoenes_bild.jpg"
 */

function createthumb($IMAGE_SOURCE,$THUMB_X,$THUMB_Y,$OUTPUT_FILE){
  $BACKUP_FILE = $OUTPUT_FILE . "_backup.jpg";
  copy($IMAGE_SOURCE,$BACKUP_FILE);
  $IMAGE_PROPERTIES = GetImageSize($BACKUP_FILE);
  if (!$IMAGE_PROPERTIES[2] == 2) {
   return(0);
  } else {
   $SRC_IMAGE = ImageCreateFromJPEG($BACKUP_FILE);
   $SRC_X = ImageSX($SRC_IMAGE);
   $SRC_Y = ImageSY($SRC_IMAGE);
   if (($THUMB_Y == "0") && ($THUMB_X == "0")) {
     return(0);
   } elseif ($THUMB_Y == "0") {
     $SCALEX = $THUMB_X/($SRC_X-1);
     $THUMB_Y = $SRC_Y*$SCALEX;
   } elseif ($THUMB_X == "0") {
     $SCALEY = $THUMB_Y/($SRC_Y-1);
     $THUMB_X = $SRC_X*$SCALEY;
   }
   $THUMB_X = (int)($THUMB_X);
   $THUMB_Y = (int)($THUMB_Y);
   $DEST_IMAGE = imagecreatetruecolor($THUMB_X, $THUMB_Y);
   unlink($BACKUP_FILE);
   if (!imagecopyresized($DEST_IMAGE, $SRC_IMAGE, 0, 0, 0, 0, $THUMB_X, $THUMB_Y, $SRC_X, $SRC_Y)) {
     imagedestroy($SRC_IMAGE);
     imagedestroy($DEST_IMAGE);
     return(0);
   } else {
     imagedestroy($SRC_IMAGE);
     if (ImageJPEG($DEST_IMAGE,$OUTPUT_FILE)) {
       imagedestroy($DEST_IMAGE);
       return(1);
     }
     imagedestroy($DEST_IMAGE);
   }
   return(0);
  }

} # end createthumb
?>



Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby HardySim » 19. February 2004 19:45

na bitte :) siehste kris - einfach posten, wenn mans eh weiß und dann schau ich mir das an und bin schon viel schlauer :)

spezial thx an stefan :)
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby HardySim » 19. February 2004 19:54

ok, aber nun zum debuggen :P

geht natürlich nich.. habs schon mit dem copy versucht, aber da kommt folgende fehlermeldung:
Warning: Unable to create 'images/cache/random_03-12-31-Silvesterparty-Eltville_123.JPG_backup.jpg': No such file or directory in /home/p/party-safari.net/public_html/party-safari/sites/home.php on line 29


in zeile 29 steht
Code: Select all
copy($IMAGE_SOURCE,$BACKUP_FILE);


aufrufen tu ich das ganze mit

Code: Select all
$album_data = mysql_fetch_array(mysql_query("SELECT title FROM cpg11d_albums WHERE aid = ".$random_pic['aid']." ORDER BY aid LIMIT 1"));

$source = 'album/albums/'.$random_pic['filepath'].$random_pic['filename'];

createthumb($source,200,148,'images/cache/random_'.$random_pic['filename']);


$random_pic['filepath'] = '/album/albums/userpics/xxx/';
$random_pic['filename'] = '03-12-31-Silvesterparty-Eltville_123.JPG_backup.jpg';


die datei gibts und wenn ich sie einfach über 'album/albums/'.$random_pic['filepath'].$random_pic['filename'] aufrufe, dann findet er sie auch ..

aber wie gesagt, schon beim copy gibt er mirn fehler und ich weiß net warum :( des verzeichnis hat chmod777

any ideas !?
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby Stefan » 19. February 2004 20:25

Servus,

na dann versuch auch aus den Fehlern zu lernen!

Warning: Unable to create [...] No such file or directory in [...]


Nach was sieht das aus?
Was steht da?

"No such file or directiory" -> http://babelfish.altavista.com/babelfish/tr

Ich habs eben auch versucht, klappt einwandfrei.

Grenze alle Fehlerquellen aus, versuche es klassisch

$IstBild ="/home/fauler/sack/lernt_schwer.jpg";
$sollBild = "/home/fauler/sack/lernt_schwer_thumb.jpg";
createthumb($IstBild,50,50,$sollBild);

vergiss nicht das das "sack" Verzeichniss 0777 braucht.

Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby HardySim » 19. February 2004 20:28

jo, bin ja schon fleißig bei der fehelreingrenzung..

also datei in selben ordner mit anderer endung kopieren is np..

datei mit selbem namen in untergeordneten ordner kopieren geht auch

aber datei mit sleben namen in übergeordnetem ordner (../) kopieren gibt zwar keinen fehler, abver die datei wird net erstellt..


PS: ich hab hier nur GD 1.x ... gibts des auch für die 1er version (die befhele stehn alle fürs 2.x)
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby Stefan » 19. February 2004 20:49

HardySim wrote:aber datei mit sleben namen in übergeordnetem ordner (../) kopieren gibt zwar keinen fehler, abver die datei wird net erstellt..


Benutze den ganzen Pfad -> "/home/blal/".

PS: ich hab hier nur GD 1.x ... gibts des auch für die 1er version (die befhele stehn alle fürs 2.x)


aaah so,

such nach der Zeile
Code: Select all
$DEST_IMAGE = imagecreatetruecolor($THUMB_X, $THUMB_Y);


und ändere sie in
Code: Select all
 $DEST_IMAGE = imagecreate($THUMB_X, $THUMB_Y);


Ich glaube die Funktion "imagecreatetruecolor" *** http://de.php.net/imagecreatetruecolor
besteht auf die GD2.

Versuchs mal.

Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby HardySim » 19. February 2004 21:03

hmm, thx, thx :)

*freu*

geht! (warn tippfehler - was auch sonst *g*)


ok, dann zum nächsten... kann ich den zeitpunkt auslesen, an dem ne datei (das cache bild) erstellt wurde? damit ich die alten bilder löschen kann??


also ich bräucht sowas wie image_creation_date (oder so) und den befehl zum löschen (rm?)
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby Stefan » 19. February 2004 21:26

Wenn Du nur ein einziges Bild benötigts (Oder je eines für verschieden Bereiche), wäre es eine Lösung einfach immer den gleichen Dateinamen zu benutzen. Das hätte zur Folge, das die eine Datei immer wieder mit neuem Inhalt überschrieben wird. D.h das Du in der Seite, in der das Bild eingebunden wird auch nicht die Quelle ändern musst. Und trotzdem jeden Tag ein anderes Bildchen erscheint.

Wenn das nicht geht, würde ich einfach das Datum an den Dateinamen hängen. z.B "derFauleSackwillNixSchaffe_19.02.04.jpg". Du erreichst diese Formatierung mit "$date(d.m.Y)".
Um die alten Bilder zu löschen, solltest Du einfach das Verzeichnis in dem die Bilder sind durchlaufen und prüfen ob die Datei(en) nicht mit dem aktuellen Datum+.jpg endet. Tut sie das nicht löschen!


Alles klar Herr Kommissar?
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby HardySim » 20. February 2004 12:19

jojo.. nur wie is der befehl zum löschen?

ich mein das is jetzt die gute frage, also das bild erscheint bei jedem aufruf auf die seite.. wenn nun also 2 user gleichzeitig drauf sin braucht er auch zu dem zeitpunkt 2 bilder..

naja, also das mit dem datum hört sich schonma gut an :) datum anhängen, checken obs z.b. älter als 30mins oder so is und dann löschen.. :)

löschen mit delete !?



[EDIT]

habs hinbekommen, ganz von alleine :) *freu*

Code: Select all
function pic_unlink()
{
   $gestern = time()-60*60*24;

   $handle = opendir('images/cache');
   while ( $file = readdir ($handle) )
   {
      if ( $file != '.' && $file != '..' )
      {
         $del_file = str_replace( date('d-m-y', $gestern ) , '' , $file );
      
         if ( $del_file != $file )
         {
            unlink('images/cache/'.$file);
         }
      }
   }
   closedir($handle);
}


vielleicht gehts noch kürzer, aber das doch schonma was, oder :)
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim

Postby Stefan » 22. February 2004 22:25

Ave Hardy!

Kannst stolz auf Dich sein!
Auch wenns aussieht, als wäre's aus irgendeinem Tuto :-)
Weiter so!

Gruß
Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby HardySim » 23. February 2004 15:24

Stefan wrote:Ave Hardy!

Kannst stolz auf Dich sein!
Auch wenns aussieht, als wäre's aus irgendeinem Tuto :-)
Weiter so!

Gruß
Stefan


warum sagen immer alle, mein code sieht aus wie aus nem tut - vielleicht weil ich übersichtlich texte? *g*

naja, funzt underbar :) thx @ all
[url=http://www.hardysim.de]
Image[/url]
www.party-safari.net
User avatar
HardySim
 
Posts: 325
Joined: 19. June 2003 10:22
Location: Geisenheim


Return to PHP

Who is online

Users browsing this forum: No registered users and 15 guests