Foros del Web » Programando para Internet » PHP »

Cambiar tamaño de una foto online en el servidor?

Estas en el tema de Cambiar tamaño de una foto online en el servidor? en el foro de PHP en Foros del Web. Buenas, estoy desarrollandoun panel de control de usuarios, los cuales pueden subir unas fotos al servidor. al principio, limite el tamaño de las fotos. el ...

  #1 (permalink)  
Antiguo 07/06/2005, 15:18
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Cambiar tamaño de una foto online en el servidor?

Buenas, estoy desarrollandoun panel de control de usuarios, los cuales pueden subir unas fotos al servidor. al principio, limite el tamaño de las fotos. el problema con el que me he encontrado es que la gente tiene camaras digitales (casi todos), hacen las fotos a bastante calidad y luego se quejan de que no les deja subir la foto.

mi pregunta es, si hay alguna manera de hacer que al subir la foto, se cambie el tamaño o la resolucion de la misma, o algun programa tipo editor de fotos (shareware), que se pueda subir a la red para que la gente pueda tratar sus fotos.

a ver si alguien puede ayudarme con el tema, o aportarme alguna solucion.

salu2
  #2 (permalink)  
Antiguo 07/06/2005, 15:35
 
Fecha de Ingreso: junio-2005
Mensajes: 6
Antigüedad: 18 años, 10 meses
Puntos: 0
Porfa postea parte de tu codigo para colaborar!!!, si hay formas de redimensionar las fotos, yo la se, pero dime la forma tu de subir las fotos y que el nombre se le cambie a 1.jpg y se almacene el nombre en la base de datos. el script para hacer lo de la imagen es este...
// PRIMERA IMAGEN MOSCAAAAAAAA CON EL NOBRE //
if($file1_name !="")
{
copy ("$file1", ".ruta/foto$nombre-1.jpg")
or die("NO SIRVEEEEEEEEEEE");
$img_original="ruta/foto$nombre-1.jpg";
$img_nueva="ruta/$nombre-1.jpg";
$img_nueva_anchura="400";
$img_nueva_altura="300";
$img_nueva_calidad="85";
$img = imagecreatefromjpeg($img_original);
$thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva _altura);
$sizes=getimagesize($img_original);
$alto=$sizes[0];
$ancho=$sizes[1];
imagecopyresized($thumb,$img,0,0,0,0,$img_nueva_an chura,$img_nueva_altura,imagesx($img),imagesy($img ));
imagejpeg($thumb,$img_nueva,$img_nueva_calidad);
$img_nueva="./Images/modelos/hombres/1/p$nombre-1.jpg";
$img_nueva_anchura="150";
$img_nueva_altura="113";
$img_nueva_calidad="85";
$img = imagecreatefromjpeg($img_original);
$thumb = imagecreatetruecolor($img_nueva_anchura,$img_nueva _altura);
$sizes=getimagesize($img_original);
$alto=$sizes[0];
$ancho=$sizes[1];
imagecopyresized($thumb,$img,0,0,0,0,$img_nueva_an chura,$img_nueva_altura,imagesx($img),imagesy($img ));
imagejpeg($thumb,$img_nueva,$img_nueva_calidad);
imagedestroy ($img);
unlink($img_original);
$foto1="$nombre-1.jpg";
}
  #3 (permalink)  
Antiguo 07/06/2005, 15:48
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias hackerunet, te he escrito un privado.

gracias!
  #4 (permalink)  
Antiguo 07/06/2005, 19:04
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola ferranWeb:

Te dejo un code que es bastante parametrizable. Acepta jpg, png y gif, y calcula el alto para hacerlo proporcional al ancho que elijas. Además si así lo deseas, te devuelve 2 versiones, una grande y una chica, por ejemplo, y además puedes usar un archivo png como marca de agua.

La función devuelve el URL de las imágenes, como para que lo guardes en tu base de datos.

Espero que te sirva.

Código PHP:
##################################################################################################
# BEGIN imgResample2
# ------------------------------------------------------------------------------------------------
# DESCRIPCIÓN:
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima,
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua
# Genera una imagen Thumbnail también.
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen
# DEVUELVE: 
# Nada
# PARÁMETROS:
# $campo    ->    string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar
# $dir        ->    string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual
# $anchura    ->    número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px
# $watermark->    string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail
# $pos        ->    string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales
# $wmdist    ->    número, opcional, predeterminado = 0; padding en pixeles para el Watermark
# $c1        ->    número, opcional, predeterminado = 85; calidad del jpg de la imagen grande
# $c2        ->    número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail
#
# EJEMPLO:
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual
function imgResample2 ($campo$dir=""$anchura=250$anchura_thumb=100$watermark=""$watermark_thumb=""$pos="L-T"$wmdist=0$c1=95$c2=97){

    if(
$_FILES[$campo]['name']!=''){
    
    
//Si el campo está lleno, es decir, si se subió una foto...

        //crea los directorios necesarios
        
if($dir!=""){
            if(!
file_exists($dir)) mkdir($dir);
        }
        
//asigna las variables        
        
$name=$_FILES[$campo]['name'];
        
$type=$_FILES[$campo]['type'];
        
$image_name $name;
        
        
//Imagen original en el servidor
        
$temp=$_FILES[$campo]['tmp_name']; 
        
        
//Objeto con el que trabajará el programa
        
if($type=="image/pjpeg"){
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
        }
        if(
$_FILES[$campo]['type']=="image/gif"){
            
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".gif"".jpg"$image_name);
        }
        if(
$_FILES[$campo]['type']=="image/x-png"){
            
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".png"".jpg"$image_name);
        }
        
//Para que acepte la transparencia del PNG
        
imagealphablending($imgtrue);
        
//INICIA PROCESO
            
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
            
$ratio = ($dimensiones[0] / $anchura);
            
$altura round($dimensiones[1] / $ratio);
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen
            
$FFF imagecolorallocate($img255,255,255);
            
imagefill($image00$FFF);
            
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala
            
            //INICIA WATERMARK
            //posición horizontal y vertical del watermark:
            
$pos explode("-",$pos);
            
$wmhorz=$pos[0];
            
