Bonjour,

Suite au tuto très utile de Grafikart sur Imagine, j'ai voulu tester sur un upload d'image, pour la redimensionner, et j'ai donc 'bricolé un peu sa classe est ses fonctions exemples comme suit, mais le pb semble venir du fichier 'uploadé':
Le fichier uploadé :

<?php $fichier=$_FILES'id-de-l-image-dans-mon-formulaire'];?>

L'appel à la fonction:

<?php
image::make_thumbnail($fichier,150,100,'outbound')
;?>

...avec la fonction :

<?php 
static function make_thumbnail($image, $width, $height,$mode){
$dest = 'test_'.$width.'x'.$height.'_' . $mode. '.jpg';
if(file_exists($dest)){
return '<img src="' . $dest . '">';
}
require_once 'imagine.phar';
$imagine = new Imagine\Gd\Imagine();
$size = new Imagine\Image\Box($width,$height);
$imagine->open($image)->thumbnail($size, $mode)->save($dest);
return '<img src="' . $dest . '" alt="' . $dest . '" style="border:blue 3px outset;">';
}
?>

Et j'ai l'erreur:

( ! ) Notice: Array to string conversion in phar://C:/Program Files/wamp/www/Test Imagine/imagine.phar/Gd/Imagine.php on line 2
Call Stack

Time Memory Function Location

1 0.0005 252680 {main}( ) ..\test_form.php:0
2 0.0012 281800 Image::make_thumbnail( ) ..\test_form.php:25
3 0.0514 409872 Imagine\Gd\Imagine->open( ) ..\Image.php:28
4 0.0522 424024 sprintf ( ) ..(null):2

Je précise que je fait ce test sur WAMP en local, et que l'extension phar est activée, et que par ailleurs la librairie Imagine est bien installée et reconnue. Je l'ai testée sur l'exemple de la mosaïque de Grafikart...

Merci à ceux qui ont une idée !
Cordialement,
JMB

3 réponses


JMB
Auteur
Réponse acceptée

La solution ("Ma") solution ci-dessous:
l'upload , avec l'appel à la fonction 'resize' :

<?php 
    if (sizeof($_FILES)==0) {?>
        <form action="<?php echo $_SERVER'PHP_SELF'] ;?>" enctype="multipart/form-data" method="post">
            <input type="file" name="fichier" id="fichier">
            <br/>
            <input type="submit" value="valider">
        </form>
    <?php 
    } else {
        $fichier=$_FILES'fichier']'tmp_name'];
        $mode='outbound';
        echo image::resize($fichier,150,100, $mode);
        echo "<br/>";
        echo image::resize($fichier,450,300, $mode);
     } 
     ?>

et la fonction resize, un peu modifiée:

static function resize($image, $width, $height, $mode){
          $info = pathinfo($image);
          $dest = "test_$width" . "x$height" . "_$mode.jpg";

          if(file_exists($dest)){
             return '<img src="' . $dest . '" alt="'.$dest.'">';
          }
          require_once 'imagine.phar';
          $imagine = new Imagine\Gd\Imagine();
          $size = new Imagine\Image\Box($width,$height);
          $imagine->open($image)->thumbnail($size, $mode)->save($dest);
          return '<img src="' . $dest . '" alt="'.$dest.'">';
    }

Merci à Amethyste !
Je clos le topic, mais vos commentaires sont les bienvenus !
Cdt,
JMB

Je pense qu'ici tu te goure :

<?php $fichier=$_FILES'id-de-l-image-dans-mon-formulaire'];?>

Il faut que

<?php $fichier = 'chemin/vers/ton/image.jpg';?>

Alors que là tu dois certainement lui passer un array.

JMB
Auteur

Merci pour ta réponse améthyste.
En effet $_FILES'...'] est un array...et je n'avais pas réfléchi que le traitement pourrait être différent pour IMAGINE de celui qu'on peut faire pour traiter des images "uploadées", comme celle ci-dessous que j'utilisais couramment:

<?php
 function create_event_thumb_pix($original_file,$thumbnail,$function_suffix,$pix_max_width,$pix_max_height) {
        $size = GetImageSize( $original_file );
        /*echo "width: ".$size[0]." height : ".$size[1]."<br>";*/
        if($size[0] > $size[1]) {
            $thumbnail_width = $pix_max_width;
            $thumbnail_height = (int)($size[1] * ($pix_max_width / $size[0]));
        } else {
            $thumbnail_width = (int)($size[0] * ($pix_max_height / $size[1]));
            $thumbnail_height = $pix_max_height;
        }
        // Build Thumbnail with GD 2.x, you can use the other described methods too
        $function_to_read = "ImageCreateFrom".$function_suffix;
        $function_to_write = "Image".$function_suffix;
        // Read the source file
        $source_handle = $function_to_read ( $original_file ); 
        if($source_handle){
            // Let's create an blank image for the thumbnail w/GD 2
            $destination_handle = ImageCreateTrueColor($thumbnail_width, $thumbnail_height );
            // Now we resize it w/GD 2
            ImageCopyResampled( $destination_handle, $source_handle, 0, 0, 0, 0, $thumbnail_width, $thumbnail_height, $size[0], $size[1] );
        }
            // Let's save the thumbnail
            $function_to_write( $destination_handle, $thumbnail );
}
?>

Bref, je vais retraiter le tableau $_FILES'...'], pour en tirer le chemin, le nom du fichier provisoire, etc...pour pouvoir traiter l'image ...finalement.

Je posterais ma solution pour revue et commentaires, et je taggerais le sujet "clos" à ce moment là ...
Merci !
Cdt,
JMB