Foros del Web » Programando para Internet » PHP »

DW reescalar imagen dinamica

Estas en el tema de DW reescalar imagen dinamica en el foro de PHP en Foros del Web. Revise casi todo el foro, he de ser muy torpe, encontre resize para todo menos para fotos en tablas dinámicas. Pregunta: Se puede utilizar algún ...
  #1 (permalink)  
Antiguo 13/02/2010, 11:16
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
DW reescalar imagen dinamica

Revise casi todo el foro, he de ser muy torpe, encontre resize para todo menos para fotos en tablas dinámicas.

Pregunta: Se puede utilizar algún método que reescale por ancho o alto una imagen obtenida desde un link que esta en BD, a una tabla dinámica

Un simple si/no y si es si con (aplicación) bastará, yo después sigo buscando.
Muchas gracias
  #2 (permalink)  
Antiguo 13/02/2010, 11:21
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: DW reescalar imagen dinamica

La imagen la tienes en un campo BLOB o solo guardas la ruta de la imagen?

Por cierto... en la zona de aportes de este mismo foro hay sistemas que redimensionan imagenes

- http://www.forosdelweb.com/f18/aport...agenes-565428/
__________________
HV Studio
Diseño y desarrollo web
  #3 (permalink)  
Antiguo 13/02/2010, 12:01
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Jacson666
Gracias por la pronta respuesta
En la BD sólo figura la ruta donde el archivo jpg se encuentra
Leí los aportes que citas e incluso quise instrumentarla (tal vez mal) pero parece no aplicar para las imagenes dinamicas, o si y yo estar erradísima en su implementación
Gracias
  #4 (permalink)  
Antiguo 13/02/2010, 12:40
(Desactivado)
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: DW reescalar imagen dinamica

¿quieres aser una imagen y guardarla en la Base de datos?
la puedes guardar en binario, pero no es recomendable lo correcto sera guardarla en una carpeta despues aserala pequeña para que no pese mucho y obtener la ruta del directorio

usa la libreria GD en trabajo con imagenes en php
  #5 (permalink)  
Antiguo 13/02/2010, 12:47
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Skateloco
tengo más de 2000 imagenes guardadas prolijamente en unos 10 directorios
Digamos que es un catálogo digital para una ferreteria
Tengo la base de datos, funciona todo, pero en vez de meter los deditos en cada imagen para reescalarla con Photo-loquesea, quiero que la redimensione al armar mi tabla de datos dinámicos en la cual uno de los campos es una imagen.
Como en esa página habrá 100 fotos, quiero que al poner un ancho determinado todas las imagenes se reescalen a ese ancho conservando la proporción
porque si le pongo ancho y alto a ese campo-imagen, algunas parecen anoréxicas y otras francamente obesas. Para problemas alimentarios estoy YO.
  #6 (permalink)  
Antiguo 13/02/2010, 13:05
(Desactivado)
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: DW reescalar imagen dinamica

para eso es la libreria GD (sirve para no distorcionar las imagenes)
ejemplo
si alguien sube una imagen un rectangulo y quieres que se muestre en un cuadrito, en lugar de estirar la imagen va a crear otra mucho mas pequeña tanto en peso como tamaño pero la foto original ba a estar guardada en una carpeta para que no se pierda

Después de copiar el codigo y ponerlo en alguna carpeta, supongamos que lo pusiste "librerias" y la imagen que quieres redimensionar a 200x150 pixeles es "laimagen.png" que se ubica en la carpeta "tusimagenes", solo escribes en el SRC de tu <img>:

/librerias/image.php?image=/tusimagenes/laimagen.png&width=200&height=150

Saludos. nota: tambien sirve para png y jpg pero no sirve para gifs animados

