Création de miniatures d'images dont la hauteur et largeur maximale sont fixées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Création de miniatures d'images dont la hauteur et largeur maximale sont fixées

par Gofromiel » 05 nov. 2008, 23:13

Si je peux me permettre, j'ai crée une classe qui pourrait t'aider dans ta quête :

Une classe et sept méthodes pour créer des miniatures en PHP

Exemple d'utilisation :
<?php

function fill_callback($image, $w, $h)
{
    WdImage::drawGrid
    (
        $image, 0, 0, $w - 1, $h - 1
    );
}

$thumbnail = WdImage::resize
(
    $source,
            
    $target_width,
    $target_height,
            
    WdImage::RESIZE_SCALE_MAX,

    'fill_callback'
);

?>
Qui donne un truc du genre (avec trois images témoins) :

Image

Il y a sept méthodes de redimensionnement, tu trouveras peut-être ton bonheur.

++

par KingSora » 04 nov. 2008, 23:51

Ben oui mais tu es bien obligé de les redimensionner à un moment ou un autre.

imagecopyresampled() est la meilleure solution pour le php. Mais effectivement c'est pas super leger au niveau de la conso de ressource...

par x@v » 30 oct. 2008, 22:59

je pensais plutôt à enregistrer les miniatures dans undossier, pour ne pas les afficher et faire des traitement s inutules.

par AB » 30 oct. 2008, 21:01

$t_image_p = imagecreatetruecolor($t_width, $t_height);
        $t_quality = 80;
        switch($extension)
        {
            case 'jpeg':
            case 'jpg':
                $t_image = imagecreatefromjpeg($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagejpeg($t_image_p, $t_filePath, $t_quality);
            break;
            case 'png':
                $t_image = imagecreatefrompng($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagepng($t_image_p, $t_filePath, $t_quality);
            break;
            case 'gif':
                $image = imagecreatefromgif($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagegif($t_image_p, $t_filePath, $t_quality);
            break;
        } 
Cette solution est sympas sur le papier mais en terme de ressource imagecopyresampled() est une des fonction qui fait le plus de calcul, suicidaire pour l'affichage d'une page.
imagecreatetruecolor() ne fonctionne pas avec le format GIF.
http://fr.php.net/manual/fr/function.im ... ecolor.php
Une solution médianne est nécessaire
Tu as oublié que c'était uniquement lors de l'upload ? Et puis il est impossible (sinon je demande à voir comment) de faire du redimensionnement d'image avec une qualité correcte sans utiliser imagecopyresampled().

Donc à quelques détails près c'est du code standard pour de l'upload. Sinon effectivement il y a un souci pour le format GIF. Mais comme il s'agit de redimensionner des photos, supprimer cette case ne devrait pas poser de pb.

par x@v » 29 oct. 2008, 16:49

$t_image_p = imagecreatetruecolor($t_width, $t_height);
        $t_quality = 80;
        switch($extension)
        {
            case 'jpeg':
            case 'jpg':
                $t_image = imagecreatefromjpeg($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagejpeg($t_image_p, $t_filePath, $t_quality);
            break;
            case 'png':
                $t_image = imagecreatefrompng($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagepng($t_image_p, $t_filePath, $t_quality);
            break;
            case 'gif':
                $image = imagecreatefromgif($fileTmpPath);
                imagecopyresampled($t_image_p, $t_image, 0, 0, 0, 0, $t_width, $t_height, $width_orig, $height_orig);
                imagegif($t_image_p, $t_filePath, $t_quality);
            break;
        } 
Cette solution est sympas sur le papier mais en terme de ressource imagecopyresampled() est une des fonction qui fait le plus de calcul, suicidaire pour l'affichage d'une page.
imagecreatetruecolor() ne fonctionne pas avec le format GIF.
http://fr.php.net/manual/fr/function.im ... ecolor.php
Une solution médianne est nécessaire

par dogmongo » 20 oct. 2008, 23:34

Bonsoir

utilise plutôt l'option album photo de dream :wink:


dog

par uspy62 » 20 oct. 2008, 21:27

Merci, je test ça demain.

par AB » 20 oct. 2008, 21:18

menu Fichiers -> traitement par lots. Tu ouvres le dossier contenant tes images, tu cliques sur "ajouter tout" (ou tu choisi tes fichiers un par un) ensuite sur "suivant".
A l'étape suivante tu ajoutes "echelle" et tu choisi "mise à l'échelle de la zone" en rentrant tes paramètres, puis (toujours dans cette même étape) tu ajoutes "exporter" et tu choisis "jpeg qualité supérieure" (tu peux éditer le profil)
et enfin tu passes à l'étape finale pour choisir la destination des enregistrements.

On peut guère faire plus simple.

par uspy62 » 20 oct. 2008, 20:47

La boite dans laquel je bosse a fireworks, quelle est la manipulation à effectuer ?

par AB » 20 oct. 2008, 20:39

Oui c'est possible : menu fichier->automatisation->traitement par lots.

La manip est plus simple à faire avec Fireworks par exemple, mais bon si tu as Photoshop ça te fera l'occasion d'apprendre une fonctionnalité de plus. Et si tu ne trouve pas facilement il devrait bien y avoir quelques tutos à ce sujet sur google :wink:

par uspy62 » 20 oct. 2008, 18:56

Je vais miniaturiser avec photoshop les images deja présentes sur le site puis mon script php fera le reste pour les nouvelles images.

Par contre, c'est peut-être trop demander mais comment fait-on avec photoshop pour créer des miniatures à la volée avec comme paramètres une largeur et une hauteur maximale.

En fait je voudrais par exemple que toutes les images de mon dossier "photos/" puissent être redimensionnées par photoshop en gardant ses paramètres.

C'est possible ?

Merci d'avance.

par AB » 19 oct. 2008, 22:38

L'astuce photoshop c'est pas forcement la meilleure du tout!
Imagine que tu as d'autres fichiers qui prennent du poids dans tes dossiers ? tels que des vidéos?

Et puis le script de miniaturisation faut le faire dans tous les cas pour quand l'utilisateur upload une photo :)
Oui j'utilise un script très semblable au tiens pour un redimensionnement lors de l'upload http://www.phpfrance.com/forums/voir_re ... php#266544

Mais quand j'ai le temps je fais du redimensionnement avec logiciel photo et traitement par lot. Simplement parce qu'il est impossible (d'après mes nombreux essais) d'obtenir un résultat de qualité équivalente avec les fonctions php bien que le résultat soit suffisant dans la plupart des cas.

par yakou32 » 19 oct. 2008, 19:42

oui, tout à fait, je suis d'accord avec vous pour les nouvelles images.
Le code calculant les dimensions du thumbnail en fonction du ratio de l'image originale est vraisemblablement la meilleure solution lors de l'upload d'une image.
Je parlais juste d'une solution rapide pour le concepteur du site pour rattraper le coup si le mal était déjà fait avec 500 thumbnails déjà en ligne et qu'il faut remplacer.

par fab » 19 oct. 2008, 17:18

L'astuce photoshop c'est pas forcement la meilleure du tout!
Imagine que tu as d'autres fichiers qui prennent du poids dans tes dossiers ? tels que des vidéos?

Et puis le script de miniaturisation faut le faire dans tous les cas pour quand l'utilisateur upload une photo :)

par x@v » 19 oct. 2008, 16:20

Oui mais ont ne peux pas toujours prendre photoshop, il faut le connaître (utilisateur finaux), pour éviter une gestion répétitive des tâches il vaut mieux avoir du dynamique.