Regresar a la página www.ComoCrearTuWeb.com
Página 2 de 2 PrimerPrimer 12
Resultados 16 al 17 de 17

Tema: [ayuda] problema con script en php que redimenciona imagenes!

  1. #16
    Me va gustando esto... Habitante
    Fecha de Ingreso
    10 jun, 11
    Ubicación
    Posadas
    Mensajes
    60
    Poder de Reputación
    14
    Que tal, logro solucionar el problema de la redimencion! (no creo que sea la solucion mas eficiente pero funciona) les dejo el codigo:
    Código PHP:
    <?PHP
    $a 
    0;
    $b 0;
    class 
    IMGResizer {
            
    /**
             * The image file path.
             * @var String.
             */
            
    private $image null;
            
            
    /**
             * Original image Width.
             * @var Integer.
             */
            
    private $owidth 0;
            
            
    /**
             * Original image Height.
             * @var Integer.
             */
            
    private $oheight 0;
            
            
    /**
             * Image file type (png, jpeg, jpg, gif, etc.). Currently only supports gif, png and jp(e)g.
             * @var String.
             */
            
    private $imgType '';
            
            
    /**
             * Resize width.
             * @var Integer.
             */
            
    private $nwidth 0;
            
            
    /**
             * Resize height.
             * @var Integer
             */
            
    private $nheight 0;
            
            
    /**
             * Resized File name.
             * @var String.
             */
            
    private $newFile '';
            
            
    /**
             * Image File base directory.
             * @var String.
             */
            
    private $path  '';
            
            
    /**
             * A class to resize images.
             * @param String $imagePath - The image file name and path.
             * @param Integer[] $newSize - $newSize[0] is the width and $newSize[1] is the height.
             * @param String $resizedFileName - Optional; if not specified, the original filename will be used.
             */
            
    public function __construct$imagePath$newSize$resizedFileName '' ) {
                
    $this->image $imagePath;
                
    $data getimagesize$imagePath );
                
    $this->owidth $data[0];
                
    $this->oheight $data[1];
                
    $tmp explode'/'$data['mime'] );
                
    $this->imgType $tmp[1];
                
    $this->nwidth $newSize[0];
                
    $this->nheight $newSize[1];
                
                if( 
    $resizedFileName )
                    
    $this->newFile $resizedFileName;
                else
                    
    $this->newFile basename$imagePath );
                
                
    $this->path dirname$imagePath );
            }
            
            
    /**
             * @return String - Returns the new image file name.
             */
            
    public function resize() {
                
    $target null;
                
    $source null;
                
    $fsave "$this->path/$this->newFile";
                
                switch( 
    $this->imgType ) {
                    case 
    'png':
                    case 
    'PNG':
                        
    $source imagecreatefrompng$this->image );
                        
    $target $this->getResizedResource();
                        
    imagealphablending$targetfalse );
                        
    imagesavealpha$targettrue );
                        
    $transparent imagecolorallocatealpha$target255255255127 );
                        
    imagefilledrectangle$target00$this->nwidth$this->nheight$transparent );
                        
    $this->resample$target$source );
                        
    imagepng$target$fsave );
                      
                        break;
                
                    case 
    'jpeg':
                    case 
    'jpg':
                    case 
    'JPEG':
                    case 
    'JPG':
                        
    $target $this->getResizedResource();
                        
    $source imagecreatefromjpeg$this->image );
                        
    $this->resample$target$source );
                        
    imagejpeg$target$fsave );
               
                        break;
                
                    case 
    'gif':
                    case 
    'GIF':
                        
    $target $this->getResizedResource();
                        
    $source imagecreatefromgif$this->image );
                        
    $this->resample$target$source );
                        
    imagegif$target$fsave );
                 
                        break;
                }
                    
                if( 
    $target !== null )
                    
    imagedestroy$target );
                
                if( 
    $source !== null )
                    
    imagedestroy$source );
                
                
    chmod$fsave0644 );
                return 
    $this->newFile;
            }
            
            
    /**
             * Creates a true color image with the values of $newSize param.
             * @param Integer[] $origSize - Original Width and Height
             * @param Integer[] $newSize - New width and height.
             * @return Resource - Returns a resized image resource.
             */
            
    public function getResizedResource() {
                
    $w 0;
                
    $h 0;
                
    $x $this->owidth;
                
    $y $this->oheight;
                
                if( 
    $x $y ) {
                    
    $w $this->nwidth;
                    
    $h $y * ( $this->nheight $x );
                } else if( 
    $x $y ) {
                    
    $w $x * ( $this->nwidth $y );
                    
    $h $this->nheight;
                } else {
                    
    $w $this->nwidth;
                    
    $h $this->nheight;
                }
                
    $GLOBALS['a']= $w;
                
    $GLOBALS['b']= $h;
                return 
    imagecreatetruecolor$w$h );
            }
            
            
    /**
             * Sets the image and path of the image to be resized.
             * @param String $imagePath - The image path and file name.
             */
            
    public function setImageAndPath$imagePath ) {
                if( 
    is_string$imagePath ) ) {
                    
    $this->image $imagePath;
                    
    $data getimagesize$imagePath );
                    
    $this->owidth $data[0];
                    
    $this->oheight $data[1];
                    
    $tmp explode'/'$data['mime'] );
                    
    $this->imgType $tmp[1];
                    
    $this->path dirname$imagePath );
                }
            }
            
            
    /**
             * Sets the resized image name.
             * @param String $name - Only the resized file name (not the path).
             */
            
    public function setResizedImageName$name ) {
                if( 
    preg_match'/^[\w\.\-_]+$/'$name ) ) {
                    
    $position strrchr$name'.' );
                    
    $this->newFile preg_replace"/$position/"''$name );
                }
            }
            
            
    /**
             * Set the new sizes.
             * @param Integer[] $sizes - Set the new sizes to be used when resizing the image.
             */
            
    public function setNewSizes$sizes ) {
                if( 
    is_array$sizes ) && IMGResizer::areNumeric$sizes ) ) {
                    if( isset( 
    $sizes['width'] ) && isset( $sizes['height'] ) ) {
                        
    $this->nwidth $sizes['width'];
                        
    $this->nheight $sizes['height'];
                    } else {
                        
    $this->nwidth $sizes[0];
                        
    $this->nheight $sizes[1];
                    }
                }
            }
            
            
    /**
             * Checks whether or not the array contains only numbers or not.
             * @param Mixed[] $array - The array to check.
             * @return Boolean - True, if the array contains only numbers, false otherwise.
             */
            
    public static function areNumeric$array ) {
                
    $ret true;
                        
                if( ! 
    is_array$array ) ) {
                    
    $ret &= is_numeric$array );
                } else {
                    foreach( 
    $array as $element ) {
                        if( 
    is_array$element ) ) {
                            
    $ret &= areNumeric$element );
                        } else {
                            
    $ret &= is_numeric$element );
                        }
                        
                        if( ! 
    $ret )
                            break;
                    }
                }
                        
                return 
    $ret;
            }
            
            
    /**
             * Wrapper arround imagecopyresampled.
             * Uses the new image width (set with the class constructor or with setNewSizes( $sizes ) method) and the current image height and width.
             * @param Resource $target - The target image resource.
             * @param Resource $source - Original Image resource.
             * @param Integer[] $coords - The coordinates to be used. The first 2 
             * elements are the target coordinates and the last 2, the source image coordinates.
             * @return Boolean | NULL - NULL if the $target or $source are not resources; True if
             * the image was resampled or false if there was an error.
             */
            
    public function resample$target$source$coords = array() ) {
                if( 
    is_resource$target ) && is_resource$source ) ) {
                    
    $tx 0;
                    
    $ty 0;
                    
    $sx 0;
                    
    $sy 0;
                    
                    if( ! empty( 
    $coords ) && count$coords ) == ) {
                        
    $tx $coords[0];
                        
    $ty $coords[1];
                        
    $sx $coords[2];
                        
    $sy $coords[3];
                    }
                    
                    return 
    imagecopyresampled$target$source$tx$ty$sx$sy$GLOBALS['a'], $GLOBALS['b'], $this->owidth$this->oheight );
                }
                 
                return 
    null;
            }
        }
    ?>
    Espero que les sirva abrazos y perdón por la demora! (grande jorge por pasarte por aca) :)

  2. #17
    Esto empieza a ser un vicio... Habitante
    Fecha de Ingreso
    02 may, 11
    Ubicación
    Santiago, Chile
    Mensajes
    2,079
    Poder de Reputación
    25
    Ja! Los errores torpes que cometo XD. El código, siguiendo el estilo orientado a objetos, quedaría así:

    Código PHP:
    class IMGResizer {
            
    /**
             * The image file path.
             * @var String.
             */
            
    private $image null;
            
            
    /**
             * Original image Width.
             * @var Integer.
             */
            
    private $owidth 0;
            
            
    /**
             * Original image Height.
             * @var Integer.
             */
            
    private $oheight 0;
            
            
    /**
             * Image file type (png, jpeg, jpg, gif, etc.). Currently only supports gif, png and jp(e)g.
             * @var String.
             */
            
    private $imgType '';
            
            
    /**
             * Resize width.
             * @var Integer.
             */
            
    private $nwidth 0;
            
            
    /**
             * Resize height.
             * @var Integer
             */
            
    private $nheight 0;
            
            
    /**
             * Resized File name.
             * @var String.
             */
            
    private $newFile '';
            
            
    /**
             * Image File base directory.
             * @var String.
             */
            
    private $path  '';
            
            
    /**
             * A class to resize images.
             * @param String $imagePath - The image file name and path.
             * @param Integer[] $newSize - $newSize[0] is the width and $newSize[1] is the height.
             * @param String $resizedFileName - Optional; if not specified, the original filename will be used.
             */
            
    public function __construct$imagePath$newSize$resizedFileName '' ) {
                
    $this->image $imagePath;
                
    $data getimagesize$imagePath );
                
    $this->owidth $data[0];
                
    $this->oheight $data[1];
                
    $tmp explode'/'$data['mime'] );
                
    $this->imgType $tmp[1];
                
    $this->nwidth $newSize[0];
                
    $this->nheight $newSize[1];
                
                if( 
    $resizedFileName )
                    
    $this->newFile $resizedFileName;
                else
                    
    $this->newFile basename$imagePath );
                
                
    $this->path dirname$imagePath );
            }
            
            
    /**
             * @return String - Returns the new image file name.
             */
            
    public function resize() {
                
    $target null;
                
    $source null;
                
    $fsave "$this->path/$this->newFile";
                
                switch( 
    $this->imgType ) {
                    case 
    'png':
                    case 
    'PNG':
                        
    $source imagecreatefrompng$this->image );
                        
    $target $this->getResizedResource();
                        
    imagealphablending$targetfalse );
                        
    imagesavealpha$targettrue );
                        
    $transparent imagecolorallocatealpha$target255255255127 );
                        
    imagefilledrectangle$target00$this->nwidth$this->nheight$transparent );
                        
    $this->resample$target$source );
                        
    imagepng$target$fsave );
                      
                        break;
                
                    case 
    'jpeg':
                    case 
    'jpg':
                    case 
    'JPEG':
                    case 
    'JPG':
                        
    $target $this->getResizedResource();
                        
    $source imagecreatefromjpeg$this->image );
                        
    $this->resample$target$source );
                        
    imagejpeg$target$fsave );
               
                        break;
                
                    case 
    'gif':
                    case 
    'GIF':
                        
    $target $this->getResizedResource();
                        
    $source imagecreatefromgif$this->image );
                        
    $this->resample$target$source );
                        
    imagegif$target$fsave );
                 
                        break;
                }
                    
                if( 
    $target !== null )
                    
    imagedestroy$target );
                
                if( 
    $source !== null )
                    
    imagedestroy$source );
                
                
    chmod$fsave0644 );
                return 
    $this->newFile;
            }
            
            
    /**
             * Creates a true color image with the values of $newSize param.
             * @param Integer[] $origSize - Original Width and Height
             * @param Integer[] $newSize - New width and height.
             * @return Resource - Returns a resized image resource.
             */
            
    public function getResizedResource() {
                
    $w 0;
                
    $h 0;
                
    $x $this->owidth;
                
    $y $this->oheight;
                
                if( 
    $x $y ) {
                    
    $w $this->nwidth;
                    
    $h $y * ( $this->nheight $x );
                } else if( 
    $x $y ) {
                    
    $w $x * ( $this->nwidth $y );
                    
    $h $this->nheight;
                } else {
                    
    $w $this->nwidth;
                    
    $h $this->nheight;
                }

                
    $this->nwidth  $w;
                
    $this->nheight $h;

                return 
    imagecreatetruecolor$w$h );
            }
            
            
    /**
             * Sets the image and path of the image to be resized.
             * @param String $imagePath - The image path and file name.
             */
            
    public function setImageAndPath$imagePath ) {
                if( 
    is_string$imagePath ) ) {
                    
    $this->image $imagePath;
                    
    $data getimagesize$imagePath );
                    
    $this->owidth $data[0];
                    
    $this->oheight $data[1];
                    
    $tmp explode'/'$data['mime'] );
                    
    $this->imgType $tmp[1];
                    
    $this->path dirname$imagePath );
                }
            }
            
            
    /**
             * Sets the resized image name.
             * @param String $name - Only the resized file name (not the path).
             */
            
    public function setResizedImageName$name ) {
                if( 
    preg_match'/^[\w\.\-_]+$/'$name ) ) {
                    
    $position strrchr$name'.' );
                    
    $this->newFile preg_replace"/$position/"''$name );
                }
            }
            
            
    /**
             * Set the new sizes.
             * @param Integer[] $sizes - Set the new sizes to be used when resizing the image.
             */
            
    public function setNewSizes$sizes ) {
                if( 
    is_array$sizes ) && IMGResizer::areNumeric$sizes ) ) {
                    if( isset( 
    $sizes['width'] ) && isset( $sizes['height'] ) ) {
                        
    $this->nwidth $sizes['width'];
                        
    $this->nheight $sizes['height'];
                    } else {
                        
    $this->nwidth $sizes[0];
                        
    $this->nheight $sizes[1];
                    }
                }
            }
            
            
    /**
             * Checks whether or not the array contains only numbers or not.
             * @param Mixed[] $array - The array to check.
             * @return Boolean - True, if the array contains only numbers, false otherwise.
             */
            
    public static function areNumeric$array ) {
                
    $ret true;
                        
                if( ! 
    is_array$array ) ) {
                    
    $ret &= is_numeric$array );
                } else {
                    foreach( 
    $array as $element ) {
                        if( 
    is_array$element ) ) {
                            
    $ret &= areNumeric$element );
                        } else {
                            
    $ret &= is_numeric$element );
                        }
                        
                        if( ! 
    $ret )
                            break;
                    }
                }
                        
                return 
    $ret;
            }
            
            
    /**
             * Wrapper arround imagecopyresampled.
             * Uses the new image width (set with the class constructor or with setNewSizes( $sizes ) method) and the current image height and width.
             * @param Resource $target - The target image resource.
             * @param Resource $source - Original Image resource.
             * @param Integer[] $coords - The coordinates to be used. The first 2 
             * elements are the target coordinates and the last 2, the source image coordinates.
             * @return Boolean | NULL - NULL if the $target or $source are not resources; True if
             * the image was resampled or false if there was an error.
             */
            
    public function resample$target$source$coords = array() ) {
                if( 
    is_resource$target ) && is_resource$source ) ) {
                    
    $tx 0;
                    
    $ty 0;
                    
    $sx 0;
                    
    $sy 0;
                    
                    if( ! empty( 
    $coords ) && count$coords ) == ) {
                        
    $tx $coords[0];
                        
    $ty $coords[1];
                        
    $sx $coords[2];
                        
    $sy $coords[3];
                    }
                    
                    
    // nwidth, nheight significan nuevo ancho (new width) y nueva altura (new height).
                    // owidth, oheight significan ancho original (original width) y altura original (original width).
                    
    return imagecopyresampled$target$source$tx$ty$sx$sy$this->nwidth$this->nheight$this->owidth$this->oheight );
                }
                 
                return 
    null;
            }
        }
    ?> 
    De esta forma se reasigna el valor del ancho y alto a nwidth y nheight para poder ser utilizados dentro de la clase.

Página 2 de 2 PrimerPrimer 12

Temas Similares

  1. Respuestas: 1
    Último Mensaje: 26/01/2011, 13:36
  2. Respuestas: 1
    Último Mensaje: 27/01/2009, 19:19

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •