joboy84 Posté 25 Juin 2009 Posté 25 Juin 2009 Bonjour, J'ai un petit problème et j'aurai besoin de votre aide pour le résoudre J'ai un script qui me convertit des images lorsque je les upload, en les redimensionnant. Toutes les images sont converties au format JPEG qualité 90 avec comme largeur 580px et une hauteur proportionnelle à l'image de départ. Si mes images sont plus large que 580 px, pas de problème, les images une fois converties seront de très bonne qualité, par contre si j'ai au départ une image de 200px de large qui est convertie en 580px de large, c'est assez pixelisé! (normal :aie: ) Pour palier à ce problème j'ai donc imaginé que le script de conversion pouvait ajouter une sorte de marge blanche dans l'image pendant la conversion, en centrant l'image d'origine et ajoutant à gauche et à droite une marge blanche. Je souhaite que ce soit dans l'image! (pas une bordure css ) Pour que vous compreniez mieux, je vous joins une image du résultat désiré: Apercu du résultat souhaité Sinon voici le code php utilisé pour les conversions: <?phpclass SimpleImage { var $image; var $image_type; function load($filename) { $image_info = getimagesize($filename); $this->image_type = $image_info[2]; if( $this->image_type == IMAGETYPE_JPEG ) { $this->image = imagecreatefromjpeg($filename); } elseif( $this->image_type == IMAGETYPE_GIF ) { $this->image = imagecreatefromgif($filename); } elseif( $this->image_type == IMAGETYPE_PNG ) { $this->image = imagecreatefrompng($filename); } } function save($filename, $image_type=IMAGETYPE_JPEG, $compression=90, $permissions=null) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image,$filename,$compression); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image,$filename); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image,$filename); } if( $permissions != null) { chmod($filename,$permissions); } } function output($image_type=IMAGETYPE_JPEG) { if( $image_type == IMAGETYPE_JPEG ) { imagejpeg($this->image); } elseif( $image_type == IMAGETYPE_GIF ) { imagegif($this->image); } elseif( $image_type == IMAGETYPE_PNG ) { imagepng($this->image); } } function getWidth() { return imagesx($this->image); } function getHeight() { return imagesy($this->image); } function resizeToHeight($height) { $ratio = $height / $this->getHeight(); $width = $this->getWidth() * $ratio; $this->resize($width,$height); } function resizeToWidth($width) { $ratio = $width / $this->getWidth(); $height = $this->getheight() * $ratio; $this->resize($width,$height); } function scale($scale) { $width = $this->getWidth() * $scale/100; $height = $this->getheight() * $scale/100; $this->resize($width,$height); } function resize($width,$height) { $new_image = imagecreatetruecolor($width, $height); imagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); $this->image = $new_image; } }//Puis pour modifier une image suffit de faire: $image = new SimpleImage(); $image->load(''.$_FILES['mon_image']['tmp_name'].''); $image->resizeToWidth(580); $image->save(''.$_SERVER["DOCUMENT_ROOT"].'/images/dossier/abc.jpg');?> Merci pour votre aide Jo
Ernestine Posté 25 Juin 2009 Posté 25 Juin 2009 (modifié) Salut, Si l'image source est plus petite que l'image destination, alors selon moi il faut utiliser la fonction imagecopy et non plus imagecopyresampled. En tous cas c'est ainsi que je ferais : if($width>$this->getWidth())imagecopy($new_image, $this->image, 0,0,0,0,$this->getWidth(), $this->getHeight());elseimagecopyresampled($new_image, $this->image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight()); Voir la doc : http://www.php.net/manual/fr/function.imagecopy.php Modifié 25 Juin 2009 par Ernestine
joboy84 Posté 25 Juin 2009 Auteur Posté 25 Juin 2009 (modifié) Re bonjour... J'ai fais un script qui fusionne 2 images en une et cela fonctionne: <?php //On cree une image vierge de 390px de large et aussi haut que l image d origine // $image = imagecreate(390,$TailleImage[1]); => Fonctionne mais image mauvaise qualité $image = imagecreatetruecolor(390,$TailleImage[1]); //On colore l'image en blanc $blanc = imagecolorallocate($image, 255, 255, 255); // on enregistre l image dans le dossier... imagepng($image, ''.$_SERVER["DOCUMENT_ROOT"].'/images/temp/monimage.png'); // On charge d'abord les images $source = imagecreatefrompng(''.$_FILES['mon_image']['tmp_name'].''); // Le logo est la source $destination = imagecreatefrompng(''.$_SERVER["DOCUMENT_ROOT"].'/images/temp/monimage.png'); // La photo est la destination // On veut placer le logo au milieu, on calcule les coordonnées où on doit placer l image source sur la photo //$destination_x = ($largeur_destination/2) - ($largeur_source/2); //$destination_y = ($hauteur_destination/2) - ($hauteur_source/2); $destination_x = 195 - ($TailleImage[0]/2); $destination_y = ($TailleImage[1]/2) - ($TailleImage[1]/2); // On met le logo (source) dans l'image de destination (la photo) imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $TailleImage[0], $TailleImage[1], 100); // On affiche l'image de destination qui a été fusionnée avec le logo imagepng($destination, ''.$_SERVER["DOCUMENT_ROOT"].'/images/screenjeux/'.$nomdusite.'/'.$typejeu.'/big/'.$nomjeu.'.png'); imagedestroy('/images/temp/monimage.png');?> Mon problème est que le fond de l'image est noir et non blanc comme souhaité! Merci Modifié 25 Juin 2009 par joboy84
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant