begin process at 2012 05 30 22:40:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Général

 > 

opacité, redimensionnement, noir et blanc et arrondi


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

opacité, redimensionnement, noir et blanc et arrondi

samedi 19 janvier 2008 à 22:25:42 | opacité, redimensionnement, noir et blanc et arrondi

paguira

je cherche à amméliorer le script suivant:
les valeurs :
original = source du fichier (gif,jpg ou png)
weight = largeur de l'image
height = hauteur de l'image
opacite = 0 à 100
radial = rayon de l'arrondi
mirror = effet de miror (bug !!)
dossier des imagges en cache
$cache                     = $dirroot.'/cache/';

exemple d'utilisation : http://localhost/resizeimage.php?original=data/files/image.png&width=10&height=56&radial=50&opacite=100

l'image est granuleuse quand on applique les arrondis " imagetruecolortopalette($image_new, true, 16777216); " avecimagetruecolortopalette($image_new, false, 16777216); " , l'image n'est pas tres jolie.

<?php
/*
File : resizeimage.php
*/

$dirroot    = dirname(__FILE__);
// Cache
$cache                     = $dirroot.'/cache/';

//--------------------------------------------------//
//                  Control var                        //
//--------------------------------------------------//
function init_var($var){
    if (!isset($var)){ $var = false; }
    $var = MyAddSlashes($var);
    $var = trim($var);
    return $var;
}

//--------------------------------------------------//
//                  Magic quote                        //
//--------------------------------------------------//

function MyAddSlashes($chaine){
    return(get_magic_quotes_gpc()==1 ?
    $chaine :
    addslashes($chaine));
}

function MyStripSlashes($chaine) {
    //return(get_magic_quotes_gpc()==1 ?
    return stripslashes($chaine); //:
    //$chaine);
   
}

//--------------------------------------------------//
//                     CTRL URL                        //
//--------------------------------------------------//

    // vérification de l'existance d'une url
function url_exists($url){
    $handle = @fopen($url, "r");
     if ($handle === false)
          return false;
         fclose($handle);
     return true;
}
   
//--------------------------------------------------//
//          (END) CTRL URL     (END)                     //
//--------------------------------------------------//


function imageflip(&$dest, &$src) {
        $w = imagesx($src);
        $h = imagesy($src);
        $alpha = 127;
        for($y=0; $y<$h; $y++) {
                for ($x=0; $x<$w; $x++) {
                        $couleur = imagecolorsforindex($src, imagecolorat($src, $x, $y));
                        $couleurAlpha = imagecolorallocatealpha($dest, $couleur['red'], $couleur['green'], $couleur['blue'], $alpha);
                        imagesetpixel($dest, $x, ($h-$y), $couleurAlpha);
                }
                if($alpha > 1) $alpha--;
        }
}

//-----------------------------------------------------------------------------------

    foreach ($_POST as $key => $value){
        if(is_array($value)){
            $$key = $value;       
        }else{
            $$key = init_var($value);
        }
    }
    foreach ($_GET as $key => $value){
        if(is_array($value)){
            $$key = $value;       
        }else{
            $$key = init_var($value);
        }
    }


$width         = init_var($width);
$height     = init_var($height);
$opacite    = init_var($opacite);
$wb            = init_var($wb);
$mirroir    = init_var($mirror);
$radial     = init_var($radial);