CREAS UN ARCHIVO image.php
Código PHP:
<?php
if (!isset($_GET['image']))
{
    
header('HTTP/1.1 400 Bad Request');
    echo 
'Error: no image was specified';
    exit();
}
define('MEMORY_TO_ALLOCATE',    '100M');
define('DEFAULT_QUALITY',        90);
define('CURRENT_DIR',            dirname(__FILE__));
define('CACHE_DIR_NAME',        '/imagecache/');
define('CACHE_DIR',                CURRENT_DIR CACHE_DIR_NAME);
define('DOCUMENT_ROOT',            $_SERVER['DOCUMENT_ROOT']);
$image            preg_replace('/^(s?f|ht)tps?:\/\/[^\/]+/i''', (string) $_GET['image']);
if (
$image{0} != '/' || strpos(dirname($image), ':') || preg_match('/(\.\.|<|>)/'$image))
{
    
header('HTTP/1.1 400 Bad Request');
    echo 
'Error: malformed image path. Image paths must begin with \'/\'';
    exit();
}

if (!
$image)
{
    
header('HTTP/1.1 400 Bad Request');
    echo 
'Error: no image was specified';
    exit();
}
$docRoot    preg_replace('/\/$/'''DOCUMENT_ROOT);
if (!
file_exists($docRoot $image))
{
    
header('HTTP/1.1 404 Not Found');
    echo 
'Error: image does not exist: ' $docRoot $image;
    exit();
}
$size    GetImageSize($docRoot $image);
$mime    $size['mime'];
if (
substr($mime06) != 'image/')
{
    
header('HTTP/1.1 400 Bad Request');
    echo 
'Error: requested file is not an accepted type: ' $docRoot $image;
    exit();
}
$width            $size[0];
$height            $size[1];

$maxWidth        = (isset($_GET['width'])) ? (int) $_GET['width'] : 0;
$maxHeight        = (isset($_GET['height'])) ? (int) $_GET['height'] : 0;

if (isset(
$_GET['color']))
    
$color        preg_replace('/[^0-9a-fA-F]/''', (string) $_GET['color']);
else
    
$color        FALSE;
if (!
$maxWidth && $maxHeight)
{
    
$maxWidth    99999999999999;
}
elseif (
$maxWidth && !$maxHeight)
{
    
$maxHeight    99999999999999;
}
elseif (
$color && !$maxWidth && !$maxHeight)
{
    
$maxWidth    $width;
    
$maxHeight    $height;
}
if ((!
$maxWidth && !$maxHeight) || (!$color && $maxWidth >= $width && $maxHeight >= $height))
{
    
$data    file_get_contents($docRoot '/' $image);
    
    
$lastModifiedString    gmdate('D, d M Y H:i:s'filemtime($docRoot '/' $image)) . ' GMT';
    
$etag                md5($data);
    
    
doConditionalGet($etag$lastModifiedString);
    
    
header("Content-type: $mime");
    
header('Content-Length: ' strlen($data));
    echo 
$data;
    exit();
}

$offsetX    0;
$offsetY    0;

if (isset(
$_GET['cropratio']))
{
    
$cropRatio        explode(':', (string) $_GET['cropratio']);
    if (
count($cropRatio) == 2)
    {
        
$ratioComputed        $width $height;
        
$cropRatioComputed    = (float) $cropRatio[0] / (float) $cropRatio[1];
        
        if (
$ratioComputed $cropRatioComputed)
        {
            
$origHeight    $height;
            
$height        $width $cropRatioComputed;
            
$offsetY    = ($origHeight $height) / 2;
        }
        else if (
$ratioComputed $cropRatioComputed)
        { 
            
$origWidth    $width;
            
$width        $height $cropRatioComputed;
            
$offsetX    = ($origWidth $width) / 2;
        }
    }
}
$xRatio        $maxWidth $width;
$yRatio        $maxHeight $height;
if (
$xRatio $height $maxHeight)

    
$tnHeight    ceil($xRatio $height);
    
$tnWidth    $maxWidth;
}
else
{
    
$tnWidth    ceil($yRatio $width);
     
$tnHeight    $maxHeight;
}

$quality    = (isset($_GET['quality'])) ? (int) $_GET['quality'] : DEFAULT_QUALITY;

$resizedImageSource        $tnWidth 'x' $tnHeight 'x' $quality;
if (
$color)
    
$resizedImageSource    .= 'x' $color;
if (isset(
$_GET['cropratio']))
    
$resizedImageSource    .= 'x' . (string) $_GET['cropratio'];
$resizedImageSource        .= '-' $image;

$resizedImage    md5($resizedImageSource);
    
$resized        CACHE_DIR $resizedImage;

if (!isset(
$_GET['nocache']) && file_exists($resized))
{
    
$imageModified    filemtime($docRoot $image);
    
$thumbModified    filemtime($resized);
    
    if(
$imageModified $thumbModified) {
        
$data    file_get_contents($resized);
    
        
$lastModifiedString    gmdate('D, d M Y H:i:s'$thumbModified) . ' GMT';
        
$etag                md5($data);
        
        
doConditionalGet($etag$lastModifiedString);
        
        
header("Content-type: $mime");
        
header('Content-Length: ' strlen($data));
        echo 
$data;
        exit();
    }
}

ini_set('memory_limit'MEMORY_TO_ALLOCATE);

$dst    imagecreatetruecolor($tnWidth$tnHeight);

switch (
$size['mime'])
{
    case 
'image/gif':
        
$creationFunction    'ImageCreateFromGif';
        
$outputFunction        'ImagePng';
        
$mime                'image/png'
        
$doSharpen            FALSE;
        
$quality            round(10 - ($quality 10)); 
    break;
    
    case 
'image/x-png':
    case 
'image/png':
        
$creationFunction    'ImageCreateFromPng';
        
$outputFunction        'ImagePng';
        
$doSharpen            FALSE;
        
$quality            round(10 - ($quality 10)); 
    break;
    
    default:
        
$creationFunction    'ImageCreateFromJpeg';
        
$outputFunction         'ImageJpeg';
        
$doSharpen            TRUE;
    break;
}

$src    $creationFunction($docRoot $image);

if (
in_array($size['mime'], array('image/gif''image/png')))
{
    if (!
$color)
    {
        
        
imagealphablending($dstfalse);
        
imagesavealpha($dsttrue);
    }
    else
    {
        if (
$color[0] == '#')
            
$color substr($color1);
        
$background    FALSE;
        if (
strlen($color) == 6)
            
$background    imagecolorallocate($dsthexdec($color[0].$color[1]), hexdec($color[2].$color[3]), hexdec($color[4].$color[5]));
        else if (
strlen($color) == 3)
            
$background    imagecolorallocate($dsthexdec($color[0].$color[0]), hexdec($color[1].$color[1]), hexdec($color[2].$color[2]));
        if (
$background)
            
imagefill($dst00$background);
    }
}
ImageCopyResampled($dst$src00$offsetX$offsetY$tnWidth$tnHeight$width$height);

if (
$doSharpen)
{
    
$sharpness    findSharp($width$tnWidth);
    
    
$sharpenMatrix    = array(
        array(-
1, -2, -1),
        array(-
2$sharpness 12, -2),
        array(-
1, -2, -1)
    );
    
$divisor        $sharpness;
    
$offset            0;
    
imageconvolution($dst$sharpenMatrix$divisor$offset);
}

if (!
file_exists(CACHE_DIR))
    
mkdir(CACHE_DIR0755);

if (!
is_readable(CACHE_DIR))
{
    
header('HTTP/1.1 500 Internal Server Error');
    echo 
'Error: the cache directory is not readable';
    exit();
}
else if (!
is_writable(CACHE_DIR))
{
    
header('HTTP/1.1 500 Internal Server Error');
    echo 
'Error: the cache directory is not writable';
    exit();
}

$outputFunction($dst$resized$quality);

ob_start();
$outputFunction($dstnull$quality);
$data    ob_get_contents();
ob_end_clean();
ImageDestroy($src);
ImageDestroy($dst);

$lastModifiedString    gmdate('D, d M Y H:i:s'filemtime($resized)) . ' GMT';
$etag                md5($data);

doConditionalGet($etag$lastModifiedString);

header("Content-type: $mime");
header('Content-Length: ' strlen($data));
echo 
$data;

