Rogner des photos en PHP !

floflo55 Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   -  
Nhay Messages postés 838 Date d'inscription   Statut Membre Dernière intervention   -
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, t'as quoi à ta disposition? GD, ImageMagick?
0
floflo55 Messages postés 221 Date d'inscription   Statut Membre Dernière intervention   4
 
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
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   Statut Membre Dernière intervention   4
 
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 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
Mince, ni GD ni ImageMagick dans le tas...
0
Pierrecastor Messages postés 41491 Date d'inscription   Statut Modérateur Dernière intervention   4 149
 
Salut

Sur quel genre de serveur est hébergé ton site ?
0
Mathieu
 
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   Statut Membre Dernière intervention   7
 
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   Statut Membre Dernière intervention   7
 
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   Statut Membre Dernière intervention   126
 
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