Rogner des photos en PHP !

Fermé
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 - 4 juin 2014 à 20:16
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 - 5 juin 2014 à 21:37
Bonjour à tous,

J'ai un petit problème,
Il y a des personnes qui upload des photos sur un site web, mais le format de ces photos est très variable, hors je voudrais que ces photos soit carrées. J'aurais donc besoin d'un code PHP qui modifie les photos en rognant les parties en trop, comme sur l'image suivante:

http://image.noelshack.com/fichiers/2014/23/1401904703-image35.png

On imagine que la photo se trouve à l'adresse http://siteweb.com/temp/123.png (c'est un exemple)

Si au passage le script pouvait baisser la qualité des images pour éviter qu'elles soit trop lourdes ça serait vraiment super ^^

Si je demande ce code c'est que je n'ai pas la moindre idée de comment le faire en PHP !

Un très grand merci d'avance ;-)
A voir également:

4 réponses

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
4 juin 2014 à 20:25
'lut, t'as quoi à ta disposition? GD, ImageMagick?
0
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 4
4 juin 2014 à 20:33
Je ne peux pas te dire précisément mais je pense avoir une très grand partie des options de gestions d'image que php propose ^^
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
4 juin 2014 à 20:48
Avec ImageMagick:
$size = 128; // pixels, taille finale

$image = new Imagick('image.jpg'); // Adapte pour charger le fichier voulu
$w = $image->getImageWidth();
$h = $image->getImageHeight();
$s = ($w > $h) ? $h : $w;
$image->cropImage($s, $s, ($w-$s)/2, ($h-$s)/2);
$image->resizeImage($size, $size, imagick::FILTER_QUADRATIC, 1);
$image->writeImage('image_thumb.jpg');

Pas testé mais ça devrait marcher.
0
floflo55 Messages postés 221 Date d'inscription mardi 21 août 2012 Statut Membre Dernière intervention 21 août 2014 4
4 juin 2014 à 21:34
Merci beaucoup... mais il semble que je n'ai pas ImageMagick, je vais voir pour l'installer mais si non il y a d'autres méthodes sans ImageMagick (si je n'arrive pas à l'installer) ?

PS: Je crois que j'ai trouvé la liste des extensions php que j'ai actuellement:

Archive_Tar 1.3.11
Cache_Lite 1.7.15
Config 1.10.12
Console_Getopt 1.3.1
DB 1.7.14
DB_DataObject 1.11.2
DB_NestedSet 1.4.1
Date 1.4.7
File 1.4.1
File_CSV
File_Util
HTML_AJAX
HTML_Common 1.2.5
HTML_Common2
HTML_Javascript
HTML_QuickForm
HTML_QuickForm2
HTML_QuickForm_Controller 1.0.10
HTML_Template_Flexy 1.3.12
Image_Text 0.7.0
Log 1.12.7
MDB2 2.5.0b5
MDB2_Driver_mysql 1.4.1
Mail 1.2.0
Mail_Mime 1.8.8
Math_BigInteger 1.0.2
Net_DNS 1.0.7
Net_DNS2 1.3.2
Net_SMTP 1.6.2
Net_Socket 1.0.14
Net_URL 1.0.15
Net_URL2 2.0.5
Net_UserAgent_Detect 2.5.2
Numbers_Words 0.16.4
PEAR 1.9.4
Pager 2.4.8
RVSeagullMod 1.0.1
Structures_Graph 1.0.4
Text_CAPTCHA 0.5.0
Text_Figlet 1.0.2
Text_Password 1.1.1
Translation2 2.0.4
Validate 0.8.5
XML_Parser 1.3.4
XML_RPC 1.5.5
XML_Util 1.2.1
0
ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
4 juin 2014 à 22:33
Mince, ni GD ni ImageMagick dans le tas...
0
Pierrecastor Messages postés 41466 Date d'inscription mercredi 5 novembre 2003 Statut Modérateur Dernière intervention 5 avril 2024 4 130
5 juin 2014 à 15:34
Salut

Sur quel genre de serveur est hébergé ton site ?
0
Regarde ici:

http://stackoverflow.com/questions/14799311/resize-and-crop-image-into-square-with-white-background-using-gd
0
Hugo69009 Messages postés 13 Date d'inscription mercredi 6 novembre 2013 Statut Membre Dernière intervention 7 juin 2014 7
5 juin 2014 à 20:00
Bonjour,

tout d'abord tu peux utiliser la prog en poo en php !

tu aura besoin d' :

un fichier class en php (la poo),
un formulaire,
du php procédural sera nécessaire,
un dossier pour déplacer les images grandeur nature,
un autre pour les images crops !

tout d'abord créer un fichier : lenomClass.php

et colle ceci :

le code pour redimensionner :

<?php