function 
findSharp($orig$final)
{
    
$final    $final * (750.0 $orig);
    
$a        52;
    
$b        = -0.27810650887573124;
    
$c        .00047337278106508946;
    
    
$result $a $b $final $c $final $final;
    
    return 
max(round($result), 0);

function 
doConditionalGet($etag$lastModified)
{
    
header("Last-Modified: $lastModified");
    
header("ETag: \"{$etag}\"");
        
    
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ?
        
stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : 
        
false;
    
    
$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ?
        
stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) :
        
false;
    
    if (!
$if_modified_since && !$if_none_match)
        return;
    
    if (
$if_none_match && $if_none_match != $etag && $if_none_match != '"' $etag '"')
        return; 
    
    if (
$if_modified_since && $if_modified_since != $lastModified)
        return; 
    
    
header('HTTP/1.1 304 Not Modified');
    exit();
}
?>
  #7 (permalink)  
Antiguo 13/02/2010, 13:16
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Skateloco
Disculpá mi reiterada insistencia. Este codigo va a redimensionar las 100 fotos que aparecerán en mi página PHP dinámica, que proviene de una BD Mysql?
  #8 (permalink)  
Antiguo 13/02/2010, 13:20
(Desactivado)
 
Fecha de Ingreso: febrero-2010
Mensajes: 17
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: DW reescalar imagen dinamica

si usas una base de datos que solo tiene el nombre o direccion de tus fotos asi es ba a crear una copia de tus imagenes en un cahe fiqtisio, el unico problema es que tendras que alterar el src de cada imagen pero si estas realisando una consulta en la vase de datos eso sera facil

en caso contrario que tengas tus foros alojasdas en la base de datos en balor binario no te ba as servir, necesitarias de otro archivo php
  #9 (permalink)  
Antiguo 13/02/2010, 13:27
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Muchas gracias, ahora lo pruebo
Que tengas un excelente fin de semana
Gracias nuevamente
  #10 (permalink)  
Antiguo 13/02/2010, 13:30
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: DW reescalar imagen dinamica

Hola,
Si no te funciona el de skateloco mirate este ya está casi a punto solo necesita que realices la consulta a la db.

Saludos

Código PHP:
<?php
function fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality){  
if( 
file_exists($imgsrc) )     {  
list(
$srcx,$srcy,$ext) = getimagesize($imgsrc);       
switch( 
$ext)       {    
case 
:     
$old imagecreatefromgif($imgsrc);                     
$img imagecreate($srcx,$srcy);
imagecolorallocate($img255255255);                             
imagecopy($img,$old,0,0,0,0,$srcx,$srcy); 
break;               
case 
:     
$img imagecreatefromjpeg($imgsrc); 
break;                           
case 
:     
$img imagecreatefrompng($imgsrc);
 break;    
case 
6:     
$img imagecreatefromwbmp($imgsrc);  
break;               
default:
print_r(getimagesize($imgsrc)); 
return 
false;       }                
$tamx=$srcx;         
$tamy=$srcy;        
if(
$srcx>$newx)
$pv=($srcx>$srcy)?$srcx/$newx:$srcy/$newy;        
elseif(
$srcy>$newy)
$pv=($srcy>$srcx)?$srcy/$newy:$srcx/$newx;        
if(isset(
$pv)){    
$srcx=ceil($srcx/$pv);     
$srcy=ceil($srcy/$pv);     }               
$new imagecreatetruecolor ($srcx$srcy);             
imagecopyresampled ($new$img0000$srcx$srcy$tamx$tamy);                     
imagejpeg($new,(substr($imgnew,0,strrpos($imgnew,"."))).".jpg",$quality);        
imagedestroy($img);              
return 
true;    

else 
return 
false;
}
//Aquí haces la consulta a la tabla

while($row=mysql_fetch_array($query)){
$imgsrc"./images/".$row["campo_imagen"]; //url de la imagen a escalar
$imgnew"./images/".$row["campo_imagen"]; //url de la imagen escalada
$ancho=getimagesize($imgsrc);
$factor=400/$ancho[0]; //las escala a 400px de ancho conservando las proporciones
$newx=$ancho[0]*$factor;
$newy=$ancho[1]*$factor
$quality=80
fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality);
}              
?>
  #11 (permalink)  
Antiguo 13/02/2010, 13:38
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Lo voy a probar también
Muchísimas gracias a ambos y prometo contar que pasó, solo denme un ratito para ver que pasa
  #12 (permalink)  
