Foros del Web » Programando para Internet » PHP »

redimensionar imagen externa y guardarla en la BD

Estas en el tema de redimensionar imagen externa y guardarla en la BD en el foro de PHP en Foros del Web. hola a todos, siempre ha redimensionado imagenes que me suben desde un formulario, pero ahora tengo que hacerlo desde una url es decir, me dan ...
  #1 (permalink)  
Antiguo 02/06/2011, 08:54
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
redimensionar imagen externa y guardarla en la BD

hola a todos, siempre ha redimensionado imagenes que me suben desde un formulario, pero ahora tengo que hacerlo desde una url es decir, me dan la url de la img y tengo que redimensionarla y guardar en la bd
alguien me puede decir como hacer esto, es que siempre lo he hecho con $_FILE[]
  #2 (permalink)  
Antiguo 02/06/2011, 09:10
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: redimensionar imagen externa y guardarla en la BD

Podrías usar cURL, mira este aporte http://www.forosdelweb.com/f18/aport...4/#post3031878
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 02/06/2011, 09:43
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

gracias pero e pudieras ayudar un poco más ???
;)
  #4 (permalink)  
Antiguo 02/06/2011, 09:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: redimensionar imagen externa y guardarla en la BD

Ahí te tengo un ejemplo, ¿lo trataste?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 02/06/2011, 09:48
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

es este ??

$url = "http://www.example.com/zip.zip";
$g=basename($url);
$content = file_get_contents($url);
file_put_contents($g,$content);

pero despues que hago esto que ???, pq solo se redimensionarla si viene por el arreglo $_FILE[]
  #6 (permalink)  
Antiguo 02/06/2011, 09:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: redimensionar imagen externa y guardarla en la BD

De eso se trata, una vez hayas cargado la imagen al servidor, solo tienes que indicar la ruta para redimensionar la imagen. Mira este aporte para que veas como hacer para redimencionar http://www.forosdelweb.com/f68/aport...agenes-912637/
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 02/06/2011, 09:52
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

WAIT!

la imagen la redimensionas usando imagecreatefrom***()?

si es así puedes obtener imagenes remotas tambien!

imagecreatefrompng('http://www.servidor.remoto.com/imagen.png');
y redimensionarla tal como lo has hecho hasta ahora :)
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #8 (permalink)  
Antiguo 02/06/2011, 09:56
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

gracias, a ver si voy entendiendo..

cuando hago esto

$url = "http://www.example.com/zip.zip";
$g=basename($url);
$content = file_get_contents($url);
file_put_contents($g,$content);

en $g tendría la imagen cierto ???

ahora en los ejemplos de redimensionar trabajas con $_FILE[], el tipo de img lo puedo obtener cortantando la url, y entonces le pasaria como $_FILE['archivo']['tmp_name'] lo contenido en $g

es así ????
  #9 (permalink)  
Antiguo 02/06/2011, 10:02
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

stramin esta es mi funcion

me dices que en $tmpName le pase la url de la foto ????
es así ????


function Redimensionar($ancho_destino, $alto_destino, $tmpName, $fileType){

$tempImagen = 'tempImagen';

// Mime types permitidos
$mimetypes = array("image/jpeg", "image/pjpeg", "image/gif", "image/png");

// Verificamos si el archivo es una imagen válida
if(!in_array($fileType, $mimetypes)){
$message = "El archivo que subiste no es una imagen valida: $tmpName";
die ($message);
}

switch($fileType) {
case $mimetypes[0]:
case $mimetypes[1]:
$img = imagecreatefromjpeg($tmpName);
break;
case $mimetypes[2]:
$img = imagecreatefromgif($tmpName);
break;
case $mimetypes[3]:
$img = imagecreatefrompng($tmpName);
break;
}

// Tomamos los datos de ancho y alto de la foto para redimensionarla -- Esta función crea un array con dos índices. El indice [0] corresponde al ancho, y el índice [1] al alto.
$datos = getimagesize($tmpName);

// Redimensionamos la imagen
if($datos[0] > $datos[1]){

// Si es horizontal
$ratio = ($datos[0]/$ancho_destino);
$alto = round($datos[1]/$ratio);
$imagen = imagecreatetruecolor($ancho_destino, $alto);
imagecopyresampled($imagen, $img, 0, 0, 0, 0, $ancho_destino, $alto, $datos[0], $datos[1]);

} elseif($datos[0] < $datos[1] || $datos[0] == $datos[1]){

// Si es vertical o cuadrada.
$ratio = ($datos[1]/$alto_destino);
$ancho = round($datos[0]/$ratio);
$imagen = imagecreatetruecolor($ancho, $alto_destino);
imagecopyresampled($imagen, $img, 0, 0, 0, 0, $ancho, $alto_destino, $datos[0], $datos[1]);

}

switch($fileType){
case $mimetypes[0]:
case $mimetypes[1]:
imagejpeg($imagen, $tempImagen);
break;
case $mimetypes[2]:
imagegif($imagen, $tempImagen);
break;
case $mimetypes[3]:
imagepng($imagen, $tempImagen);
break;
}

$fp = fopen($tempImagen, "rb");
$timagen = fread($fp, filesize($tempImagen));
$timagen = addslashes($timagen);
fclose($fp);

@unlink($tempImagen);

return $timagen;
}
  #10 (permalink)  
Antiguo 02/06/2011, 10:06
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

sip, así de simple :D
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 02/06/2011, 10:07
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

jjojo, y yo me moria de tristesa !!!, pruebo y comento ahora mismo gracias !!!
  #12 (permalink)  
Antiguo 02/06/2011, 10:09
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

receurda tambien cambiar el tipo de archivo en $fileType
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #13 (permalink)  
Antiguo 02/06/2011, 10:15
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

hmmm me da estos Warnings

Warning: imagecreatefromgif() [function.imagecreatefromgif]: 'http://www.inmoclick.com.ar/ftp_inmohost/fotos/9-2027-6.gif' is not a valid GIF file in \\PRONET-01\D - DOCUMENTOS\1 - Clientes en Proceso\Pirka\P03\es\php\test.php on line 44

Warning: imagecopyresampled() expects parameter 2 to be resource, boolean given in \\PRONET-01\D - DOCUMENTOS\1 - Clientes en Proceso\Pirka\P03\es\php\test.php on line 61

y cuando veo la imagen, ha creado una imagen toda negra, con las dimensiones correctas, pero todo negro, como que no ha podido hacer el gif


$anchura = 160;
$maxima_y = 120;

$type = "image/".substr('http://www.inmoclick.com.ar/ftp_inmohost/fotos/9-2027-6.gif', -3, 3);

$foto = Redimensionar($anchura, $maxima_y, 'http://www.inmoclick.com.ar/ftp_inmohost/fotos/9-2027-6.gif', $type);

$sql = "insert into inmueble (idPirka, test, type) values('456', '$foto', '$type')";
echo $myConexion->consulta($sql);


la funcion redimensionar es la que está arriba
  #14 (permalink)  
Antiguo 02/06/2011, 10:27
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

por cierto tengo en mi php.ini

allow_url_fopen = On

alguna idea, cuando lo hago con un archivo subido por formulario me funciona bien la función, y por acá no, alguna idea ???
  #15 (permalink)  
Antiguo 02/06/2011, 10:46
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

me sucede exactamente lo mismo con esa imagen, seguramente no es una imagen, debe estar guardada en un formato no admitido por php (sucede con los gifs animados)

pero funciona con estas:

http://ladyoak.com/images/stories/bi...conversion.gif

http://cd.planet-diversity.org/filea..._2362x1997.gif
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #16 (permalink)  
Antiguo 02/06/2011, 10:47
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

lo acabo de probar pasandole la url de un archivo local y funciona perfecto, parece ser que el problema está cuando es remoto, alguna idea ???
1 es mejor descargar el archivo 2- redimensionarlo y guardarlo 3 - eliminarlo

o se puede hacer desde la url externa y es solo algún problema mio ???
  #17 (permalink)  
Antiguo 02/06/2011, 10:49
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

y entonces ???, pq esas imágenes no las controlo yo, son de mi cliente, que hacer entonces ????
  #18 (permalink)  
Antiguo 02/06/2011, 10:53
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: redimensionar imagen externa y guardarla en la BD

