Page 1 sur 1

intégrer une API de redimmensionnement photo

Posté : 16 oct. 2007, 13:40
par jay64
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 !

Posté : 16 oct. 2007, 13:46
par Berzemus
[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é.]

Posté : 16 oct. 2007, 13:51
par jay64
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

Posté : 16 oct. 2007, 13:57
par Tracker
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.

Posté : 16 oct. 2007, 13:59
par Ryle
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..

Posté : 16 oct. 2007, 14:20
par jay64
Ok, merci Ryle, je vais voir ce que je suis capable de faire avec tout ça !
Pas l'air si simple quand même ... !

Posté : 17 oct. 2007, 19:10
par jay64
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');

?> 

Posté : 17 oct. 2007, 19:20
par jay64
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');

?> 

Posté : 17 oct. 2007, 19:57
par Tracker
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.