Aller au contenu

Ajouter des marges dans une image


joboy84

Sujets conseillés

Bonjour,

J'ai un petit problème et j'aurai besoin de votre aide pour le résoudre :P

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 :D)

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:

<?php
class 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

Lien vers le commentaire
Partager sur d’autres sites

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());
else
imagecopyresampled($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é par Ernestine
Lien vers le commentaire
Partager sur d’autres sites

Posté (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é par joboy84
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...