if(file_exists($original) || url_exists($original)){
     $extension     = substr($original, strlen($original)-3);
     $type         = 'images';
    eregi("/([^\/]*.(jpg|gif|png))", $original, $nsimple);
          
    $nomcache     = 'cache/' . $type . '/' . $width . '_' . $height . '_' . $opacite . '_' . $wb . '_' . $mirror . '_' . $nsimple[1];
        
    if(file_exists('../' . $nomcache)){
        header('Location: ../' . $nomcache);
        exit();
    }
    
    $extension = strtolower($extension);

    // Load image
    if($extension == "gif"){
           $image_orig = imagecreatefromgif($original);
        // WIdth and Height
        list($width_orig, $height_orig) = getimagesize($original);
   
        // si l'image est plus grande
        $image_p_largeur = '';
        $image_p_hauteur = '';
       
        if($width_orig > $width || $height_orig > $height){
            if ($width_orig > $width && $width!=''){
                # Calcul 1 : la largeur
                $facteur_div = $width_orig / $width ;
       
                $image_p_largeur = $width ; /* Nouvelle largeur */
                $image_p_hauteur = $height_orig / $facteur_div ; /* Nouvelle hauteur */
            }else{
                $image_p_largeur = $width_orig ; /* Nouvelle largeur */
                $image_p_hauteur = $height_orig ; /* Nouvelle hauteur */
            }
           
            if ($image_p_hauteur > $height && $height){
                # Calcul 2 : la hauteur
                $facteur_div = $image_p_hauteur / $height ;
               
                $image_p_largeur = $image_p_largeur / $facteur_div ; /* Nouvelle largeur */
                $image_p_hauteur = $height ; /* Nouvelle hauteur */           
            }
            $width     = $image_p_largeur ;
            $height = $image_p_hauteur ;
        }else{
            $width     = '';
            $height = '';
        }
               
        if(!$width) $width        = $width_orig;
        if(!$height) $height    = $height_orig;
       
        $image_new     = imagecreatetruecolor($width, $height);
        $src_tc_idx = imagecolortransparent($image_orig);
      //  $src_tc = imagecolorsforindex($image_orig, $src_tc_idx);
        $tgt_tc_idx = imagecolorallocate($image_new, $src_tc['red'], $src_tc['green'], $src_tc['blue']);
        imagefill($image_new, 0, 0, $tgt_tc_idx);
        imagecolortransparent($image_new, $tgt_tc_idx);

    }else if($extension == "jpg" || $extension == "png"){
          if($extension == "jpg")
            $image_orig = imagecreatefromjpeg($original);
        else if($extension == "png")
            $image_orig = imagecreatefrompng($original);
       
 
        // Cacul des nouvelles dimensions
        list($width_orig, $height_orig) = getimagesize($original);
           
        if($opacite){
            $opac_img = imagecreatetruecolor($width_orig, $height_orig);
            $white = ImageColorAllocate ($opac_img, 255, 255, 255);
   
            imagefill($opac_img, 0, 0, $white);
   
            imagecopymerge($opac_img, $image_orig, 0,0,0,0, $width_orig, $height_orig, $opacite);
           
            $image_orig = $opac_img;
        }

         // si l'image est plus grande
        $image_p_largeur = '';
        $image_p_hauteur = '';
           
        if ($width_orig > $width || $height_orig > $height){
            if ($width_orig > $width && $width){
                # Calcul 1 : la largeur
                $facteur_div = $width_orig / $width ;
       
                $image_p_largeur = $width ; /* Nouvelle largeur */
                $image_p_hauteur = $height_orig / $facteur_div ; /* Nouvelle hauteur */
            }
            else {
                $image_p_largeur = $width_orig ; /* Nouvelle largeur */
                $image_p_hauteur = $height_orig ; /* Nouvelle hauteur */
            }
           
            if ($image_p_hauteur > $height && $height)
            {
                # Calcul 2 : la hauteur
                $facteur_div = $image_p_hauteur / $height ;
               
                $image_p_largeur = $image_p_largeur / $facteur_div ; /* Nouvelle largeur */
                $image_p_hauteur = $height ; /* Nouvelle hauteur */           
            }
            $width     = $image_p_largeur ;
            $height = $image_p_hauteur ;
        }
                   
    if($width) $width    = $width_orig;
    if($height) $height    = $height_orig;
           
    $image_new = imagecreatetruecolor($width, $height);
    ImageColorTransparent($image_new, ImageColorAllocate($image_new, 0, 0, 0));

}


  // Redimensionnement
  imagecopyresampled($image_new, $image_orig, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);

    // Blaxk and white
    if($wb){
        imagetruecolortopalette($image_new, true, 16777216);

         $total = ImageColorsTotal($image_new);
            for( $i=0; $i<$total; $i++){
                 $old = ImageColorsForIndex($image_new, $i);
                  $commongrey = (int)(($old[red] + $old[green] + $old[blue]) / 3);
                   ImageColorSet($image_new, $i, $commongrey, $commongrey, $commongrey);
              }        
    }
       
       
       
    if($mirror){

        $largeur         = imagesx($image_new);
        $hauteur         = imagesy($image_new);

        $temporaireUn     = imagecreatetruecolor($largeur, 50);
        $temporaireDeux = imagecreatetruecolor($largeur, 50);
        $resultat         = imagecreatetruecolor($largeur, $hauteur+50);

        $blancUn         = imagecolorallocate($resultat, 255, 255, 255);
        imagefill($resultat, 1, 1, $blancUn);
        $blancDeux         = imagecolorallocate($temporaireDeux, 255, 255, 255);
        imagefill($temporaireDeux, 1, 1, $blancDeux);

        imagecopy ($resultat, $image_new, 0, 0, 0, 0, $largeur, $hauteur);
        imagecopy ($temporaireUn, $image_new, 0, 0, 0, $hauteur-50, $largeur, 50);
        imageflip($temporaireDeux, $temporaireUn);
        imagecopy ($resultat, $temporaireDeux, 0, $hauteur, 0, 0, $largeur, 50);
        $image_new         = $resultat;
        imagejpeg($resultat, null, 100);
       
    }
   

    if($radial){
       
        // Get the size of the image
        list($image_w, $image_h) = getimagesize($original);
       
        // On commence à créer le masque pour le contour coin rond
        $img_mask         = imagecreate($image_w, $image_h); // On crée le mask vide
        $img_mask_green = imagecolorallocate($img_mask, 0, 255, 0); // affectation de la couleur verte
        $img_mask_pink    = imagecolorallocate($img_mask, 255, 0, 255); // affectation de la couleur rose
       
        // Ici on trace la zone à mettre en transparence avant le merge entre les 2 images
        // PRINCIPE : 4 cercle situé dans chauque coin avec un rayon de 2 fois la bordure
         // PRINCIPE : 1 forme polygonale de 8 coter pour peindre de rose la zone restante
        imagefilledellipse($img_mask, $radial, $radial, $radial*2, $radial*2, $img_mask_pink); // cercle gauche supérieur
        imagefilledellipse($img_mask, $image_w-$radial, $radial, $radial*2, $radial*2, $img_mask_pink); // cercle droite supérieur
        imagefilledellipse($img_mask, $radial, $image_h-$radial, $radial*2, $radial*2, $img_mask_pink); // cercle gauche inférieur
        imagefilledellipse($img_mask, $image_w-$radial, $image_h-$radial, $radial*2, $radial*2, $img_mask_pink); // cercle droit inférieur
        imagefilledpolygon ($img_mask, array($radial,0,0,$radial,0,$image_h-$radial,$radial,$image_h,$image_w-$radial,$image_h,$image_w,$image_h-$radial,$image_w,$radial,$image_w-$radial,0), 8, $img_mask_pink); // forme géométrique à 8 coter
        imagecolortransparent($img_mask, $img_mask_pink); // Applique la transparence à la couleur rose
       
         
       
         // TRAITEMENT SUR L'IMAGE NORMAL
         imagecopymerge($image_new, $img_mask, 0, 0, 0, 0, $image_w, $image_h, 100); // copie du masque au dessus de la miniature avec une transparence (0%)
         // il faut enlever le vert pour que le fond soit transparent
        if($radial > 0){ // si le radial est de 0 alors ne pas appliquer la transparence parce que le pixel 0,0 n'est pas vert ce qui entraine une transparence sur les zones qui on la meme couleur que le pixel 0,0
            imagetruecolortopalette($image_new, TRUE, 16777216); // conversion en palette 256 couleur
            $img_green = imagecolorat($image_new, 0, 0); // affectation de la couleur verte (récupérer au pixel 0,0)
            imagecolortransparent($image_new, $img_green); // Applique la transparence à la couleur verte
         }
 
    }
   
    switch($extension){
        case 'gif':   
            header("Content-type: image/gif");
             imagegif($image_new, "$nomcache", 100);
            imagegif($image_new, null, 100);
            exit();
        break;
        case 'jpg':
            header("Content-type: image/jpg");       
               imagejpeg($image_new, "$nomcache", 100);
            imagejpeg($image_new, null, 100);
        break;
        case 'png':
            $trnprt_indx = imagecolortransparent($image_orig);
             if ($trnprt_indx >= 0) {
                $trnprt_color   = imagecolorsforindex($image_orig, $trnprt_indx);
                $trnprt_indx    = imagecolorallocate($image_new, $trnprt_color['red'], $trnprt_color['green'], $trnprt_color['blue']);
                imagefill($image_new, 0, 0, $trnprt_indx);
                imagecolortransparent($image_new, $trnprt_indx);
             }else{
                imagealphablending($image_new, false);
                $color = imagecolorallocatealpha($image_new, 0, 0, 0, 127);
                imagefill($image_new, 0, 0, $color);
                imagesavealpha($image_new, true);
             }
            header("Content-type: image/png");       
             imagepng($image_new, "$nomcache");
            //imagegif($image_new, "$nomcache", 100);
             imagepng($image_new);
        break;
    }     
    
  }
 ?>