Antiguo 13/02/2010, 14:04
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Está visto: SOY MUY BRUTA
Skteloco: copie el código en un archivo como indicaste.
la celda desde donde llamo a la imagen tiene el siguiente código
<td width="80" rowspan="6" valign="top" class="texto11"><p><a target="_self" href="wil_p_inv.php?CodDir=<?php echo $row_RS_wil_lp['CodDir']; ?>"><img src="<?php echo $row_RS_wil_lp['foto4']; ?>" alt="foto no disponible" width="80" height="80" border="2" /></a></p></td>
cual sería entonces el renglón o la parte donde le digo que mis imagenes están en tal sitio, o debo poner la linea
/librerias/image.php?image=/wil/001.jpg&width=200&height=150
en la base de datos en reemplazo de wil/001.jpg

Santris
Para vos otra pregunta, parecida.
como invoco el código desde la pagina de trabajo

MUCHAS GRACIAS A AMBOS
  #13 (permalink)  
Antiguo 13/02/2010, 14:28
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: DW reescalar imagen dinamica

Cita:
Por silviab ->Santris
Para vos otra pregunta, parecida.
como invoco el código desde la pagina de trabajo
La funcion la puedes guardar en un archivo llamado pej: fns.php. Ojo!! solo la función.

El siguiente código es el que tienes que poner en tu pg de trabajo:

Código PHP:
<?php
//Aquí haces la consulta a la tabla

include("fns.php");
while(
$row=mysql_fetch_array($query)){
     
$imgsrc"./images/".$row["campo_imagen"]; //url de origen
    
$imgnew"./images/".$row["campo_imagen"]; //url de destino
    
$ancho=getimagesize($imgsrc);
    
$factor=400/$ancho[0]; //las escala a 400px de ancho conservando las proporciones
    
$newx=$ancho[0]*$factor;
    
$newy=$ancho[1]*$factor
    
$quality=80

    
fun_resizejpg($imgsrc,$imgnew,$newx,$newy,$quality); //llamada a la función

?>
  #14 (permalink)  
Antiguo 13/02/2010, 14:43
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Esto que me respodes iría en el head de mi página de trabajo y todas las imagenes de esa página se reecalarían a la misma medida, si es que entendí bien
  #15 (permalink)  
Antiguo 13/02/2010, 15:20
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 7 meses
Puntos: 66
Respuesta: DW reescalar imagen dinamica

Cita:
por silbiab->Esto que me respodes iría en el head de mi página de trabajo y todas las imagenes de esa página se reecalarían a la misma medida, si es que entendí bien
Esto escalaria todas las imágenes que tengas en el directorio "images" a la misma medida de ancho.

El código debes ponerlo en un archivo.php y ejecutarlo. Pero antes debes crear la consulta a la base de datos, no te la incluí en el código.
  #16 (permalink)  
Antiguo 13/02/2010, 18:32
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

La voy a volver armar con más cuidado, pero salvo que la consulta sql de búsqueda vaya también en la pagina de código, creo que ya lo probé y no logré que funcionara.
O sea tomé todo el código y lo guarde en una php en blanco
Tomé el fragmento de código y lo puse en la página de trabajo después de la consulta sql
quite del código que llamaba a la imagen las dimensiones
Y el resultado fue imagenes excesivamente grandes
Mañana, lo pruebo.
Muchísimas gracias
que tengas un muy buen domingo
  #17 (permalink)  
Antiguo 18/02/2010, 09:40
Avatar de silviab  
Fecha de Ingreso: enero-2010
Mensajes: 43
Antigüedad: 14 años, 2 meses
Puntos: 2
Respuesta: DW reescalar imagen dinamica

Chigos, gracias por la ayuda, pero se han juntado mi ser NABA con mi ser OBSESIVA, y decidieron reescalar las imágenes en el PHOTOloquesea, por lo que por el momento fijando el tamaño de la imagen general con las medidas de la pagina quedan todas estupendas.
Sin embargo y agradeciendo mucho las respuestas de ambos, voy a practicarlo una vez que termine este trabajo.
Gracias nuevamente
¿que es eso del karma?
Buena vida para ambos!!!

Etiquetas: dinamica
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 23:34.