class Img {

static public function creerMin($img,$chemin,$nom,$mlargeur=100,$mhauteur=100) {
$nom = substr($nom,0,-4);
$dimension = getimagesize($img);

if(substr(strtolower($img),-4)==".jpg") {
$image = imagecreatefromjpeg($img);
}
else if(substr(strtolower($img),-4)==".png") {
$image = imagecreatefrompng($img);
}
else if(substr(strtolower($img),-4)==".gif") {
$image = imagecreatefromgif($img);
}
else {
return false;
}

$miniature = imagecreatetruecolor($mlargeur,$mhauteur);

if($dimension[0]>($mlargeur/$mhauteur)*$dimension[1]) {
$dimY = $mhauteur;
$dimX = $mhauteur*$dimension[0]/$dimension[1];
$decalX = -($dimX-$mlargeur)/2;
$decalY = 0;
}
if($dimension[0]<($mlargeur/$mhauteur)*$dimension[1]) {
$dimX = $mlargeur;
$dimY = $mlargeur*$dimension[1]/$dimension[0];
$decalY = -($dimY-$mhauteur)/2;
$decalX=0;
}
if($dimension[0]==($mlargeur/$mhauteur)*$dimension[1]) {
$dimX = $mlargeur;
$dimY = $mhauteur;
$decalX = 0;
$decalY = 0;
}

imagecopyresampled($miniature, $image, $decalX, $decalY, 0, 0, $dimX, $dimY, $dimension[0], $dimension[1]);
imagejpeg($miniature, $chemin . "/" . $nom . ".jpg", 90);
return true;
}
}


Ensuite créer un dossier : "galerie" par exemple et à l'intérieur de ce dossier créer un dossier miniature (par exemple tu peux les nommer autrement (se sont mes conventions à moi)).


il faut une page php pour inclure ton formulaire et charger ta class php :

page en php :

<?php
if (!empty($_FILES)) {
require_once "Lefichierclass.php";
if(isset($_FILES['img']) && !empty($_FILES['img'])) {
$ds = DIRECTORY_SEPARATOR; //les slash antislash
$cd = __DIR__ . $ds; //les directory ex : ../
$img = $_FILES['img'];
$extensions = strtolower(substr($img['name'] , -3));
$allowedExtensions = ["jpg" , 'png' , 'gif' , 'jpeg']; // les extensions permisent !

if (in_array($extensions , $allowedExtensions)) {
move_uploaded_file($img['tmp_name'], $cd . ".." . $ds . "" . $ds . $img['name']); // /!\ ici on récupère que 'name' et non tmp_name
if(!Img::creerMin($cd . ".." . $ds . "tondossierpourplacerlimageréel" . $ds . $img['name'], $cd . ".." . $ds . "tondossierpourplacerlimageréel" . $ds . "le dossier des miniatures", $img['name'] , 400, 224)) {
// Sur la ligne du dessus on appel la classe creerMin et à la fin on redimensionne l'immage par les tailles vouluent !
$erreur = "Erreur interne. Veuillez réessayer. Si le problème persiste veuillez contacter un administrateur.";
}
}
else {
$erreur = "Votre fichier n'est pas une image ! Les extensions permisent sont : png, jpg et gif ! Réessayer ou contactez un administrateur si l'erreur persiste !";
}
}
}
?><!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link rel="stylesheet" href="css/style.css">
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<?php
if (isset($erreur)) {
echo "$erreur";
}
?> //indiquer une erreur si il y en a une
<form method="post" action="pourmoicettememepage.php" enctype="multipart/form-data">
<input type="file" name="img">
<input type="submit" value="envoyer">
</form>
<?php
$dossier = "../galerie/miniature";
$dir = opendir($dossier);
while ($file = readdir($dir)) {
$allowedExtensions = array("jpg" , 'png' , 'gif' , 'jpeg');
$extensions = strtolower(substr($file, -3 ));
if (in_array($extensions , $allowedExtensions)) {

?>
<img src="../le dossier image réel/le dossier image miniature/<?php echo $file; //les images ?>" />
<?php

}

}

?> //afficher les images miniaturisées
</body>
</html>
0
Hugo69009 Messages postés 13 Date d'inscription mercredi 6 novembre 2013 Statut Membre Dernière intervention 7 juin 2014 7
5 juin 2014 à 20:01
je sais que s'est un peu le fouillit donc si tu comprends pas trop trop va voir les vidéos de www.grafikart.fr et cherche galerie d'images en php ! ^^
0
Nhay Messages postés 838 Date d'inscription vendredi 2 novembre 2012 Statut Membre Dernière intervention 17 décembre 2015 126
5 juin 2014 à 21:37
Si tu n'a ni GD ni imageMagick, le plus simple c'est de la faire en CSS, avec un overflow hidden pour cacher, et du JS pour le centrer.
0