Cette discussion est classée dans : image, width, height, orig, radial


Répondre à ce message

Sujets en rapport avec ce message

faire une bouclze sur un fichier contenant des photo et les redimmensionner [ par hannao ] salut à tous, voilà j'ai un petit code qui redimensionne une photo (contenu dans un dossier) à la fois j'aimerais pouvoir faire une boucle dans le fic fonction pour redimensionner des images de grande taille [ par oceanrider ] Bonjour à tous, Je me tourne vers vous car malgré mes recherches, je ne trouve pas de solution à mon problème. J'ai recours à une fonction pour redi GD : Affichages IE et firefox ? [ par alonsyl ] bonjour,afin de generer des miniatures a la volee sur mon site web j'ai cree la petite fonction suivante :function creerMiniature($dossier, $img) {    enregistrement d'image apres redimensionnement [ par clement1138 ] voila bon j'ai un code qui me permet de redimensionner des images puis de les enregistrer dans un dossier.....toutes les images s'appelle image suivi redimension d'une image [ par clement1138 ] voila j'ai ecris ce code..... pour redimensionner mes images...mais est ce que je peux le faire a la taille que je veux au lieu d'utiliser un pourceta probleme avec imagecopyresized [ par ldevun ] Bonjour,Je souhaite redimmensionner une image et l'enregistrer dans un répertoire. Après lecture des messages sur ce sujet sur le forum j'ai fait le c Problème redimension image [ par psyckan ] Bonjour,Voila j'essaie de redimensionner une image au moment de l'upload mais ça marche pas et ça m'affiche plein des caractère spéciaux à l'endroit o Problème avec createimagefromjpeg et thumnails [ par j_claude05 ] Salut à tous je viens à vous après de longues heures la tête dans le code et à vrai dire à l'heure ou j'ecris je vois plus rien :-( Bon bref plus sér taille d'un flash en fonction de la résolution de l'affichage [ par oekrem ] Je souhaite dimensionner une application en fonction de la résolution de l'écran. Ceci me permet alors de cacher les traitements de chargement de la p menu deroulant special [ par alois4 ] bonjour ..je me suis fait un ptit code vraiment pas dure pour me mettre des radio que j ai choisi sur mon forum bon c pas mal je souhaiterais avoir un


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,343 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales