ImageMagick ligne de commande exec

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : ImageMagick ligne de commande exec

par costadelo » 29 oct. 2007, 15:45

Merci pour ta réponse, en effet, cela fonctionne bien !

par @rthur » 29 oct. 2007, 15:37

Sinon je n'ai pas très bien compris ta remarque sur mon chemin relatif...Je comprend que ca ne soit pas très jolie, mais mon script PHP ce trouve à un niveau 3 par rapport à l'arbo de mon site, et mon dossier qui contient le site est de niveau 2 (srv/www). Comment je fait pour rendre mon chemin en absolu ?
Je suppose que le répertoire usr/ est à la racine de ton serveur.
Donc pour être en chemin absolu, il suffit que tu mettes:
/usr/bin/mogrify

"/" représente la racine de ton serveur
puis "usr/" pour aller dans le répertoire usr; "bin/" pour aller ensuite dans le répertoire bin, etc...

par costadelo » 29 oct. 2007, 13:49

Bon en fait je viens de comprendre pourquoi mon tif ne séxécutais pas...
Voici mon code entier :
public function open_image ($file) {
		# JPEG:
		$im = @ ($file);
		if ($im !== false) { return $im; }
	
		# GIF:
		$im = @imagecreatefromgif($file);
		if ($im !== false) { return $im; }
	
		# PNG:
		$im = @imagecreatefrompng($file);
		if ($im !== false) { return $im; }

		# GD File:
		$im = @imagecreatefromgd($file);
		if ($im !== false) { return $im; }
	
		# GD2 File:
		$im = @imagecreatefromgd2($file);
		if ($im !== false) { return $im; }
		
		# WBMP:
		$im = @imagecreatefromwbmp($file);
		if ($im !== false) { return $im; }
	
		# XBM:
		$im = @imagecreatefromxbm($file);
		if ($im !== false) { return $im; }
	
		# XPM:
		$im = @imagecreatefromxpm($file);
		if ($im !== false) { return $im; }
	
		# Try and load from string:
		$im = @imagecreatefromstring(file_get_contents($file));
		if ($im !== false) { return $im; }
	
		return false;
	} 
	
	public function _resize_img( $img, $new_width, $new_height, $height_post, $width_post, $pseudo){
	
		// Load image
		$image = $this->open_image($img);
	
		if ($image == false) {
			die ('<strong>You uploaded an invalid image. Please go back and try again.</strong>');
		}
	
		// Get original width and height
		$width = imagesx($image);
		$height = imagesy($image);
	
		// New width? Calculate new height
		if ( $new_width != "-1" ) {
			$new_width = floatval($new_width);
			$new_height = $height * ($new_width/$width);
	
		// New height? Calculate new width
		} elseif ( $new_height != "-1") {
			$new_height = floatval($new_height);
			$new_width = $width * ($new_height/$height);
	
		// New height and new width
		} elseif ( $height_post != "-1"  && $width_post != "-1"  ) {
			$new_height = floatval($height_post);
			$new_width = floatval($width_post);
		} else {
			$new_height = floatval($height_post);
			$new_width = floatval($width_post);
		}  
		
		$extension = strrchr($img, '.');
		
		if( $extension == ".tif" || $extension == ".TIF" )
		
			$convertString = "../../../../../usr/bin/mogrify ".$img." -format jpg -thumbnail " . $new_width . "x" . $new_height . " -strip -colorspace RGB -quality 100 ".$img;
		else
			$convertString = "../../../../../usr/bin/mogrify ".$img." -resize " . $new_width . "x" . $new_height . " -strip -colorspace RGB -quality 100 ".$img;//-interlace line
		
		exec($convertString);
		
		/*
		// Resample
		$image_resized = imagecreatetruecolor($new_width, $new_height);
		imagecopyresampled($image_resized, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
		
		
		switch ( $ext ) {
			case 'jpeg':
				imagejpeg( $image_resized,$img, 80 );
				break;
			case 'JPEG':
				imagejpeg( $image_resized,$img, 80 );
				break;
			case 'jpg':
				imagejpeg( $image_resized,$img, 80 );
				break;
			case 'JPG':
				imagejpeg( $image_resized,$img, 80 );
				break;
			case 'gif':
				imagegif( $image_resized,$img, 80 );
				break;
			case 'GIF':
				imagegif( $image_resized,$img, 80 );
				break;
			case 'png':
				imagecreatefrompng( $image_resized,$img, 80 );
				break;
			case 'PNG':
				imagecreatefrompng( $image_resized,$img, 80 );
				break;
			default:
				imagejpeg( $image_resized,$img, 80 );
				break;
		}*/
		
		return array( "new_width" => $new_width, "new_height" => $new_height );
	}
Etant donné que je tentais d'ouvrir du tif avec ma fonction open_image() qui n'était pas apte elle à ouvrir ce type de format d'image, le script ce bloquait au niveau de la récupération de mes valeurs $width et $height.

Désormais, pour obtenir mes largeur/hauteur, j'utilise simplement un getimagesize($img) !
Et le tour est joué, mon tif se transforme bien en jpg et au bon format souhaité :D
Cependant, existe t'il une methode alternative en gd (comme vous pouvez le constaté, j'avais dabord commencé à générer mes miniatures grâce à GD, lorsque je me suis posé la question des conversions de format d'image...et imagemagick était ma fois plus approprié) pour ouvrir un fichier tif ? imagecreatefromtif par exemple :lol: ?

Sinon je n'ai pas très bien compris ta remarque sur mon chemin relatif...Je comprend que ca ne soit pas très jolie, mais mon script PHP ce trouve à un niveau 3 par rapport à l'arbo de mon site, et mon dossier qui contient le site est de niveau 2 (srv/www). Comment je fait pour rendre mon chemin en absolu ?

Merci pour vos réponses

par @rthur » 29 oct. 2007, 11:02

Bonjour,

Remplace exec() par system() et affiche ce que retourne l'exécution de ta ligne de commande pour connaître le problème:
http://fr.php.net/system

Par ailleurs, le chemin relatif "../../../../.." c'est qiuand même très laid, pourquoi ne pas mettre le chemin absolu par rapport à la racine de ton serveur?

ImageMagick ligne de commande exec

par costadelo » 28 oct. 2007, 22:05

Bonsoir @tous,

Je viens vous exposer mon problème lié à l'éxécution d'une ligne de commande qui s'éxécute très bien sous mon shell, mais qui ne fonctionne pas du tout dans un script PHP...
Cette commande est liée à la librairie imagemagick de PHP, elle me permet de transformer et de miniaturiser une image tif en jpg.

Commande exécutée en shell :

Code : Tout sélectionner

usr/bin/mogrify -format jpg -thumbnail 83x100 -strip -colorspace RGB -quality 100 /srv/www/img/photo01.tif
Commande éxécutée dans un fichier php :
$img = "http://<adresse ip de mon serveur>/img/photo01.tif";
ou
$img = "http://<adresse ip de mon serveur>/img/photo01.jpg";

$extension = strrchr($img, '.');

if( $extension == ".tif" || $extension == ".TIF" ){
		
	$convertString = "../../../../../usr/bin/mogrify -format jpg -thumbnail " . $new_width . "x" . $new_height . " -strip -colorspace RGB -quality 100 ".$img;
			
}else{
		
	$convertString = "../../../../../usr/bin/mogrify ".$img." -resize " . $new_width . "x" . $new_height . " -strip -colorspace RGB -quality 100 ".$img;//-interlace line
			
}
		
exec($convertString);

Le problème déxécution qui me pose problème est lorsque l'extension de mon fichier est en ".tif", sinon l'autre commande s'éxécute bien. Je tiens à signaler que ma variable $img dans le cas ou l'image est une autre extension que ".tif", est aussi une chemin absolu de type "http://<adresse ip de mon serveur>/img/photo01.tif".

Merci d'avance à tous les lecteurs de ce post