Bueno trate esto
Código PHP:
Ver original
  1. <?php
  2. /**
  3.  * File: ResizePicture.php
  4.  * Author: Simon Jarvis
  5.  * Copyright: Simon Jarvis
  6.  * Date: 08/11/06
  7.  * Original link: http://www.white-hat-web-design.co.uk/articles/php-image-resizing.php
  8.  *
  9.  * Modified Date: 05/14/11
  10.  */
  11.  
  12. class ResizePicture {
  13.    
  14.     private $_image;
  15.     private $_imageType;
  16.  
  17.     public function __construct($fileName=null)
  18.     {
  19.         if(!is_null($fileName)){
  20.             $this->load($fileName);
  21.         }
  22.     }
  23.  
  24.     public function load($fileName)
  25.     {
  26.         $imageInfo = getimagesize($fileName);
  27.         $this->_imageType = $imageInfo[2];
  28.  
  29.         if($this->_imageType == IMAGETYPE_JPEG){
  30.             $this->_image = imagecreatefromjpeg($fileName);
  31.         }
  32.         elseif($this->_imageType == IMAGETYPE_GIF){
  33.             $this->_image = imagecreatefromgif($fileName);
  34.         }
  35.         elseif($this->_imageType == IMAGETYPE_PNG){
  36.             $this->_image = imagecreatefrompng($fileName);
  37.         }
  38.     }
  39.  
  40.     public function save($fileName, $compression=75, $permissions=null)
  41.     {
  42.         if($this->_imageType == IMAGETYPE_JPEG){
  43.             imagejpeg($this->_image, $fileName, $compression);
  44.         }
  45.         elseif($this->_imageType == IMAGETYPE_GIF){
  46.             imagegif($this->_image, $fileName);        
  47.         }
  48.         elseif($this->_imageType == IMAGETYPE_PNG){
  49.             imagepng($this->_image, $fileName);
  50.         }
  51.  
  52.         if(!is_null($permissions)) {
  53.             chmod($fileName, $permissions);
  54.         }
  55.     }
  56.  
  57.     public function output()
  58.     {
  59.         if($this->_imageType == IMAGETYPE_JPEG){
  60.             imagejpeg($this->_image);
  61.         }
  62.         elseif($this->_imageType == IMAGETYPE_GIF){
  63.             imagegif($this->_image);        
  64.         }
  65.         elseif($this->_imageType == IMAGETYPE_PNG){
  66.             imagepng($this->_image);
  67.         }  
  68.     }
  69.  
  70.     public function getWidth()
  71.     {
  72.         return imagesx($this->_image);
  73.     }
  74.  
  75.     public function getHeight()
  76.     {
  77.         return imagesy($this->_image);
  78.     }
  79.  
  80.     public function getImageType()
  81.     {
  82.         switch($this->_imageType){
  83.             case IMAGETYPE_JPEG:
  84.                 $imageType = 'image/jpeg';
  85.                 break;
  86.             case IMAGETYPE_GIF:
  87.                 $imageType = 'image/gif';
  88.                 break;
  89.             case IMAGETYPE_PNG:
  90.                 $imageType = 'image/png';
  91.                 break;
  92.             default:
  93.                 $imageType = null;
  94.         }
  95.         return $imageType;
  96.     }
  97.  
  98.     public function resizeToHeight($height)
  99.     {
  100.         $ratio = $height / $this->getHeight();
  101.         $width = $this->getWidth() * $ratio;
  102.         $this->resize($width,$height);
  103.     }
  104.  
  105.     public function resizeToWidth($width)
  106.     {
  107.         $ratio = $width / $this->getWidth();
  108.         $height = $this->getHeight() * $ratio;
  109.         $this->resize($width, $height);
  110.     }
  111.  
  112.     public function scale($scale)
  113.     {
  114.         $width = $this->getWidth() * $scale / 100;
  115.         $height = $this->getHeight() * $scale / 100;
  116.         $this->resize($width, $height);
  117.     }
  118.  
  119.     public function resize($width, $height)
  120.     {
  121.         $newImage = imagecreatetruecolor($width, $height);
  122.         imagecopyresampled($newImage, $this->_image, 0, 0, 0, 0, $width, $height, $this->getWidth(), $this->getHeight());
  123.         $this->_image = $newImage;  
  124.     }      
  125. }
  126.  
  127. $url = 'http://ladyoak.com/images/stories/big/line-art-conversion.gif';
  128.  
  129. $image = new ResizePicture($url);
  130. $basename = basename($url);
  131. $original = $basename;
  132. $image->save($original);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #19 (permalink)  
Antiguo 02/06/2011, 11:02
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

prueba el código que puso abimaelrc, si no te funciona entonces el problema está en tu servidor...

intenta también hacer la redimension con tu código de las 2 imágenes que puse., si te resulta entonces el problema no es el servidor si no esas imágenes en específico.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #20 (permalink)  
Antiguo 02/06/2011, 11:07
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

ahora mismo pruebo, gracias miles a los 2.... que cosa más extraña eso de que hay gifs que no funcionan
  #21 (permalink)  
Antiguo 02/06/2011, 11:18
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

funcionó !!!!, es decir me crea la miniatura, sin darme error, ahora solo debo modificar el metodo save para que me lo guarde en la BD... y pq esa clase si funciona y no así mi función de siempre ???
gracias a los 2
  #22 (permalink)  
Antiguo 02/06/2011, 12:11
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

hola chicos, pero ahora que tengo la img como la guardo en la BD, si la funcion save(nombre) lo que hace es crearme un archivo, y output me hace la salida en pantalla, como puedo tener el binario para poderlo insertar en la bd ??
  #23 (permalink)  
Antiguo 02/06/2011, 12:16
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: redimensionar imagen externa y guardarla en la BD

No es recomendable hacer eso, lo mejor es guardar la imagen en el servidor y luego la ruta en la base de datos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #24 (permalink)  
Antiguo 02/06/2011, 12:27
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

opino lo mismo, las bases de datos son para guardar datos

el sistema de archivos es para guardar archivos
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #25 (permalink)  
Antiguo 02/06/2011, 12:33
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

jaja ok, muchas gracias es como dicen...
asunto cerrado, gracias a los 2.

solo me queda una duda pq es que el método usado por mi siempre no funciona con algunos gif y sin embargo la clase que me dieron ustedes si, y las 2 usan las mismas funciones de GD
  #26 (permalink)  
Antiguo 02/06/2011, 12:54
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: redimensionar imagen externa y guardarla en la BD

la verdad no entiendo por que, según he visto la clase de abimaelrc hace exactamente lo mismo solo que con el aparataje típico de una clase.

is a mistery!
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #27 (permalink)  
Antiguo 02/06/2011, 13:02
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: redimensionar imagen externa y guardarla en la BD

jjaja sad but true !
gracias a los 2

Etiquetas: bd, externa, redimensionar
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 01:41.