$wmvert=$pos[1];
        
            if(
$watermark != ''){
                
$logo imagecreatefrompng($watermark);
                
$margen $wmdist//distancia entre el watermark y la orilla
                
$logoW =imagesx($logo); //Anchura del logo
                
$logoH =imagesy($logo); //Altura del logo
                
switch ($wmhorz){
                    case 
"L":
                        
$xpos=$margen;
                        break; 
//end L
                    
case "R":
                        
$xpos=$anchura-$logoW-$margen//posición en x del wm
                        
break; //end R
                
//end switch hotz
                
switch ($wmvert){
                    case 
"T":
                        
$ypos=$margen
                        break; 
//end T
                    
case "B":
                        
$ypos=$altura-$logoH-$margen//posición en y del wm
                        
break; //end B
                
//end switch vert
                
imagecopy($image$logo$xpos$ypos00$logoW$logoH); //Pone el logo
                
imagedestroy($logo); //destruye el logo después de usarlo
            
}
            
//TERMINA WATERMARK
            
imagejpeg($image,"$dir$image_name"$c1);//mueve la imagen al server (el segundo parámetro es la calidad)
            
imagedestroy($image); //destruye image
            
imagedestroy($img); //destruye la imagen "origen"
        //TERMINA IMAGEN
        
        //INICIA THUMBNAIL
        
if($anchura_thumb != || $anchura_thumb == $anchura || $anchura_thumb == "" || $anchura_thumb == NULL) {
            
//crea los directorios necesarios
            
$subdir "small";
            if(
$dir!=""){
                if(!
file_exists($dir.$subdir)) mkdir($dir.$subdir);
            } else {
                if(!
file_exists($subdir)) mkdir($subdir);
            }
            
//asigna las variables        
            
$name=$_FILES[$campo]['name'];
            
$type=$_FILES[$campo]['type'];
            
$thumb_name $subdir."/".$name;
            
            
//Imagen original en el servidor
            
$temp=$_FILES[$campo]['tmp_name']; 
            
            
//Objeto con el que trabajará el programa
            
if($type=="image/pjpeg"){
                
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            }
            if(
$_FILES[$campo]['type']=="image/gif"){
                
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".gif"".jpg"$thumb_name);
            }
            if(
$_FILES[$campo]['type']=="image/x-png"){
                
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".png"".jpg"$thumb_name);
            }
            
//Para que acepte la transparencia del PNG
            
imagealphablending($imgtrue);
            
//INICIA PROCESO
                
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
                
$ratio_thumb = ($dimensiones[0] / $anchura_thumb);
                
$altura_thumb round($dimensiones[1] / $ratio_thumb);
                
$thumb imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen
                
$FFF imagecolorallocate($img255,255,255);
                
imagefill($thumb00$FFF);
                
imagecopyresampled ($thumb$img0000$anchura_thumb$altura_thumb$dimensiones[0], $dimensiones[1]);//reescala el thumbnail
                //INICIA WATERMARK THUMB
                
if($watermark_thumb != ''){
                    
$logo_thumb imagecreatefrompng($watermark_thumb);
                    
$margen $wmdist//distancia entre el watermark y la orilla
                    
$logoW_thumb =imagesx($logo_thumb); //Anchura del logo
                    
$logoH_thumb =imagesy($logo_thumb); //Altura del logo
                    
switch ($wmhorz){
                        case 
"L":
                            
$xposThumb=$margen/2;
                            break; 
//end L
                        
case "R":
                            
$xposThumb=$anchura_thumb-$logoW_thumb-($margen/2); //posición en x del wm
                            
break; //end R
                    
//end switch hotz
                    
switch ($wmvert){
                        case 
"T":
                            
$yposThumb=$margen/2;
                            break; 
//end T
                        
case "B":
                            
$yposThumb=$altura_thumb-$logoH_thumb-($margen/2); //posición en y del wm
                            
break; //end B
                    
//end switch vert
                    
imagecopy($thumb$logo_thumb$xposThumb$yposThumb00$logoW_thumb$logoH_thumb); //Pone el logo
                    
imagedestroy($logo_thumb); //destruye el logo después de usarlo
                
}
                
//TERMINA WATERMARK THUMB
                
imagejpeg($thumb,"$dir$thumb_name"$c2);//mueve la imagen al server (el segundo parámetro es la calidad)
                
imagedestroy($thumb); //destruye thumb
                
imagedestroy($img); //destruye la imagen "origen"
                
            
} else {
            
                
$thumb_name $image_name;
            
            } 
// end if != 0
            
        //TERMINA THUMBNAIL
    
}
    
$unique time();
    
    
$resampled[0] = $dir.$image_name;
    
$resampled[1] = $dir.$thumb_name
    
$resampled[2] = "<img src=\"$dir$image_name?i=$unique\">";
    
$resampled[3] = "<img src=\"$dir$thumb_name?i=$unique\">";
    
    return 
$resampled;
    
}
# END imgResample2
################################################################################################## 
  #5 (permalink)  
Antiguo 08/06/2005, 02:42
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias escoffie por responder. he estado probando el script, pero no me sale. en principio, solo hay que cambiar $campo por el nombre de mi archivo, no? en este caso $logo. con esto deberia funcionar, no?

pues no me sale. si lo has probado, podrias decirme si hay que cambiar alguna cosa mas??

salu2
  #6 (permalink)  
Antiguo 08/06/2005, 04:02
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
el problema es que mi script me da como insertado, aunque creo que el problema esta en la ruta donde debo guardar la foto. creo q ahi debe de estar el error.

salu2
  #7 (permalink)  
Antiguo 08/06/2005, 08:51
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola ferranWeb:

El único parámetro obilgatorio para la función es $campo. Este debe ser el nombre de tu input file.

Por ejemplo, pensemos que tienes esta forma html:

Código HTML:
<form action="<?=$PHP_SELF;?>" method="POST" enctype="multipart/form-data" name="editpage" id="editpage">
<input name="img1" type="file" id="img1" size="40">
<input type="submit" name="Submit" value="Subir imagen">
</form> 
Tienes un input que se llama img1 y es de tipo file

Entonces la función la llamas de esta forma:

