Toon posts:

[PHP] Image resize script

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben hopeloos geloof ik, ik heb na veel gelezen te hebben in het forum, op PHP.net en vele websites een script geprobeerd te schrijven waarmee ik via een eenvoudig formuliertje een foto van willekeurige afmetingen kan uploaden en resizen.

Als ik hem probeer krijg ik continue de melding dat ik probeer de volgende foutmelding:

Warning: imagesx(): supplied argument is not a valid Image resource in /var/www/html/hobe/www/Pictures/TMP9s2tw4wcb6.php on line 25

Warning: imagesy(): supplied argument is not a valid Image resource in /var/www/html/hobe/www/Pictures/TMP9s2tw4wcb6.php on line 25

Warning: imagecopyresized(): supplied argument is not a valid Image resource in /var/www/html/hobe/www/Pictures/TMP9s2tw4wcb6.php on line 25

Het ligt dus aan iets basics -> hoe kan ik de file die wordt geupload $imgfile manipuleren, ik heb al geprobeerd in plaats van $orgfile gewoon $imgfile te gebruiken maar dat werkt ook niet.

Dit is waarschijnlijk dermate simpel dat het nergens beschreven staat want ik ben er al een paar weken |:( af-en-aan mee bezig om het werkend te krijgen.

Is er iemand die me hierbij in de juiste richting kan sturen voor informatie of een oplossing?


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
<?php ?>
<html>
<head>
<title>Test upload resize</title>
<?

if ($REQUEST_METHOD == "POST") 
{
    $uploaddir = "./";
    $pext = getFileExtension($imgfile_name);
    $pext = strtolower($pext);
    if (($pext != "jpg")  && ($pext != "jpeg"))
    {
        print "<p>Alleen JPEG is toegestaan<br><br>";
        print "Dus geen: $pext</p>\n";
        exit();
    }
    $imgsize = GetImageSize($imgfile);
    if (($imgsize[0] > 270) || ($imgsize[1] > 205)) 
    {
$new_w = 270;
$new_h = 205;
$orgfile = $imgfile;
$img_dest = imagecreate($new_w,$new_h);
imagecopyresized($img_dest,$orgfile,0,0,0,0,$new_w,$new_h,imagesx
($orgfile),imagesy($orgfile));
}
    $final_filename = str_replace(" ", "_", $imgfile_name);
    $newfile = $uploaddir . "/$final_filename";
    if (is_uploaded_file($imgfile))
    {
       if (!copy($orgfile,"$newfile")) 
       {
          print "Error Uploading File.";
          exit();
       }
     }
    unlink($imgfile);
    print("[img]\"$final_filename\">");
}
?>

</head>
<body[/img]

    <h2>Upload and Resize an Image</H2>

    <form action="<?=$SCRIPT_NAME; ?>" method="POST" 
enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="500000">

    <p>Upload Image: <input type="file" name="imgfile"><br>
    <font size="1">Click browse to upload a local file</font><br>
    <br>
    <input type="submit" value="Upload Image">
    </form>

</body>
</html>
<?
    function getFileExtension($str) {

        $i = strrpos($str,".");
        if (!$i) { return ""; }

        $l = strlen($str) - $i;
        $ext = substr($str,$i+1,$l);

        return $ext;

    }
?>

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-08 12:42

Janoz

Moderator Devschuur®

!litemod

Die foutmeldingen zeggen heel mooi dat je image functies wilt uitvoeren op iets wat geen image is. Dat is ook erg logisch aangezien $orgimg en $imgfile helemaal geen plaatjes zijn, maar gewoon stukjes tekst met daarin een bestandsnaam. Kijk ff hoe je van een bestandsnaam naar een image komt (loadimage createfrom jpeg ofzo??)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • R_W
  • Registratie: Oktober 2002
  • Niet online

R_W

Je moet eerst het bestand nog inlezen met:
http://www.php.net/manual...n.imagecreatefromjpeg.php

En daarna kun je de afmetingen achterhalen.

Verwijderd

Topicstarter
Ahhhh, tjonge jonge en daar ben ik nou al zolang mee bezig!

Perfect bedankt voor de info, ik ga er meteen weer aan werken.

Verwijderd

Topicstarter
Dan heb ik nog wel een vraagje over het tijdelijke bestand...

Op mijn linux server wordt inderdaad in /tmp een tijdelijk bestand aangemaakt waarin de file staat, alleen verdwijnt deze weer direct ook als ik unlink($imgfile); (zie regel 38) weghaal.

Het gevolg laat zich raden ik krijg een foutmelding dat het betreffende bestand niet bestaat, weet iemand hoe ik ervoor kan zorgen dat dat bestand gewoon blijft bestaan?
In ieder geval tot ik $orgimg via createimagefromjpeg($imgfile); heb uitgevoerd?

Verwijderd

Kopieren naar een eigen directory, zie http://nl.php.net/manual/nl/features.file-upload.php voor meer info. Ik dacht dat het moest met move_uploaded_file()...

Verwijderd

Topicstarter
Okay, ga ik proberen, de aanhouder wint zeggen ze...

Verwijderd

PHP:
1
$orgfile = $imgfile;


Gebruik liever:
PHP:
1
$orgfile = $_FILES["imgfile"];
(Zie ook FAQ van P&W)

Verwijderd

Topicstarter
Juist en dan hoef ik hem dus niet te verplaatsen? Want ik sta nog steeds raar te kijken dat die file in /tmp zo snel weer verdwijnt zonder dat ie daar opdracht voor heeft gehad.

Ga ik ook meteen even proberen, i'll keep you posted.

Altijd geinig als je zit te twijfelen of het nou aan je linux installatie ligt of aan je script ;)

Verwijderd

$_FILES heeft niks te maken met het verplaatsen van het bestand, maar is een betere manier van scripten. Dat het bestand in /tmp verdwijnt is ook de bedoeling, tmp staat immers voor tempory (tijdelijk, maar dat weet je denk ik zelf ook wel ;)). Je moet het bestand dus verplaatsen naar een ander path, daar zal het niet verwijderd worden. Gebruik hiervoor copy() of (zoals ik hierboven al zei) move_uploaded_file().

Verwijderd

Topicstarter
Okay, dus de stappen om dit goed te doen zijn:

Via het form bestand uploaden -> staat dan in /tmp zonder extensie

copy() of move_uploaded_file() -> staat dan op de opgegeven locatie

imagecreatefromjpeg($de_nieuwe_naam_van_copy_of_move)

imagecreate(width,height) -> dit wordt het doelbestand

imagecopyresized(met,alle,nodige,specificaties)

copy(doelbestand,uiteindelijke_locatie)

unlink(de_bestanden_die_zijn_aangemaakt)

Dan gaan we dat even proberen, ik weet dat er maar één persoon tegelijkerijd met het bestand zal werken dus dan kan ik neem ik aan zonder risico's een vaste naam voor het tijdelijke bestand gebruiken. :)

[ Voor 0% gewijzigd door Verwijderd op 02-11-2002 16:50 . Reden: Oops spelfoutjes ]


  • Reignman
  • Registratie: Februari 2001
  • Laatst online: 26-11-2021
Ik heb een database met gegevens waarin in een record de url's moeten komen van 10 plaatjes.

Voorbeeld:

id first last street image1 image2 .... image10
1 Bob Smith Bstraat 12 url1 url2 .... url10
2 Jan Jans Kstraat 24 url1 url2 .... url10


Ik heb al het script om de database te vullen & te editen etc.

Maar nu wil ik in dat script dus met PHP in een form tot 10 plaatjes per record kunnen uploaden naar een directory op de server. Die moet naar een bepaald formaat worden gebracht (dus origineel = 640 * 480, plaatje moet geresized worden naar 213 * 160).

Tegelijkertijd moet de juiste link van het plaatje in het juiste record komen te staan.

Heeft iemand de juiste PHP code hiervoor?? Ben er nog niet zo super in nl. Begrijp het wel als ik het zie... maar om het wiel nu zelf weet uit te vinden :P

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Reignman:
Heeft iemand de juiste PHP code hiervoor??

Vast wel. Lees je even de Quickstart en de Faq bovenaan de topiclijst?

thnx :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1

Dit topic is gesloten.