PNG, couche alpha et imagecopyresampled().

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 : PNG, couche alpha et imagecopyresampled().

Re: PNG, couche alpha et imagecopyresampled().

par inwebo » 13 nov. 2009, 17:24

Non j'utilise bien ImageCreateTrueColor(),

Voilà c'est dans une class,
	/**
     * Redimensionne une image $pictures, avec proportionalité sur la hauteur $new_width, largeur $new_height
	 * ou selon une taille prédéfinie ($new_width, $new_height)
	 *
	 * @arguments 	STRING $pictures chemin d'accès à une image
	 *				INT $new_width taille en pixel de la largeur voulue
	 *				INT $new_height taille en pixel de la hauteur voulue
	 *				
	 * @return    	BOOL 0 si une erreur est survenue
	 *					 RESOURCE images
     */
	public function set_resize_pics( $pictures, $new_width = NULL, $new_height = NULL) {
		
		// Image properties
		if( !getimagesize( $pictures ) ) {
			return FALSE;
		}
		else {
			$pics_param = getimagesize( $pictures );
		}
		
		// Resize fixed width and height
		if( isset( $new_width ) && isset( $new_height ) ) {
			$width  = $new_width;
			$height = $new_height;
		}
		// Resize by new width
		elseif( isset( $new_width ) && is_null( $new_height ) ) {
			// Ratio by width
			if( $new_width > $pics_param[0] ) {
				$ratio  = $new_width / $pics_param[0] ;
				$width  = $new_width ;
				$height = round( $pics_param[1] * $ratio ) ;
			}
			else {
				$ratio  = $pics_param[0] / $new_width  ;
				$width  = $new_width ;
				$height = round( $pics_param[1] / $ratio ) ;
			}
		}
		// Resize by new height
		elseif( isset( $new_height ) && is_null( $new_width ) ) {
			// Ratio by height
			if( $new_height > $pics_param[1] ) {
				$ratio  = $new_height / $pics_param[1] ;
				$width  = round( $pics_param[0] * $ratio ) ;
				$height = $new_height ;
			}
			else {
				$ratio  = $pics_param[1] / $new_height ;
				$width  = round( $pics_param[0] / $ratio ) ;
				$height = $new_height ;
			}
		}
		
		$image_mini 		= imagecreatetruecolor( $width, $height ) ;
		ImageAlphaBlending($image_mini, false);
		ImageSaveAlpha($image_mini, true);

		$pictures_origin	= self::get_open_pics( $pictures ) ;
		
		imagecopyresampled( $image_mini, $pictures_origin, 0, 0, 0, 0, $width, $height, $pics_param[0], $pics_param[1]) ;
		
		return $image_mini;
	}
Et get_open_pics
/**
     * Ouvre une image $pictures
	 *
	 * @arguments 	STRING $pictures chemin d'accès à une image
	 * @return    	BOOL 0 si une erreur est survenuee
	 *					 RESOURCE images
     */
	public function get_open_pics( $pictures ) {
		if( !is_file($pictures) ) {
			return FALSE;
		}
		$pictures_param = self::get_properties_pics( $pictures );
		switch( $pictures_param['mime'] ) {
			case 'image/png':
				// Conserve l'alpha blending !
				$size 			  = getimagesize( $pictures ) ;
				$img_src_resource = imagecreatetruecolor($size[0], $size[1]);
				ImageAlphaBlending($img_src_resource, false);
				ImageSaveAlpha($img_src_resource, true);
				$im 			  = imagecreatefrompng($pictures);
				imagecopyresampled($img_src_resource, $im, 0,0,0,0, $size[0], $size[1], $size[0], $size[1]);
				//
				
				return $img_src_resource;
				break;
				
			case 'image/jpeg':
				$img_src_resource = imagecreatefromjpeg($pictures);
				return $img_src_resource;
				break;
			
			case 'image/gif':
				$img_src_resource = imagecreatefromgif($pictures);
				return $img_src_resource;
				break;
			
			default :
				return FALSE;
				break;
		}
	}
Vlà, thx

Re: PNG, couche alpha et imagecopyresampled().

par @rthur » 13 nov. 2009, 17:16

Bonjour,

Donne nous un morceau de code pour qu'on puisse regarder d'où pourrait provenir le problème.
Tu utilises bien ImageCreateTrueColor() et pas ImageCreate() par hasard?

PNG, couche alpha et imagecopyresampled().

par inwebo » 13 nov. 2009, 17:12

PNG, couche alpha et imagecopyresampled().

Bonjour, bonsoir

Comment redimensionner une image png tout en conservant sa couche alpha ? Parce que là moi je sèche ? La doc de php ne précise rien du tout. J'ai bien utilisé les fonctions ImageAlphaBlending($une_image, false) suivis de imageSaveAlpha($une_image, true). Mais rien du tout...

Merci par avance !