Código PHP:
if(isset($_POST['Submit'])){
//si ya se hizo clic en submit
$fotos=imageResample2("img1""../images/uploads/");
for(
$i=0;$i<sizeof($fotos);$i++){
// esto imprime en pantalla el contenido del arreglo $fotos
//las dos primeras posiciones contienen el url de la foto relativo a raíz
//las dos últimas contienen la etiqueta <img> para mostrar la foto en pantalla
echo "Arreglo fotos, posición #$i: ".$fotos[$i]."<br>";
//end for
//para guardar las direcciones en la base de datos (ojo, no guarda la imagen como blob, sólo la dirección)
$query="INSERT INTO images (grande, chica) VALUES ('".$fotos[0]."','".$fotos[1]."')";
mysql_select_db ($db_name$conexion);
mysql_query($query,$conexion);
//end if post 
Lo que hace esto es tomar el valor $campo para que use el array $_FILES[$campo]; es decir, el nombre de tu input file, y el segundo parámetro es la carpeta donde quieres que se suba, y es relativa a donde estás ejecutando el script. O sea, en este caso, la carpeta ../images/uploads tiene el ../ para salir de donde está el script, y luego entra a images/upload (je! creo que no está muy claro).

Los demás parámetros los dejamos en sus valores predeterminados, así que deberá generar dos imágenes, una de 250px de ancho y otra de 100px de ancho. Si la primera se guarda en /images/uploads/nombre.jpg, la segunda se guarda en /images/uploads/small/nombre.jpg

Los demás parámetros y su funcionamiento están especificados por ahí en los comentarios dentro de la función.

Cualquier duda, con todo gusto estoy a tus órdenes.

Por cierto, yo antes tenía una función parecida que me devolvía una cadena para insertar en un blob, es decir, guardaba la imagen en la base de datos, pero desistí de hacer esto porque es más flexible y fácil copiar el archivo al server y guardar sólo la url de la imagen.

Saludos
  #8 (permalink)  
Antiguo 08/06/2005, 08:58
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Algo más, si la carpeta no existe, la función intentará crearla, con los permisos necesarios de lectura y escritura. Pero si la carpeta ya existe, asegúrate que tenga los permisos necesarios para este fin (777 o algo así).

Yo lo tengo corriendo como en 5 sitios en servidores Apache+PHP4+MySQL y funciona a todo dar, así que supongo que debería funcionarte.

Requiere que el PHP tenga las librerías GD 2.0.15 o superiores y que estén "enabled".

Esto lo puedes revisar haciendo un archivo llamado info.php en cuyo interior sólo pongas <? phpinfo(); ?>

Cuando lo corras te saldrá una lista de todo lo que está habilitado.

Saludos
  #9 (permalink)  
Antiguo 10/09/2005, 09:34
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
HOLA ESCOFFIE
estuve revisando este codigo y está muy bueno. me ha servido mucho
pero tengo una pregunta:

Yo necesito que todas las imagenes del sitio queden de 250 x 250, el problema es que si subo una imagen de por ej. 1280 x 960 me la redimensiona proporcionalmente a 250 x 188 .

¿Como lo puedo hacer para que me la ajuste a 250 x 250?

intenté cambiando
$altura = round($dimensiones[1] / $ratio);
por
$altura =250;
pero lo que hace es estirar la imagen por lo cual no me sirve.


como la imagen de 250 x 188 es mas pequeña que 250 x 250 debería centrarla y crear una nueva imagen de 250 x 250 con fondo blanco conteniendo a la de 250 x 188... ¿me explico o no?

incluso hice una marca de agua en formato png que es un borde de 1 pixel y el nombre de mi sitio web que se aplica correctamente cuando las fotos son cuadradas.

ojala alguien me pueda ayudar

PD: En deremate (http://www.deremate.cl/accdb/ViewItem.asp?IDI=9880397&page=19) si se dan cuenta la foto del atril es mas ancha que alta por lo cual el espacio sobrante está relleno con blanco.

¿como lo hago?

Cita:
Iniciado por Escoffie
Hola ferranWeb:

Te dejo un code que es bastante parametrizable. Acepta jpg, png y gif, y calcula el alto para hacerlo proporcional al ancho que elijas. Además si así lo deseas, te devuelve 2 versiones, una grande y una chica, por ejemplo, y además puedes usar un archivo png como marca de agua.

La función devuelve el URL de las imágenes, como para que lo guardes en tu base de datos.

Espero que te sirva.

Código PHP:
##################################################################################################
# BEGIN imgResample2
# ------------------------------------------------------------------------------------------------
# DESCRIPCIÓN:
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima,
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua
# Genera una imagen Thumbnail también.
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen
# DEVUELVE: 
# Nada
# PARÁMETROS:
# $campo    ->    string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar
# $dir        ->    string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual
# $anchura    ->    número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px
# $watermark->    string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail
# $pos        ->    string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales
# $wmdist    ->    número, opcional, predeterminado = 0; padding en pixeles para el Watermark
# $c1        ->    número, opcional, predeterminado = 85; calidad del jpg de la imagen grande
# $c2        ->    número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail
#
# EJEMPLO:
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual
function imgResample2 ($campo$dir=""$anchura=250$anchura_thumb=100$watermark=""$watermark_thumb=""$pos="L-T"$wmdist=0$c1=95$c2=97){

    if(
$_FILES[$campo]['name']!=''){
    
    
//Si el campo está lleno, es decir, si se subió una foto...

        //crea los directorios necesarios
        
if($dir!=""){
            if(!
file_exists($dir)) mkdir($dir);
        }
        
//asigna las variables        
        
$name=$_FILES[$campo]['name'];
        
$type=$_FILES[$campo]['type'];
        
$image_name $name;
        
        
//Imagen original en el servidor
        
$temp=$_FILES[$campo]['tmp_name']; 
        
        
//Objeto con el que trabajará el programa
        
if($type=="image/pjpeg"){
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
        }
        if(
$_FILES[$campo]['type']=="image/gif"){
            
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".gif"".jpg"$image_name);
        }
        if(
$_FILES[$campo]['type']=="image/x-png"){
            
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
            
$image_name str_replace(".png"".jpg"$image_name);
        }
        
//Para que acepte la transparencia del PNG
        
imagealphablending($imgtrue);
        
//INICIA PROCESO
            
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
            
$ratio = ($dimensiones[0] / $anchura);
            
$altura round($dimensiones[1] / $ratio);
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen
            
$FFF imagecolorallocate($img255,255,255);
            
imagefill($image00$FFF);
            
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala
            
            //INICIA WATERMARK
            //posición horizontal y vertical del watermark:
            
$pos explode("-",$pos);
            
$wmhorz=$pos[0];
            
$wmvert=$pos[1];
        
            if(
$watermark != ''){
                
$logo imagecreatefrompng($watermark);
                
$margen $wmdist//distancia entre el watermark y la orilla
                
$logoW =imagesx($logo); //Anchura del logo
                
$logoH =imagesy($logo); //Altura del logo
                
switch ($wmhorz){
                    case 
"L":
                        
$xpos=$margen;
                        break; 
//end L
                    
case "R":
                        
$xpos=$anchura-$logoW-$margen//posición en x del wm
                        
break; //end R
                
//end switch hotz
                
switch ($wmvert){
                    case 
"T":
                        
$ypos=$margen
                        break; 
//end T
                    
case "B":
                        
$ypos=$altura-$logoH-$margen//posición en y del wm
                        
break; //end B
                
//end switch vert
                
imagecopy($image$logo$xpos$ypos00$logoW$logoH); //Pone el logo
                
imagedestroy($logo); //destruye el logo después de usarlo
            
}
            
//TERMINA WATERMARK
            
imagejpeg($image,"$dir$image_name"$c1);//mueve la imagen al server (el segundo parámetro es la calidad)
            
imagedestroy($image); //destruye image
            
imagedestroy($img); //destruye la imagen "origen"
        //TERMINA IMAGEN
        
        //INICIA THUMBNAIL
        
if($anchura_thumb != || $anchura_thumb == $anchura || $anchura_thumb == "" || $anchura_thumb == NULL) {
            
//crea los directorios necesarios
            
$subdir "small";
            if(
$dir!=""){
                if(!
file_exists($dir.$subdir)) mkdir($dir.$subdir);
            } else {
                if(!
file_exists($subdir)) mkdir($subdir);
            }
            
//asigna las variables        
            
$name=$_FILES[$campo]['name'];
            
$type=$_FILES[$campo]['type'];
            
$thumb_name $subdir."/".$name;
            
            
//Imagen original en el servidor
            
$temp=$_FILES[$campo]['tmp_name']; 
            
            
//Objeto con el que trabajará el programa
            
if($type=="image/pjpeg"){
                
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            }
            if(
$_FILES[$campo]['type']=="image/gif"){
                
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".gif"".jpg"$thumb_name);
            }
            if(
$_FILES[$campo]['type']=="image/x-png"){
                
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n");
                
$thumb_name str_replace(".png"".jpg"$thumb_name);
            }
            
//Para que acepte la transparencia del PNG
            
imagealphablending($imgtrue);
            
//INICIA PROCESO
                
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen
                
$ratio_thumb = ($dimensiones[0] / $anchura_thumb);
                
$altura_thumb round($dimensiones[1] / $ratio_thumb);
                
$thumb imagecreatetruecolor($anchura_thumb,$altura_thumb); //crea la nueva imagen
                
$FFF imagecolorallocate($img255,255,255);
                
imagefill($thumb00$FFF);
                
imagecopyresampled ($thumb$img0000$anchura_thumb$altura_thumb$dimensiones[0], $dimensiones[1]);//reescala el thumbnail
                //INICIA WATERMARK THUMB
                
if($watermark_thumb != ''){
                    
$logo_thumb imagecreatefrompng($watermark_thumb);
                    
$margen $wmdist//distancia entre el watermark y la orilla
                    
$logoW_thumb =imagesx($logo_thumb); //Anchura del logo
                    
$logoH_thumb =imagesy($logo_thumb); //Altura del logo
                    
switch ($wmhorz){
                        case 
"L":
                            
$xposThumb=$margen/2;
                            break; 
//end L
                        
case "R":
                            
$xposThumb=$anchura_thumb-$logoW_thumb-($margen/2); //posición en x del wm
                            
break; //end R
                    
//end switch hotz
                    
switch ($wmvert){
                        case 
"T":
                            
$yposThumb=$margen/2;
                            break; 
//end T
                        
case "B":
                            
$yposThumb=$altura_thumb-$logoH_thumb-($margen/2); //posición en y del wm
                            
break; //end B
                    
//end switch vert
                    
imagecopy($thumb$logo_thumb$xposThumb$yposThumb00$logoW_thumb$logoH_thumb); //Pone el logo
                    
imagedestroy($logo_thumb); //destruye el logo después de usarlo
                
}
                
//TERMINA WATERMARK THUMB
                
imagejpeg($thumb,"$dir$thumb_name"$c2);//mueve la imagen al server (el segundo parámetro es la calidad)
                
imagedestroy($thumb); //destruye thumb
                
imagedestroy($img); //destruye la imagen "origen"
                
            
} else {
            
                
$thumb_name $image_name;
            
            } 
// end if != 0
            
        //TERMINA THUMBNAIL
    
}
    
$unique time();
    
    
$resampled[0] = $dir.$image_name;
    
$resampled[1] = $dir.$thumb_name
    
$resampled[2] = "<img src=\"$dir$image_name?i=$unique\">";
    
$resampled[3] = "<img src=\"$dir$thumb_name?i=$unique\">";
    
    return 
$resampled;
    
}
# END imgResample2
################################################################################################## 
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"

Última edición por huayayo; 10/09/2005 a las 10:24
  #10 (permalink)  
Antiguo 10/09/2005, 13:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
huayayo

El problema del ejemplo que ves es que crea la imagen nueva con esas dimensiones . en principio se usa para respetar las proporciones ..

Usa alguna classe para tal fin (de "memória" no me acuerdo además que tendrías que probarlo .. cosa que en estos instantes no puedo hacer).

Te recomiendo que te pases por sistios como www.phpclasses.org (busca ahí por thumbnail o resize) .. ahí tienes funciones para proceso de imagenes bastante avanzadas alguna hará lo que necesitas seguramente. Y sino, .. tendrás que estudiar como funcionan dichas funciones sobre GD .. por qué el detalle lo tienes en la "mascara" que has de crear para luego copiar tu imagen redimensionada (por ahí va el tema).


Un saludo,
  #11 (permalink)  
Antiguo 10/09/2005, 13:58
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
ok voy a revisar www.phpclasses.org
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"
  #12 (permalink)  
Antiguo 12/09/2005, 07:28
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola Huayayo:

Con respecto a que las fotos tengan siempre el mismo tamaño de ancho y alto, hay dos posibilidades:
1. Que la foto se aplaste cambiando sus proporciones.
2. Que la foto se recorte cambiando su forma (reencuadre).
Si fuera Photoshop, el primero es como cambiarle el tamaño con "image size" y el otro es como cambiarle el tamaño con "canvas size" o la herramienta "crop".

En mi humilde opinión ambas me parecen inadecuadas, pues hacen que la foto deje de representarse como originalmente es, ¿me explico? en el primer caso, aparece distorsionada (un flaco se vería gordo), y en el segundo aparece cortada. Pero si tuviera que elegir entre una de esas opciones, elegiría la segunda, pues recorta, pero sin distorsionar las cosas, lo cual se me hace bastante feo.

A reserva de que compartas mi opinión o no, lo que quieres hacer es muy sencillo. Sólo hay que cambiar unas cuantas líneas del código que publiqué aquí:

Sustituye:
Código PHP:
//INICIA PROCESO 
            
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
            
$ratio = ($dimensiones[0] / $anchura); 
            
$altura round($dimensiones[1] / $ratio); 
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
            
$FFF imagecolorallocate($img255,255,255); 
            
imagefill($image00$FFF); 
            
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala 
Para cambiar (forzar) el tamaño al ancho y alto especificado:
//INICIA PROCESO
Código PHP:
            //$dimensiones = getimagesize($temp); //Dimensiones originales de la imagen 
            
$anchura=250//medida en píxeles, aquí pones lo que quieras
            
$altura 250//medida en píxeles, aquí pones lo que quieras
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
            
$FFF imagecolorallocate($img255,255,255); 
            
imagefill($image00$FFF); 
            
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//cambia las proporciones al tamaño especificado 
Para el caso del reencuadre, sería algo así:
Código PHP:
//INICIA PROCESO 
            
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
            
$anchura=250//medida en píxeles, aquí pones lo que quieras
            
$altura 250//medida en píxeles, aquí pones lo que quieras 
            
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
            
$FFF imagecolorallocate($img255,255,255); 
            
imagefill($image00$FFF); 
            
imagecopyresampled ($image$img0000$dimensiones[0], $dimensiones[1], $dimensiones[0], $dimensiones[1]);//rellena el rectángulo del tamaño especificado con la imagen, sólo será visible lo que quepa de la imagen, el relleno empieza desde 0x, 0y (esquina superior izquierda) 
En ambos casos, tendrías que cambiar los parámetros de la función y aplicar el cambio tanto donde se hace el thumbnail como en la imagen grande, pues sólo recibe la anchura (pues la altura la calculaba proporcionalmente).

Para más información sobre los parámetros de estas funciones, puedes revisar www.php.net/imagecopyresampled

Importante: no he probado estos cambios. Si no funciona será cosa de que revises los parámetros que se le pasan a cada función

Hay me platicas cómo te fue.
  #13 (permalink)  
Antiguo 12/09/2005, 20:27
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
Escoffie :
El código va mucho mejor. funciona correctamente cuando la imagen original es menor de 250 x 250 o cuando es de tamaño superior a 250 x 250 pero cuadrada.

El problema es cuando la imagen es mayor a 250 x 250 pero de lados distintos (por ejemplo 1024 x 768), lo que hace en este caso es tomar una parte de la foto, osea lo que alcance en 250 x 250 partiendo de la posición 0,0.

Cuando la foto es de 1024x 768 debe hacer lo siguiente:
-Redimensionarla proporcionalmente a 250 x 188
-Incrustarla en otra imagen de 250 x 250 para mantener la uniformidad de las imagenes (mirar el ejemplo en deremate http://www.deremate.cl/accdb/ViewIte...880397&page=19)

el codigo que estoy utilizando es este. (Se puede copiar y pegar en un php para probar), le saqué la parte del thumbail porque no la necesito utilizar por ahora.

Código PHP:
<?php
##################################################  ################################################ 
# BEGIN imgResample2 
# ------------------------------------------------------------------------------------------------ 
# DESCRIPCIÓN: 
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima, 
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua 
# Genera una imagen Thumbnail también. 
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen 
# DEVUELVE: 
# Nada 
# PARÁMETROS: 
# $campo    ->    string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar 
# $dir        ->    string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual 
# $anchura    ->    número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px 
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px 
# $watermark->    string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize 
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail 
# $pos        ->    string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales 
# $wmdist    ->    número, opcional, predeterminado = 0; padding en pixeles para el Watermark 
# $c1        ->    número, opcional, predeterminado = 85; calidad del jpg de la imagen grande 
# $c2        ->    número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail 

# EJEMPLO: 
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual 
function imgResample2 ($campo$dir="img/"$anchura=250$anchura_thumb=80$watermark="sello.png"$watermark_thumb=""$pos="L-B"$wmdist=1$c1=95$c2=97){ 

    if(
$_FILES[$campo]['name']!=''){ 
     
    
//Si el campo está lleno, es decir, si se subió una foto... 

        //crea los directorios necesarios 
        
if($dir!=""){ 
            if(!
file_exists($dir)) mkdir($dir); 
        } 
        
//asigna las variables         
        
$name $_FILES[$campo]['name']; 
        
$type $_FILES[$campo]['type']; 
        
$image_name $name
         
        
//Imagen original en el servidor 
        
$temp $_FILES[$campo]['tmp_name']; 
         
        
//Objeto con el que trabajará el programa 
        
if($type=="image/pjpeg"){ 
            
$img = @imagecreatefromjpeg($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
        } 
        if(
$_FILES[$campo]['type']=="image/gif"){ 
            
$img = @imagecreatefromgif($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            
$image_name str_replace(".gif"".jpg"$image_name); 
        } 
        if(
$_FILES[$campo]['type']=="image/x-png"){ 
            
$img = @imagecreatefrompng($temp) or die("No se encuentra la imagen $image_name<br>\n"); 
            
$image_name str_replace(".png"".jpg"$image_name); 
        } 
        
//Para que acepte la transparencia del PNG 
        
imagealphablending($imgtrue); 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
        /*
        //INICIA PROCESO 
            if ($dimensiones[0] == $dimensiones[1]) {
                //Este funciona bien para imagenes de mismo alto mismo ancho
                
                $ratio = ($dimensiones[0] / $anchura); 
                $altura = round($dimensiones[1] / $ratio); 
                echo $dimensiones[0]."<br>";
                echo $dimensiones[1];
    
                $image = imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
                $FFF = imagecolorallocate($img, 255,255,255); 
                imagefill($image, 0, 0, $FFF); 
                imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura, $altura, $dimensiones[0], $dimensiones[1]);//reescala 
             }
        */
        //INICIA PROCESO 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
$ratio = ($dimensiones[0] / $anchura); 
        
$altura round($dimensiones[1] / $ratio); 
        
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
        
$FFF imagecolorallocate($img255,255,255); 
        
imagefill($image00$FFF); 
        
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);//reescala

        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
$anchura=250//medida en píxeles, aquí pones lo que quieras 
        
$altura 250//medida en píxeles, aquí pones lo que quieras 
        
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
        
$FFF imagecolorallocate($img255,255,255); 
        
imagefill($image00$FFF); 
        
imagecopyresampled ($image$img0000$anchura$altura$dimensiones[0], $dimensiones[1]);
        
// Cambia las proporciones al tamaño especificado 

        //INICIA PROCESO 
        
$dimensiones getimagesize($temp); //Dimensiones originales de la imagen 
        
$anchura=250//medida en píxeles, aquí pones lo que quieras 
        
$altura 250//medida en píxeles, aquí pones lo que quieras 
        
$image imagecreatetruecolor($anchura,$altura); //crea la nueva imagen 
        
$FFF imagecolorallocate($img255,255,255); 
        
imagefill($image00$FFF); 
        
imagecopyresampled ($image$img0000$dimensiones[0], $dimensiones[1], $dimensiones[0], $dimensiones[1]);
        
// Rellena el rectángulo del tamaño especificado con la imagen, sólo será visible lo que quepa de la imagen, 
        // el relleno empieza desde 0x, 0y (esquina superior izquierda) 










  
            //INICIA WATERMARK 
            //posición horizontal y vertical del watermark: 
            
$pos explode("-",$pos); 
            
$wmhorz=$pos[0]; 
            
$wmvert=$pos[1]; 
         
            if(
$watermark != ''){ 
                
$logo imagecreatefrompng($watermark); 
                
$margen $wmdist//distancia entre el watermark y la orilla 
                
$logoW =imagesx($logo); //Anchura del logo 
                
$logoH =imagesy($logo); //Altura del logo 
                
switch ($wmhorz){ 
                    case 
"L"
                        
$xpos=$margen
                        break; 
//end L 
                    
case "R"
                        
$xpos=$anchura-$logoW-$margen//posición en x del wm 
                        
break; //end R 
                
//end switch hotz 
                
switch ($wmvert){ 
                    case 
"T"
                        
$ypos=$margen
                        break; 
//end T 
                    
case "B"
                        
$ypos=$altura-$logoH-$margen//posición en y del wm 
                        
break; //end B 
                
//end switch vert 
                
imagecopy($image$logo$xpos$ypos00$logoW$logoH); //Pone el logo 
                
imagedestroy($logo); //destruye el logo después de usarlo 
            

            
//TERMINA WATERMARK 
            
imagejpeg($image,"$dir$image_name"$c1);//mueve la imagen al server (el segundo parámetro es la calidad) 
            
imagedestroy($image); //destruye image 
            
imagedestroy($img); //destruye la imagen "origen" 
        //TERMINA IMAGEN 
 
}
    
$unique time(); 
     
    
$resampled[0] = $dir.$image_name
    
$resampled[1] = $dir.$thumb_name
    
$resampled[2] = "<img src=\"$dir$image_name?i=$unique\">"
    
$resampled[3] = "<img src=\"$dir$thumb_name?i=$unique\">"
     
    return 
$resampled
     

# END imgResample2 
##################################################  ################################################ 
?>
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"

Última edición por Cluster; 13/09/2005 a las 06:16
  #14 (permalink)  
Antiguo 15/09/2005, 02:23
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
Escoffie, mira tengo este codigo:

PASO 1:
$altura = 250;
$ratio = ($dimensiones[1] / $altura);
$anchura = round($dimensiones[0] / $ratio);

$image = imagecreatetruecolor($anchura,$altura); //crea la nueva imagen
$FFF = imagecolorallocate($img, 255,255,255);
imagefill($image, 0, 0, $FFF);
imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura, $altura, $dimensiones[0], $dimensiones[1]);//reescala


despues de esto agrego el watermark:

//INICIA WATERMARK
//posición horizontal y vertical del watermark:
$pos = explode("-",$pos);
$wmhorz = $pos[0];
$wmvert = $pos[1];

if($watermark != ''){
$logo = imagecreatefrompng($watermark);
$margen = $wmdist; //distancia entre el watermark y la orilla
$logoW =imagesx($logo); //Anchura del logo
$logoH =imagesy($logo); //Altura del logo
switch ($wmhorz){
case "L":
$xpos=$margen;
break; //end L
case "R":
$xpos=$anchura-$logoW-$margen; //posición en x del wm
break; //end R
} //end switch hotz
switch ($wmvert){
case "T":
$ypos=$margen;
break; //end T
case "B":
$ypos=$altura-$logoH-$margen; //posición en y del wm
break; //end B
} //end switch vert
imagecopy($image, $logo, $xpos, $ypos, 0, 0, $logoW, $logoH); //Pone el logo
imagedestroy($logo); //destruye el logo después de usarlo
}
//TERMINA WATERMARK



¿Como lo puedo hacer para que antes de agregar el watermark copie la imagen redimensionada que se generó en el PASO 1 sobre otra imagen que se llama "base.gif" (la cual ya existe y esta en el directorio), despues de eso agregar el watermark?

Porfavor ayudenme me falta poco.
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"
  #15 (permalink)  
Antiguo 16/09/2005, 20:23
 
Fecha de Ingreso: abril-2004
Mensajes: 56
Antigüedad: 20 años
Puntos: 0
<?PHP
$base = "base.gif";

PASO 1:
$altura = 250;

$ratio = ($dimensiones[1] / $altura);
$anchura = round($dimensiones[0] / $ratio);
$image = imagecreatetruecolor($anchura,$altura); //crea la nueva imagen
$FFF = imagecolorallocate($image, 255,255,255);
imagefill($image, 0, 0, $FFF);
imagecopyresampled ($image, $img, 0, 0, 0, 0, $anchura, $altura, $dimensiones[0], $dimensiones[1]);//reescala
imagejpeg($image,"$dir$image_name", $c1);

PASO 2:
//Pega el resultado sobre la base
$img = $dir.$image_name;
$im1 = imagecreatefromjpeg($img);
$ancho = imagesx($im1);
$alto = imagesy($im1);

$xpos = (250 - $ancho) / 2;
$ypos = (250 - $alto) / 2;

$im2 = imagecreatefromgif($base);
$im2 = imagecreatetruecolor (250,250);
imagecopy ($im2, $im1,$xpos,$ypos,0, 0,$ancho,$alto);


imagejpeg($im2,"$dir$image_name",95);

PASO 3:
//Crea el watermark
$pos = explode("-",$pos); //posición horizontal y vertical del watermark:
$wmhorz = $pos[0];
$wmvert = $pos[1];

$logo = imagecreatefrompng($watermark);
$margen = 0; //distancia entre el watermark y la orilla
$logoW =imagesx($logo); //Anchura del logo
$logoH =imagesy($logo); //Altura del logo
$anchura = 250;
imagecopy($im2, $logo, 0, 0, 0, 0, 250, 250); //Pone el logo
imagejpeg($im2,"$dir$image_name", 95);


?>


LOGRE HACER LO QUE NECESITABA:

En el paso 1 reescala la imagen
En el paso 2 pega imagen redimensionada sobre otra que mide 250 x 250
En el paso 3 agrega la marca de agua

Supongamos que la imagen original mide 560px x 960px al redimensionarla queda de 130 x 250 pixeles, en el paso 2 toma esta imagen y la "pega" sobre otra 250 x 250 de fondo blanco (centrandola horizontal y verticalmente).

El problema es que todo el fondo queda de color azul, con otras fotos el fondo queda de color negro. ¿Porque pasa esto si la imagen "base" tiene el fondo blanco. (yo necesito que el fondo sea blanco).

PD: la imagen del parámetro $base es un gif de 250 x 250 de color blanco.

Porfavor ayudenme (Cluster, escoffie, o cualquiera) solo me falta esto para terminar
__________________
Si el mundo es redondo ¿por que le pusieron planeta?
Entonces si hubiese sido plano le hubisen puesto "redondeta"
  #16 (permalink)  
Antiguo 20/09/2005, 20:23
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Prueba cambiar esta línea:
$FFF = imagecolorallocate($image, 255,255,255);

... por esta otra:
$FFF = 0xFFFFFF; //le dice a PHP que el número está en hexadecimal

Alguna vez me pasó lo mismo y lo resolví así.

Espero que te sirva.
  #17 (permalink)  
Antiguo 21/09/2005, 08:55
 
Fecha de Ingreso: febrero-2005
Mensajes: 187
Antigüedad: 19 años, 2 meses
Puntos: 2
Aun no me queda claro como activar la libreria gd, no tengo idea de como habilitarla.

Si me pudieran explicar detenidamente les agradesco.
__________________
___________________________
Hosting y Dominios en colombia
Blog de Cubica
  #18 (permalink)  
Antiguo 27/12/2005, 17:09
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola Jossmorenn.

Para un servidor Apache+PHP4.N+MySQL corriendo en Windows:

1. Ve que dentro de la carpeta Extensions (en la carpeta donde está corriendo PHP) exista un archivo llamado: php_gd2.dll
Si no existe, búscalo en www.php.net/gd

2. Si tienes acceso al servidor, abre el archivo php.ini (no te olvides de respaldarlo antes) y localiza la parte que dice algo así:

Código:
;extension=php_gd2.dll
Sólo quítale el punto y coma que tiene al principio.

3. Reinicia Apache.

Con eso debe bastar.

Si no tienes acceso al servidor, pues pídele a tu proveedor que lo habilite

Saludos.
  #19 (permalink)  
Antiguo 29/12/2005, 09:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 187
Antigüedad: 19 años, 2 meses
Puntos: 2
Muchas gracias.

Es tan simple que me averguenza haberlo preguntado.
__________________
___________________________
Hosting y Dominios en colombia
Blog de Cubica
  #20 (permalink)  
Antiguo 05/01/2006, 16:30
 
Fecha de Ingreso: septiembre-2004
Mensajes: 60
Antigüedad: 19 años, 7 meses
Puntos: 0
Gracias a todos

Hola a todos, la verdad es que estoyempezando en esto y esto un poco liado con las imagenes en miniatura, he cogido el codigo que pusisteis llamandolo resize.php:
Código:
##################################################################################################
# BEGIN imgResample2
# ------------------------------------------------------------------------------------------------
# DESCRIPCIÓN:
# Altera el tamaño de una imagen al subirse desde una forma ajustándola a una altura o anchura máxima,
# preservando las proporciones. Opcionalmnete puede señalarse una imagen PNG para que sirva com marca de agua
# Genera una imagen Thumbnail también.
# Acepta imágenes JPG, GIF o PNG y el resultado del proceso se copia al directorio actual como una imagen
# DEVUELVE: 
# Nada
# PARÁMETROS:
# $campo    ->    string, obligatorio; nombre del campo de tipo File del que tomará los valores de la imagen a procesar
# $dir        ->    string, opcional; ruta donde se subirá el archivo. Si se deja vacío lo sube al directorio actual
# $anchura    ->    número, opcional; anchura máxima permitida para las imágenes a fullsize. Valor predeterminado es 250 px
# $anchura_thumb -> número, opcional; anchura máxima permitida para las imágenes thumbnail. Valor predeterminado es 100 px
# $watermark->    string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el fullsize
# $watermark_thumb-> string URL a un archivo PNG, opcional; si existe, incrusta una marca de agua en el thumbnail
# $pos        ->    string, opcional, predeterminado = "L-T"; posición horizontal de la marca de agua. Valores permitidos: "L" para izquierda o "R" para derecha, "T" para arriba o "B" para abajo. Separar con un - los valores horizontales y verticales
# $wmdist    ->    número, opcional, predeterminado = 0; padding en pixeles para el Watermark
# $c1        ->    número, opcional, predeterminado = 85; calidad del jpg de la imagen grande
# $c2        ->    número, opcional, predeterminado = 90; calidad del jpg de la imagen thumbnail
#
# EJEMPLO:
# imgResample2('img1'); // copia la imagen del campo img1 al directorio actual
function imgResample2 ($campo, $dir="", $anchura=250, $anchura_thumb=100, $watermark="", $watermark_thumb="", $pos="L-T", $wmdist=0, $c1=95, $c2=97){

    if($_FILES[$campo]['name']!=''){
    
    //Si el campo está lleno, es decir, si se subió una foto...

        //crea los directorios necesarios
        if($dir!=""){
            if(!file_exists($dir)) mkdir($dir);
        }
        //asigna las variables        
        $name=$_FILES[$campo]['name'];
        $type=$_FILES[$campo]['type'];
        $image_name = $name;
        
        //Imagen original en el servidor
        $temp=$_FILES[$campo]['tmp_name']; 
        
       ######### SIGUE EL CODIGO#############
Despues cree un formulario para probar el codigo asi:
Código:
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="resize.php" method="post" enctype="multipart/form-data" name="form1">
  <input name="$campo" type="file" id="$campo">
  <input type="submit" name="Submit" value="Enviar">
</form>
</body>
Guardo los 2 archivos en el mismo directorio, ejecuto el formulario y no veo que haga nada...

¿Que hago mal o que tengo que hacer mas?

Bueno gracias
  #21 (permalink)  
Antiguo 05/01/2006, 22:33
 
Fecha de Ingreso: noviembre-2001
Mensajes: 18
Antigüedad: 22 años, 5 meses
Puntos: 0
Bueno, con respecto a la pregunta original, si son muchos los usuarios tmb tienes que tomar en cuenta que se gasta mucho ancho de banda en estar subiendo fotos demasiado pesadas de mas de un mega... solo sugerir que ademas agregues a tu pagina un tutorial de como cambiar el tamaño a las fotos, recomiendalo ademas pq la transferencia seria mucho mas rapida... tus usuarios te lo agradeceran ;)
  #22 (permalink)  
Antiguo 06/01/2006, 05:04
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Guardo los 2 archivos en el mismo directorio, ejecuto el formulario y no veo que haga nada...
Tampoco es magia ... ve la explicación del autor sobre el cómo utilizar y qué devuelve la función.

En breve, el archivo que recibirá el formulario ("resize.php" según tu form) ha de incluir la función (todo el código inicial ó a través de un include()...) para posteriormente ser llamada pasándole al menos como parámetro el "campo" (el 'name' del filebox) del archivo subido.

En esa última parte estás mal... el formulario NO ha de contener un $campo, todo lo contrario es él de dónde sacarás $campo...

Bueno, además la función no "muestra" nada por sí sola.. regresa un array con distintos valores que podrásocupar según tus necesidades...

... definitivamente pon atención a la explicación que dió Escoffie. Espero te aclare.

Saludos y suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 06/01/2006 a las 05:17
  #23 (permalink)  
Antiguo 06/01/2006, 09:59
Avatar de Escoffie  
Fecha de Ingreso: abril-2003
Ubicación: Mérida, Yucatán
Mensajes: 242
Antigüedad: 21 años
Puntos: 9
Hola Tony69:

El código es una función.
Para utilizarlo, en el mismo archivo donde está tu formulario, al principio por esta línea:
Código PHP:
//incluimos el archivo donde está definida la función
include('resize.php');
if(isset(
$_POST['Submit'])){ 
//si ya se hizo clic en submit 
$fotos=imageResample2("img1""../images/uploads/"); 
for(
$i=0;$i<sizeof($fotos);$i++){ 
// esto imprime en pantalla el contenido del arreglo $fotos 
//las dos primeras posiciones contienen el url de la foto relativo a raíz 
//las dos últimas contienen la etiqueta <img> para mostrar la foto en pantalla 
echo "Arreglo fotos, posición #$i: ".$fotos[$i]."<br>"
//end for 
//para guardar las direcciones en la base de datos (ojo, no guarda la imagen como blob, sólo la dirección) 
$query="INSERT INTO images (grande, chica) VALUES ('".$fotos[0]."','".$fotos[1]."')"
mysql_select_db ($db_name$conexion); 
mysql_query($query,$conexion); 
//end if post 
Espero que te sirva. Para más información sobre el uso de funciones revisa el manual de php www.php.net
  #24 (permalink)  
Antiguo 09/02/2006, 11:34
 
Fecha de Ingreso: enero-2006
Ubicación: Valencia
Mensajes: 96
Antigüedad: 18 años, 2 meses
Puntos: 1
Hola,
yo estoy convertiendo las fotos con este codigo que funciona perfectamente que lo llamor por ej redimensionar.php
Código:
<?php  
$nombre=basename($_GET['imagen']);  
$tamano=basename($_GET['tamano']);  
$anchura=$tamano;  
$hmax=$tamano;  
$datos = getimagesize("$nombre");  
if($datos[2]==1){$img = @imagecreatefromgif("$nombre");}  
if($datos[2]==2){$img = @imagecreatefromjpeg("$nombre");}  
if($datos[2]==3){$img = @imagecreatefrompng("$nombre");}  
$ratio = ($datos[0] / $anchura);  
$altura = ($datos[1] / $ratio);  
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}  
$thumb = imagecreatetruecolor($anchura,$altura);  
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);  
$dest="font/mini_$nombre";
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb); imagejpeg($thumb,$dest,80);}  
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);imagejpeg($thumb,$dest,80);}  
if($datos[2]==3){header("Content-type: image/png"); imagepng($thumb); imagejpeg($thumb,$dest,80); }  
imagedestroy($thumb);
?>
Y llamo al codigo de la siguiente forma
Código:
<img src="redimensionar.php?imagen=foto.jpg&tamano=140">
Mi problema esta si quiero llamar una foto que esta en un subdirectorio
Código:
<img src="redimensionar.php?imagen=imagenes/foto.jpg&tamano=140">
Que no cosigo que encuentre la imagen.
Alguien sabe porque puede ser?

Graicas
  #25 (permalink)  
Antiguo 09/02/2006, 11:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
La función "basename()" que ahí ves en el código quita toda ruta dada de un URL/path dado y se queda con el nombre del archivo sólo.

Elimina esa función dejandolo simplemente con:

Código:
$nombre=$_GET['imagen'];  
$tamano=$_GET['tamano'];
Un saludo,
  #26 (permalink)  
Antiguo 09/02/2006, 12:36
 
Fecha de Ingreso: enero-2006
Ubicación: Valencia
Mensajes: 96
Antigüedad: 18 años, 2 meses
Puntos: 1
Muchas gracias Cluster,
vaya tonteria y yo dandole vueltas....
Ahora me toca que cuando hace el thumb lo guarde en la carpeta correscpondiente, pero vamos creo que ya lo tengo.

Saludos
  #27 (permalink)  
Antiguo 09/02/2006, 13:08
 
Fecha de Ingreso: enero-2006
Ubicación: Valencia
Mensajes: 96
Antigüedad: 18 años, 2 meses
Puntos: 1
Hola de nuevo,
ahora estoy con el tema de guardar el thumb en un directorio especifico
Como he puesto en el codigo (omito gif y png)
Código:
$dest="font/mini_$nombre";
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);imagejpeg($thumb,$dest,80);}
He estado haciendo pruebas y si la foto orginal esta en el directorio raiz, en la variable $dest puedo poner que la guarde en cualquier subdirectorio que funciona correctamente.
Pero si la foto original esta en un subdirectorio (que va a ser el caso) pues no puedo guardarla, mas bien no se donde la guarda porque no puedo localizar la imagen.

Revisando el codigo he visto la linea
Código:
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);imagejpeg($thumb,$dest,80);}
Y veo que se repite la funcion imagejpeg, pero si eliminio la primera imagejpeg($thumb); ya no funcionar el codigo.
Que puede ser?

Saludos
  #28 (permalink)  
Antiguo 23/09/2006, 22:09
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Una pregunta. Redimensionar imagenes del lado del servidor, ¿No lo pone a trabajar como loco?
  #29 (permalink)  
Antiguo 23/09/2006, 22:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Rafael Ver Mensaje
Una pregunta. Redimensionar imagenes del lado del servidor, ¿No lo pone a trabajar como loco?
Pues "como loco" no sé .. depende de los recursos de tu servidor y de que tamaño (en peso y dimensiones) trabajes.

El caso es que si hacemos procesos como este "del lado del servidor" siempre es por algo: automatizar procesos.

Ahora, la pregunta en estos casos sería:"hago la redimensión de mis imagenes en tiempo real cada vez que se pida una imagen o lo hago cuando la suba sólo (por mi proceso de "upload" que ya tendré implementado".

En ese caso .. vale la pena sacrificar espacio en el servidor (creando el thumbnail como archivo ...) que no consumir proceso cada vez que pides una imagen redimensionada. Pero, esto también es "cuestionable" según el contexto de la aplicación en esí; por ejemplo, si tengo que dar la opción a mis usuarios que elijan el tamaño del thumbnail generado para efectos de "visualización" de N imagenes en una página por ejemplo .. ahí tendré que hacer el "thumbnail" en tiempo real (con el consiguiente consumo de recursos del servidor), pero .. si estoy generando una "galería" de imagenes de tamaño para el thumbnail fijo .. o un sistema de usuarios donde dejo que el usuario ponga un "avantar" (imagen en su perfil de usuario) ... ahí, generando el thumbnail sólo una vez cuando "sube" la imagen .. sobra y nos ahorramos proceso posteriormente.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #30 (permalink)  
Antiguo 24/09/2006, 13:08
Avatar de Rafael
Modegráfico
 
Fecha de Ingreso: marzo-2003
Mensajes: 9.028
Antigüedad: 21 años, 1 mes
Puntos: 1826
Ok, he estado viendo los códigos y y a ando haciendo bizco :) Luego los sigo revisando. Está interesante.
Una pregunta más ¿el sistema de generación de miniaturas supongo que no tiene algún sistema de "alisado" (bicubic, etc.) sino es tomar cada n lineas, o si hay una opción?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:28.