intégrer une API de redimmensionnement photo

Eléphant du PHP | 331 Messages

16 oct. 2007, 13:40

Bonjour,

J'ai un formulaire permettant à mes utilisateurs d'uploader une photo dans leur profil. Cependant, j'aurais besoin que la photo en question ne dépasse pas certaines dimensions et 150 ko.

Les utilisateurs avertis vont savoir se débrouiller tout seul et surtout retravailler l'image eux-même avant de faire l'upload, mais moi je voudrais faliciter la vie des autres. Ainsi, j'aimerais proposer sur mon site un redimmensionnement auto. Exemple, ils font parcourir, sélectionnent leur image d'origine, et un script que j'aurai développé ou une API existante se charge de retravailler l'image avant de faire l'upload.

J'ai déjà vu ça de mémoire sur d'autres site mais je ne sais pas comment intégrer cette fonctionnalité sur le mien. Sauriez-vous m'aider?

Merci !

ViPHP
ViPHP | 4039 Messages

16 oct. 2007, 13:46

[snip: erreur, mauvais post, dsl]


[re-edit: non, j'ai la berlue, c'était bon, mais inutile apparament, et j'ai perdu mon texte.. j'arrête le pepsi max, juré.]
Modifié en dernier par Berzemus le 16 oct. 2007, 13:56, modifié 2 fois.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 331 Messages

16 oct. 2007, 13:51

Oui, mais ça je le propose déjà, merci quand même.
Moi, ce que je veux, c'est en fait intégrer un utilitaire en ligne qui ferait la conversion réduction de l'image

Eléphant du PHP | 443 Messages

16 oct. 2007, 13:57

Oui, mais ça je le propose déjà, merci quand même.
Moi, ce que je veux, c'est en fait intégrer un utilitaire en ligne qui ferait la conversion réduction de l'image
Cherche du côté flash, activex ou applet si tu trouves ton bonheur...

Tracker.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 oct. 2007, 13:59

Certains sites proposent effectivement déjà ce service, tout comme le photo editor de windows... mais si tu veux l'implémenter toi même, il te suffit d'uploader l'image de l'utilisateur sur le serveur, l'ouvrir avec la fonction qui va bien (imageCreateFromPng(), imageCreateFromGif(), ...) utiliser getImageSize() pour connaitre les dimensions originales et conserver les proportions lors de la réduction, et imageCopyResized() pour générer l'image modifiée..
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 331 Messages

16 oct. 2007, 14:20

Ok, merci Ryle, je vais voir ce que je suis capable de faire avec tout ça !
Pas l'air si simple quand même ... !

Eléphant du PHP | 331 Messages

17 oct. 2007, 19:10

Bon, j'ai enté de faire ceci ci-dessous :
La grande image de base se récupère bien et se place sur mon serveur mais pas la miniature.

Pourriez-vous m'aiguiller sur mon erreur ? Merci !
<?php 
session_start();
$IdCli = $_SESSION['user_id'];

require_once('../../Connections/connection_jesuisne.php');
mysql_select_db($database_connection_jesuisne, $connection_jesuisne);

if(isset($_FILES['photo']))
{  
	$dest_dossier = '/homepages/30/d140516071/htdocs/push/images/';
	$dest_fichier = $IdCli.".jpg";
	//copie sur le serveur de la grande image de base
	move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier.$dest_fichier);
}

$fichierSource = "../../push/images/".$dest_fichier;
      
    $largeurDestination = 200; 
    $hauteurDestination = 150; 
    $im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination)  
            or die ("Erreur lors de la création de l'image");  

    $source = ImageCreateFromJpeg($fichierSource); 
      
    $largeurSource = imagesx($source); 
    $hauteurSource = imagesy($source); 
    
   imagecopyresampled($im, $source, 8, 8, 0, 0, $largeurDestination-(2*8), $hauteurDestination-(2*8), $largeurSource, $hauteurSource); 
      
    imagestring($im, 0, 12, $hauteurDestination-18, "$fichierSource - ($largeurSource x $hauteurSource)", $blanc); 
   $miniature = "mini_".$fichierSource; 
	
	move_uploaded_file($miniature, $dest_dossier."mini.jpg");

header('Location: ../../MonCompte/fairepart_num.php');

?> 

Eléphant du PHP | 331 Messages

17 oct. 2007, 19:20

en fait je m'en suis sorti en faisant comme ça plutôt :
<?php 
session_start();
$IdCli = $_SESSION['user_id'];

require_once('../../Connections/connection_jesuisne.php');
mysql_select_db($database_connection_jesuisne, $connection_jesuisne);

if(isset($_FILES['photo']))
{  
	$dest_dossier = '/homepages/30/d140516071/htdocs/push/images/';
	$dest_fichier = $IdCli.".jpg";
	//copie sur le serveur de la grande image de base
	move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier.$dest_fichier);
}

$img = "../../push/images/".$dest_fichier;
//header('Content-type: ../../push/images/'); 

$ratio = .2; 

list($largeur, $hauteur) = getimagesize("$img");  
$n_largeur = $largeur * $ratio; 
$n_hauteur = $hauteur * $ratio; 


$destination = imagecreatetruecolor($n_largeur, $n_hauteur); 


$source = imagecreatefromjpeg("$img"); 


imagecopyresized($destination, $source, 0, 0, 0, 0, $n_largeur, $n_hauteur, $largeur, $hauteur); 

imagejpeg($destination, "../../push/images/" . "mini.jpg"); 

header('Location: ../../MonCompte/fairepart_num.php');

?> 

Eléphant du PHP | 443 Messages

17 oct. 2007, 19:57

Salut,

Regarde le code qui suit, ça peut t'aider pour créer des vignettes de tailles identiques.
<?php
//
function jpegThumbNail
(
	$source, 	// chemin du fichier source. 
	$target, 	// chemin du fichier vignette.
	$szw, $szh, // taille w/h du cadre de la nouvelle image.
	$padding,	// $padding minimum de l'image au cadre.
	$bgcolor = array(255,255,255) // couleur de fond du cadre. 
)
{

	$isrc = imagecreatefromjpeg($source);
	$x 	= imagesx($isrc); $y = imagesy($isrc);
	$r 	= (($x / $y) > ($szw / $szh)) ?  $x / $szw : $y / $szh;
	$dx	= $padding+(int)round(($szw - $x / $r) / 2,0);
	$dy	= $padding+(int)round(($szh - $y / $r) / 2,0);
		
	$itar = imagecreatetruecolor($szw,$szh);
	imageantialias($itar,true);
		
	imagefill($itar, 0, 0, imagecolorallocate($itar, $bgcolor[0], $bgcolor[1], $bgcolor[2]));		
	imagecopyresampled($itar, $isrc, $dx, $dy, 0, 0, $szw-2*$dx, $szh-2*$dy, $x, $y);
		
	imagejpeg($itar, $target, 100);
		
	imagedestroy($isrc);
	imagedestroy($itar);
}

// Test
jpegThumbNail
(
	'http://www.did-art.fr/todon/images/ORIG_1164367278_scrat_01.jpg',
	'mini-scrat.jpg',
	200, 250,
	2,
	array(128,128,128)
);
header('content-type: image/jpeg');
readfile('mini-scrat.jpg');
?>

Tracker.