2010-10-07 20 views
0

Je cherche une solution pour télécharger une image, vérifier la résolution la recadrer si nécessaire puis prévisualiser l'image avant qu'elle ne s'imprime sur une toile.Téléchargement d'image, vérification de la résolution, recadrage et prévisualisation. PHP

J'ai trouvé des tas d'exemples de cela mais évidemment rien de plus simple, plus je ne veux pas arracher quelqu'un d'autre travail. ASP n'est PAS une option car le site utilise PHP et se trouve sur une 'boîte nix'.

Tous les pointeurs seraient très appréciés.

Répondre

1

Fondamentalement, le fichier devra être POSTé sur votre script PHP. Vous pouvez le faire avec des formulaires HTML (input type='file') ou jQuery background uploaders. Les téléchargements sont stockés par défaut dans le répertoire temporaire de votre serveur Web, le répertoire courant peut être trouvé en regardant la sortie de phpinfo().

Suivant vérifier la $_FILES globale spécifiquement move_uploaded_file(), vous pouvez trouver le type d'image de la clé type dans le tableau $ _FILES, mais qui peut être manipulé côté client, il serait peut-être préférable de vérifier le type de fichier manuellement using magic byte functions.

Une fois que vous avez téléchargé le fichier, vous devez le manipuler. Vous pouvez utiliser soit GD ou ImageMagick, ImageMagick ne peut pas être intégré à votre version de PHP, GD est assez commun. Je suis plus familier avec GD, donc je vous suggère de vérifier les fonctions imagecreatefromjpeg()/png/gif & imagecopyresampled(), qui peuvent à la fois recadrer et rééchantillonner. Pour savoir si vous devez recadrer/redimensionner, vous pouvez vérifier le rapport d'aspect. Voici une fonction I fouetté:

function fixRatio($x, $y, $ratio) { 
    $ratio = round($ratio,6); 
    $iRatio = round($x/$y, 6); 
    if ($iRatio > $ratio) { 
     $x = ceil($y * $ratio); 
    } else if ($iRatio < $ratio) { 
     $y = ceil($x * (1/$ratio)); 
    } 
    return array('x' => $x, 'y' => $y); 
} 

entrée Vous la largeur, la hauteur & rapport d'aspect désiré & cela va cracher un tableau qui contient les dimensions corrigées. Il est probablement préférable de spécifier le rapport en divisant la hauteur désirée par la largeur désirée, par ex. fixRatio($x, $y, 640/480). Vous pouvez ensuite utiliser cette information pour recadrer l'image w/imagecopyresampled(), en même temps, vous pouvez spécifier à la fonction la largeur de destination & hauteur. Donc, si tout doit être 640x480, alors vous devez spécifier que lorsque vous appelez imagecopyresampled(). Vous pouvez ensuite utiliser iamgejpeg()/gif/png pour afficher l'image en tant que fichier dans un répertoire public sur votre serveur. Comme il est public, vous pouvez le référencer via une URL que ce soit un formulaire HTML demandant à l'utilisateur de confirmer s'il aime ce qu'il voit ou into a canvas element.