Accueil > Forum > > > > opacité, redimensionnement, noir et blanc et arrondi
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); " avec " imagetruecolortopalette($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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|