WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Problem med storleksändring på bilder! (https://www.wn.se/forum/showthread.php?t=12199)

dannegrun 2006-02-05 18:05

Hej!

Jag har ett PHP-script som laddar upp bilder och ändrar storleken på dem. Problemet är bara att jag får ett felmeddelande som jag inte kan hitta någon lösning på. Jag har även testat mede imagecopyresized och får samma felmeddelande. Om någon kan hitta felet vore jag jättetacksam!!? :)

Felmeddelande:
-------------------
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /home/b/botema/www/adminpic.php on line 89

Warning: imagedestroy(): supplied argument is not a valid Image resource in /home/b/botema/www/adminpic.php on line 91
Filen är uppladdad till servern och informationen är inlagd i databasen!

Kod:
------
$filnamnet = basename($_FILES['filen']['name']); //Filnamnet
$servernamn = $_FILES['filen']['tmp_name']; //Tempfilen på servern
list($filminusext, $ext) = explode(".", $filnamnet);

if ($ext == "jpg") {
$path = dirname(__FILE__);
$uploaddir = $path . '/bilder/brf/';
$uploadfile = $uploaddir . $filnamnet;
$targetfile = $uploadfile;

if (move_uploaded_file($servernamn, $uploadfile)) {
list($width, $height) = getimagesize($uploadfile);

if ($width > $height) {
$forhallande = $height / $width;
} else {
$forhallande = $width / $height;
}

$newwidth = 150;
$newheight = round(abs($newwidth * $forhallande));
$destimg = imagecreatetruecolor($newwidth, $newheight);
imagecopyresampled($destimg,$uploadfile,0,0,0,0,$n ewwidth,$newheight,$width,$height);
imagejpeg($destimg,$targetfile,80);
imagedestroy($uploadfile);
imagedestroy($destimg);

elofsson 2006-02-05 18:18

Verkar inte som att scriptet hittar bilden. Rätt sökväg?

dannegrun 2006-02-07 20:33

Japp.
Alla sökvägar till filen som jag hämtar med koden:
$path = dirname(__FILE__);
$uploaddir = $path . '/bilder/brf/';
$uploadfile = $uploaddir . $filnamnet;
är rätt. Ändå verkar det vara den filen som felmeddelandena gäller. En fil med rätt storlek skapas,

$destimg = imagecreatetruecolor($newwidth, $newheight);

alltså den mindre storleken.
Men den utför inte raden med imagecopyresampled vilket gör att när raden

imagejpeg($destimg,$targetfile,80);

körs kopieras det bara in en svart bild på rätt plats med rätt filnamn. Så på den raden fungerar ju filen och sökvägen ($targetfile)!?

Har även testat med $targetfile i imagecopyresampled och $uploadfile i imagejpeg(). Vill sig ändå inte...

PeterM 2006-02-07 21:54

Variabeln $uploadfile är ju bara sökväg och filnamn på filen du vill behandla. Du måste använda imagecreatefromjpeg() eller motsvarande för att skapa en bildresurs att arbeta med.

elofsson 2006-02-07 21:54

Verkar ju alltså som att scriptet inte hittar bilden som du laddar upp, då skapas en svart/tom bild istället. Kör en kontroll vid uppladdning så att du är säker på att källbilden finns där. Se följande för att köra en felkontroll på uppladdningen:
http://se.php.net/manual/en/features.file-...load.errors.php

dannegrun 2006-02-07 22:16

Underbart!!!!
Att det skulle vara en så liten sak... :)
Otroligt mycket tack!!

Lade till raden
$targetfile = imagecreatefromjpeg($uploadfile);
innan raden med imagecopyresampled och använde sedan $targetfile framöver.

Ska kika lite mer på error-hanteringen också. Verkar vara en enklare och lite smartare hantering av fel. :)

elofsson 2006-02-07 22:47

Citat:

Originally posted by dannegrun@Feb 7 2006, 23:16
Ska kika lite mer på error-hanteringen också. Verkar vara en enklare och lite smartare hantering av fel.
Fint. Då var mitt inlägg inte postat i onödan även om det inte var rätt lösning på ditt problem. :)

vco-systems 2006-02-08 20:35

Citat:

Originally posted by dannegrun@Feb 5 2006, 19:05
list($filminusext, $ext) = explode(".", $filnamnet);

if ($ext == "jpg") {

Bättre att använda kolla filtypen istället för filändelsen.

Kod:

switch($_FILES['filen']['type']) {
        case 'image/jpeg':
        case 'image/pjpeg':
 $targetfile = imagecreatefromjpeg($uploadfile);
 break;
        case 'image/png':
        case 'image/x-png':
 $targetfile = imagecreatefrompng($uploadfile);
 break;
        default:

}


Jonas 2006-02-08 21:30

Det finns nackdelar med detta som är nämnda här tidigare.

http://www.webmasternetwork.se/f2t11485.html

dannegrun 2006-02-08 22:46

Det där var intressant läsning.
Tackar!


Alla tider är GMT +2. Klockan är nu 15:19.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson