Foros del Web » Programando para Internet » PHP »

Reducir foto proporcionalmente sin GD

Estas en el tema de Reducir foto proporcionalmente sin GD en el foro de PHP en Foros del Web. Hay alguna forma de reducir las fotografias proporcionalmente sin usar gd , a ver que me pueden decir saludos cordiales a todos , agradezco algun ...
  #1 (permalink)  
Antiguo 12/01/2007, 21:40
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Exclamación Reducir foto proporcionalmente sin GD

Hay alguna forma de reducir las fotografias proporcionalmente sin usar gd , a ver que me pueden decir saludos cordiales a todos , agradezco algun script o idea
  #2 (permalink)  
Antiguo 13/01/2007, 04:17
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: Reducir foto proporcionalmente sin GD

Hola,
Te advierto que va a ser un tocho de código tremendo y no va a ser nada eficiente, PHP no deja de ser interpretado y leer una imagen a mano, meterla en memoria y aplicar algoritmos de redimensión es una tarea dificil.

Si puedes ayúdate de un programa externo que lo pueda hacer, no sé si podrás instalar cosas en el servidor, de todas formas, creo que podrás subir archivos ejecutables y cargar programas con exec().

Se me ocurre utilizar el imagemagick aunque hay otros más sencillos para esa tarea.

Suerte!
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #3 (permalink)  
Antiguo 13/01/2007, 05:34
 
Fecha de Ingreso: abril-2002
Mensajes: 1.014
Antigüedad: 22 años
Puntos: 8
Re: Reducir foto proporcionalmente sin GD

te refieres a la hora de mostrarlas en la página? si es así basta con que establezcas a la etiqueta IMG un ancho o un alto, y se adaptará por sí sola
  #4 (permalink)  
Antiguo 13/01/2007, 05:44
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: Reducir foto proporcionalmente sin GD

Bueno,

Se adapta por sí sola, como dice MikiBroki, pero se descarga entera, como sea una foto de 300Kb, y vayas a poner 10 miniaturas o así, habrá que esperar que esperar que se descarguen todas, unos 3 meguillas :S:S:S
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #5 (permalink)  
Antiguo 13/01/2007, 11:36
Avatar de capa  
Fecha de Ingreso: octubre-2006
Mensajes: 86
Antigüedad: 17 años, 6 meses
Puntos: 1
Re: Reducir foto proporcionalmente sin GD

Hola, me gustaría saber porque no quieres usar la librería GD.

Cita:
Iniciado por mayerly Ver Mensaje
Hay alguna forma de reducir las fotografias proporcionalmente sin usar gd , a ver que me pueden decir saludos cordiales a todos , agradezco algun script o idea
es verdad como propone MikiBroki lo puedes reducir la etiqueta IMG por sus atributos, y asu vez como menciona blakeyed, para vitalizar tendra que cargar toda la imagen y eso demanda mucho tiempo.

esto depende como quieres utilizarlos, de hay podemos proponer un uso adecuado y también que nos pueda servir.

Estaré pendiente por la curiosidad, saludos..
  #6 (permalink)  
Antiguo 13/01/2007, 21:24
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: Reducir foto proporcionalmente sin GD

Bueno no me interesa crear gd proque yo no quiero reducir las fotos a un formato ni cambiarlas ni nada tengo foticos con un peso de no mas de 30 kb previamente reducidas y lo que quiero es reducirlas en la pagina sin por ello desvirtuar el ancho y el alto , con gd se puede hacer pero yo quiero algo mucho mas sencillo que se pueda usar con php o asi , saludos y gracias por sus molestias en contestarme
  #7 (permalink)  
Antiguo 14/01/2007, 11:04
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: Reducir foto proporcionalmente sin GD

Bueno, alla va, no quieres GD, porque en GD hay una funcion getimagesize() que te dice al menos el tamaño de la imagen. Como las imagenes no son muy grandes puedes utilizar el <IMG SRC="imagen" WIDTH=xx HEIGHT=xx> pero deberás calcular antes, ancho y alto de la imagen. Aquí te paso una función datos_img() le pasas el archivo y te da en un array [0] = ancho; [1] = alto;

A ver si te funciona... aunque getimagesize() es más completa...

Código PHP:
function network_safe_fread$file_handle$length )
{
  
// Create blank string to receive data
  
$data "";

  
// Keep reading data from the file until either EOF occurs or we have
  // retrieved the requested number of bytes

  
while ( ( !feof$file_handle ) ) && ( strlen($data) < $length ) )
    {
      
$data .= fread$file_handle$length-strlen($data) );
    }

  
// return the data read
  
return $data;
}

function 
abreimagen($filename
{
  
ignore_user_abort(true);
  
$filehnd = @fopen($filename'rb');
  return 
$filehnd;
}

function 
tipo_imagen($mnjador
{
  
$data network_safe_fread$mnjador);  // Lee los primeros dos bytes
  
if ( $data == "\xFF\xD8" ) return "jpeg"; else     // FF D8 = Inicio de Imagen JPEG
    
if ( $data == "GI" ) {                                 // Un GIF casi seguro ;) pero leemos otro caracter más 
      
$data network_safe_fread$mnjador);  // Lee los primeros dos bytes
      
if ($data=="F") return "gif"; else return false// Es un gif ¿? lo damos por bueno
    
} else
      if ( 
$data == "\x89P" ) {                             // Los dos primeros bits del PNG... 
    
$data network_safe_fread$mnjador);  // La cabecera entera del PNG
    
if ($data=="NG\x0D\x0A\x1A\x0A") return "png"; else return false// Es un gif ¿? lo damos por bueno
      
} else
    return 
false;  
}

function 
LittleEndian2Int($byteword
{
  
$intvalue 0;
  
$byteword strrev($byteword);
  
$bytewordlen strlen($byteword);
  for (
$i 0$i $bytewordlen$i++) {
    
$intvalue += ord($byteword{$i}) * pow(256, ($bytewordlen $i));
  }
  return 
$intvalue;
}
    
function 
BigEndian2Int($byteword
{
  return 
LittleEndian2Int(strrev($byteword));
}
    
function 
saca_cabecera_gif ($mnjador
{
  
$data network_safe_fread$mnjador);  // Leemos la version
  
$anch network_safe_fread$mnjador);  // Leemos la version
  
$alto network_safe_fread$mnjador);  // Leemos la version
  
$salida[0] = LittleEndian2Int($anch);
  
$salida[1] = LittleEndian2Int($alto);
  return 
$salida;
}

function 
saca_cabecera_png ($mnjador
{
  
$data network_safe_fread$mnjador);  // Chunksize
  
$data network_safe_fread$mnjador);  // HIDR
  
$anch network_safe_fread$mnjador); 
  
$alto network_safe_fread$mnjador); 
  
$salida[0] = BigEndian2Int($anch);
  
$salida[1] = BigEndian2Int($alto);
  return 
$salida;
}

function 
get_jpeg_header_data$filehnd )
{
  
// Read the third character
  
$data network_safe_fread$filehnd);

  
// Check that the third character is 0xFF (Start of first segment header)
  
if ( $data{0} != "\xFF" )
    {
      
// NO FF found - close file and return - JPEG is probably corrupted
      
fclose($filehnd);
      return 
FALSE;
    }

  
// Flag that we havent yet hit the compressed image data
  
$hit_compressed_image_data FALSE;
  while ( ( 
$data{1} != "\xD9" ) && (! $hit_compressed_image_data) && ( ! feof$filehnd ) )&& (!isset($salida)))
    {
      
// Found a segment to look at.
      // Check that the segment marker is not a Restart marker - restart markers don't have size or data after them
      
if (  ( ord($data{1}) < 0xD0 ) || ( ord($data{1}) > 0xD7 ) )
    {
      
$sizestr network_safe_fread$filehnd); // Read the next two bytes (size)
      
$decodedsize unpack ("nsize"$sizestr); // convert the size bytes to an integer
      
$segdatastart ftell$filehnd ); // Save the start position of the data
      
$segdata network_safe_fread$filehnd$decodedsize['size'] - ); // Read the segment data with length indicated by the previously read size
      
if (  ( ord($data{1}) >= 0xC0 ) && ( ord($data{1}) <= 0xCF ) && ( ord($data{1}) != 0xC4 )
        && ( 
ord($data{1}) != 0xCC )  && ( ord($data{1}) != 0xC8 )) {
        
$salida[0] = ord$segdata} ) * 256 ord$segdata} );
        
$salida[1] = ord$segdata} ) * 256 ord$segdata} );
      }
    }

      
// If this is a SOS (Start Of Scan) segment, then there is no more header data - the compressed image data follows
      
if ( $data{1} == "\xDA" )
    {
      
// Flag that we have hit the compressed image data - exit loop as no more headers available.
      
$hit_compressed_image_data TRUE;
    }
      else
    {
      
// Not an SOS - Read the next two bytes - should be the segment marker for the next segment
      
$data network_safe_fread$filehnd);

      
// Check that the first byte of the two is 0xFF as it should be for a marker
      
if ( $data{0} != "\xFF" )
        {
          
// NO FF found - close file and return - JPEG is probably corrupted
          
fclose($filehnd);
          return 
FALSE;
        }
    }
    }

  
// Return the header data retrieved
  
return $salida;
}

function 
cierra_img($mnja) {
  
fclose($mnja);
  
ignore_user_abort(false);
}

function 
ancho_img($archivo) {
  
$dt datos_img($archivo);
  return (
$dt)?$dt[0]:false;
}

function 
alto_img($archivo) {
  
$dt datos_img($archivo);
  return (
$dt)?$dt[1]:false;
}

function 
datos_img($archivo) {
  
$mnj abreimagen($archivo);
  if (
$mnj) {
    
$tipo tipo_imagen($mnj);
    if (
$tipo=="jpeg"
      
$res get_jpeg_header_data($mnj); 
    else
      if (
$tipo=="gif"
    
$res saca_cabecera_gif ($mnj); 
      else
    if (
$tipo=="png"
      
$res saca_cabecera_png ($mnj); 
    else 
      
$res false;    
  } else 
$res false;
  
cierra_img($mnj);
  return 
$res;


Suerte!
__________________
Saludos

Gaspar Fernández
Poesía Binaria
  #8 (permalink)  
Antiguo 14/01/2007, 11:42
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Re: Reducir foto proporcionalmente sin GD

Cita:
Iniciado por blakeyed Ver Mensaje
Bueno, alla va, no quieres GD, porque en GD hay una funcion getimagesize() que te dice al menos el tamaño de la imagen. Como las imagenes no son muy grandes puedes utilizar el <IMG SRC="imagen" WIDTH=xx HEIGHT=xx> pero deberás calcular antes, ancho y alto de la imagen.
getimagesize funciona independientemente de que haya o no gd.
Cito del manual:
Cita:
Nota: La función getimagesize() no requiere de la biblioteca de imágenes GD.
  #9 (permalink)  
Antiguo 14/01/2007, 12:26
Avatar de blakeyed  
Fecha de Ingreso: marzo-2004
Ubicación: Ahora mismo, Málaga
Mensajes: 78
Antigüedad: 20 años
Puntos: 0
Re: Reducir foto proporcionalmente sin GD

Pues no me fije panino, gracias por la aclaracion :)
__________________
Saludos

Gaspar Fernández
Poesía Binaria
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




La zona horaria es GMT -6. Ahora son las 20:07.