2011-11-08 3 views
3

Quelqu'un peut-il me dire comment je peux résoudre le problème suivant:Redimensionner l'image en php après file_get_contents

include('php/resizeImage.php'); 

if($_POST['uploadlink']){ 
    $url = $_POST['uploadlink']; 
    $urlImage = file_get_contents($url); 

    if ($_POST['filename']){ 
     $filename = $_POST['filename'].".jpg"; 
    } else { 
     $urlinfo = parse_url($url); 
     $filename = basename($urlinfo['path']); 
    } 

    $image = new ResizeImage(); 
    $image->load($filename); 
    $image->resizeToWidth(300); 
    $image->save($filename); 

    file_put_contents("images/upload/".$filename, $urlImage); 

    } 

Après avoir reçu les données d'image à partir file_get_contents à partir d'une URL que je veux le redimensionner dans mon script resizeImage qui prend le nom de fichier de l'image en paramètre.

Edit: fonction ResizeImage charge et resizeToWidth:

function load($filename) { 

     $image_info = getimagesize($filename); 
     $this->image_type = $image_info[2]; 
     if($this->image_type == IMAGETYPE_JPEG) { 

     $this->image = imagecreatefromjpeg($filename); 
     } elseif($this->image_type == IMAGETYPE_GIF) { 

     $this->image = imagecreatefromgif($filename); 
     } elseif($this->image_type == IMAGETYPE_PNG) { 

     $this->image = imagecreatefrompng($filename); 
     } 
    } 

function resizeToWidth($width) { 
     $ratio = $width/$this->getWidth(); 
     $height = $this->getheight() * $ratio; 
     $this->resize($width,$height); 
    } 

je n'ai pas du mal à le faire lorsque l'utilisateur sélectionne une image locale par input type = 'fichier'.

if (isset($_FILES["uploadedfile"])){ 
     $ufilename = $_FILES["uploadedfile"]["name"]; 
     $ufiletmpname = $_FILES["uploadedfile"]["tmp_name"]; 

     $image = new ResizeImage(); 
     $image->load($ufiletmpname); 
     $image->resizeToWidth(300); 
     $image->save($ufiletmpname); 
} 

Un autre problème: Je transmets le nom de l'utilisateur à mon script parce que je veux créer un dossier individuel pour chaque utilisateur, de sorte qu'ils ne peuvent voir leurs propres images téléchargées.

$admin = $_GET['admin']; 
file_put_contents("images/upload/".$admin."/".$filename, $urlImage); 

Pourquoi cela ne fonctionne-t-il pas pour moi?

Merci.

Répondre

1

Qu'est-ce que ResizeImage?

Si elle était moi, je ferais:

$data = file_get_contents($name); 

$image = imagecreatefromstring($data); 

// resize the image 
+0

Je vais essayer ça. Merci. ResizeImage est la classe "my own". J'ai inséré la fonction load et resizeToWidth dans l'original msg –

+0

Est ne fonctionne pas. Je peux redimensionner l'image après avoir créé imagecreatefromstring mais je ne peux pas utiliser file_put_contents avec l'image $ comme paramètre. –

+0

Vous n'avez pas besoin d'utiliser 'file_put_contents()'. Utilisez 'imagepng ($ image, $ filename);' à la place. Vous devriez également lire les documents PHP sur cette extension ... – Christian

2

facile.
Il suffit de modifier le code de ce vôtre classe ResizeImage pour le rendre capable d'exploiter le contenu binaire de l'image en plus du nom de fichier.

Votre deuxième question est assez simple aussi.
Configurez votre installation PHP pour qu'elle affiche des erreurs sur l'écran (pour le serveur de développement, bien sûr!) Et vous verrez la réponse exacte à votre question, "Pourquoi cela ne fonctionne-t-il pas pour moi?".

error_reporting(E_ALL); 
ini_set('display_errors',1); 

aide généralement.
(vérifiez également que votre code n'effectue aucune redirection HTTP qui pourrait masquer les messages d'erreur)

+0

Merci. Je n'ai pas écrit moi-même la classe resizeImage mais j'essaierai. –

1

Pour votre première question, la ResizeImage est votre propre classe, ou quelque chose que vous avez téléchargé sur Internet. Pour vous aider, nous devons le voir. Pour la deuxième partie, file_put_contents ne créera pas de répertoires pour vous, pour cela, vous devez utiliser la fonction mkdir.

+0

Ok, mais j'ai déjà essayé de pré-créer un dossier sur le serveur avec exactement le même nom que $ admin, et cela n'a pas fonctionné non plus –

+0

J'ai essayé le mkdir. Il ne crée même pas le dossier. Peut-il y avoir des restrictions sur le FTP? –

+0

alors c'est probablement un problème d'autorisation - l'utilisateur de votre script php (serveur web) ne peut pas écrire le répertoire cible. Cela n'a rien à voir avec le protocole/serveur ftp. Vous devriez changer les permissions du dossier. – Dutow