Question

Cette question a été posée avant de mentionner la lib ou includes qui fournit une galerie fonctionnelle, mais je veux en créer une à partir de rien. Donc, toutes les idées sur ce qui suit

  1. Les galeries doivent être téléchargées à l'aide du formulaire et de la recherche (ceci ne me pose aucun problème, il suffit que ce soit là pour décrire les étapes)
  2. Nécessité de créer une vignette lors du téléchargement d'un fichier.
  3. Comment doit-il être structuré dans la base de données, par exemple stocké dans la base de données sous forme d'image ou de nom de fichier

Requirments

  • Uniquement PHP et MySql

Des idées? Dites-moi si cela ne peut pas être fait aussi: D

Merci

Était-ce utile?

La solution

Je vais tenter de répondre à vos questions:

Question 1

Cette partie est en réalité simple. Pour créer un formulaire de téléchargement de fichier, votre code HTML doit ressembler à ceci:

 <form enctype='multipart/form-data' action='CodeTool.php' method='POST'>
     File: <input name='picture' type='file'/>
     <input type='submit' value='Upload'/>
 </form>

Votre formulaire doit avoir enctype='multipart/form-data' et le method doit être POST. Ensuite, pour lire le fichier de téléchargement, vous pouvez simplement utiliser ce qui suit. J'ai également ajouté une validation de base pour m'assurer que le fichier est une image.

 if(isset($_FILES['picture'])) {
     echo "File has been uploaded under temp file " . $_FILES['picture']['tmp_name'];

     // Let's check if the file is an image:
     $fileData = file_get_contents($_FILES['picture']['tmp_name']);

     // Using imagecreatefromstring, that way you don't need to
     // guess the image format.

     if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
         echo " and is a valid image";
     } else {
         echo " and is not a valid image";
     }
 }

Question 2

Pour créer une image miniature, vous pouvez utiliser GD (ou ImageMagick, mais il n'est pas inclus dans la configuration par défaut) en tant que tel ... Continuons à partir de l'instruction imagecreatefromstring if:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // Let's create a 100x100 thumbnail
    $width = imagesx($img);
    $height = imagesy($img);

    $boxSize = min($width,$height);
    $boxX = ($width / 2) - ($boxSize / 2);
    $boxY = ($height / 2) - ($boxSize / 2);

    $thumb = imagecreatetruecolor(100, 100);
    imagecopyresampled($thumb, $img, 0, 0, $boxX, $boxY, 100, 100, $boxSize, $boxSize);

    //$thumb is now a 100x100 thumbnail
}

Question 3

Ici vous avez 2 options. Vous pouvez stocker vos images dans le système de fichiers ou dans la base de données. Pour stocker votre image dans le système de fichiers, procédez comme suit:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    move_uploaded_file($_FILES['picture']['tmp_file'], 'somefile.jpg');
    // the code from the previous example
    imagejpeg($thumb, 'somefile_thumb.jpg');
}

Personnellement, je préfère utiliser la base de données pour stocker les images, car il est plus facile de conserver l’intégrité référentielle et de simplifier la sauvegarde (sauvegarde de la base de données et vous avez terminé). C'est un peu plus lent, mais la différence n'est vraiment pas si géniale:

if(($img = @imagecreatefromstring($fileData)) !== FALSE) {
    // the code from the previous example

    $tmp_thumb = tempnam(sys_get_temp_dir(), 'thumb');
    imagejpeg($thumb, $tmp_thumb);

    $thumbData = file_get_contents($tmp_thumb);

    mysql_query("INSERT INTO images (original, thumb) VALUES ('" . mysql_real_escape_string($fileData) . "', '" . mysql_real_escape_string($thumbData) . "');");
} 

Les champs doivent être BLOB.

Autres conseils

Vous souhaiterez presque certainement stocker les images dans le système de fichiers, puis simplement référencer le nom du fichier \ chemin dans l'entrée de la base de données. Cela réduira la taille des résultats de votre requête, en particulier si vous souhaitez extraire les informations de plusieurs images. . Il est également beaucoup plus facile d’invoquer des éléments tels que imagemagick si vous souhaitez l’utiliser pour créer des vignettes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top