Foros del Web » Programando para Internet » PHP »

cambiar formato de imagen imagejpeg GD

Estas en el tema de cambiar formato de imagen imagejpeg GD en el foro de PHP en Foros del Web. Hola a tod@s Estoy peleandome con las gd y van ganando mi intencion es coger un gif o png y pasarlo a jpg. lo he ...
  #1 (permalink)  
Antiguo 14/03/2009, 13:02
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 5 meses
Puntos: 16
cambiar formato de imagen imagejpeg GD

Hola a tod@s
Estoy peleandome con las gd y van ganando
mi intencion es coger un gif o png y pasarlo a jpg.

lo he hecho de mil maneras y es que no entiendo cual es la función que me convierte a jpg, por que yo suponía que era imagejpeg, pero es que no me lo hace.

el código que tengo ahora mismo es este.

Código:
$ancho = 200;
						$alto = 200;
						$prefijo="color_";
						$img_orig=$dir . "/" . $id . "_" . $logo;
						$nombre=basename($id . "_" . $logo);
						$dir=$dir . '/';
						list($width, $height) = getimagesize($img_orig);
						$img = imagecreatefromgif($dir.$nombre);
						$datos = getimagesize($dir.$nombre);
						
						$thumb = imagecreatetruecolor($ancho,$alto);
						imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $ancho, $alto, $datos[0], $datos[1]);
						$thumb = imagecreatetruecolor($ancho,$alto);
						imagejpeg($thumb,$camino.$dir.$prefijo.$nombre);
						
						
						 return"color_" . $id . "_" . $logo;
Lo estaba probando con gif y ya despues de leer en algunos sitios que gif puede dar problemas he probado con png y tampoco
la imagen se me guarda y se me redimensiona, pero la extension me trae ya de los pelos.

Me podeis echar un cable por favor ?

Gracias.
Un saludo.
  #2 (permalink)  
Antiguo 14/03/2009, 13:48
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: cambiar formato de imagen imagejpeg GD

Código php:
Ver original
  1. // Si el original es .gif habra que cambiarlo a  .jpg
  2. $jpgnombre = str_replace('.gif', '.jpg', $nombre);
  3. imagejpeg($thumb,$camino.$dir.$prefijo.$jpgnombre);
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/03/2009, 03:14
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 5 meses
Puntos: 16
Respuesta: cambiar formato de imagen imagejpeg GD

ahora me sale la imagen en negro.
  #4 (permalink)  
Antiguo 15/03/2009, 04:04
 
Fecha de Ingreso: noviembre-2007
Mensajes: 382
Antigüedad: 16 años, 5 meses
Puntos: 16
Respuesta: cambiar formato de imagen imagejpeg GD

he encontrado una funcion, la pasa lo que decías de cambiar la extension de nombre de destino, pero si que lo crea y sale. solo la falta un detalle
el fondo me sale negro y lo quiero blanco pero aun que en los colores le indico 255, 255, 255 sigue saliendo en negro.
si le pongo cualquier otro color tambien en negro.
te pongo el código a ver, si me puedes decir. Muchas gracias. Estaba que me tiraba de los pelos

Código:
function gif2jpeg($p_fl, $p_new_fl='', $bgcolor=false){
	  list($wd, $ht, $tp, $at)=getimagesize($p_fl);
	  $img_src=imagecreatefromgif($p_fl);
	  $img_dst=imagecreatetruecolor($wd,$ht);
	  $clr['red']=242;
	  $clr['green']=42;
	  $clr['blue']=42;
	  if(is_array($bgcolor)) $clr=$bgcolor;
	  $kek=imagecolorallocate($img_dst,
					  $clr['red'],$clr['green'],$clr['blue']);
	  imagefill($img_dst,0,0,$kek);
	  imagecopyresampled($img_dst, $img_src, 0, 0,
					  0, 0, $wd, $ht, $wd, $ht);
	  $draw=true;
	  if(strlen($p_new_fl)>0){
		if($hnd=fopen($p_new_fl,'w')){
		  $draw=false;
		  fclose($hnd);
		}
	  }
	  if(true==$draw){
		header("Content-type: image/jpeg");
		imagejpeg($img_dst);
	  }else imagejpeg($img_dst, $p_new_fl);
	  imagedestroy($img_dst);
	  imagedestroy($img_src);
	}
  #5 (permalink)  
Antiguo 15/03/2009, 05:48
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: cambiar formato de imagen imagejpeg GD

Buenas, la libreria GD posee grandes carencias a la hora de tratar las cabeceras de las imagenes y con ello devuelve fallos, lo mejor para el tratamiento de imagenes despues de muchas pruebas e intentos es la libreria Imagemagick, tiene una extension para php, pero lo mejor es instalarla en el servidor como binario, es muchisimo mas facil y practica ademas como binario tira menos recursos, si tu hosting te la instala es la mejor ocion que puedes tomar, porque GD se queda corta me parece, GD es bastante buena para crear imagenes dinamicas pero desde 0, para producir agun tipo de grafica de estadistica o algo asi, asi por encima se pueden enumerar algunos fallos de esta libreria:
- Yo tengo un sitio donde por parte del cliente se pueden subir imagenes y bien solo con esto viene el primer fallo: hay dispositivos (moviles y algunas camaras) que realizan las fotos pero insertan unos bytes en las cabeceras de las fotos, que al tratar de realizar algun tratamiento con esta imagen a traves de la libreria GD devuelve un fallo y produce una imagen totalmente en negro, estas imagenes se pueden examinar antes de su tratamiento y en los detalles pone que la imangen tiene de resolucion 1x1 ( tambien ay algunas con 2x2) pixeles/pulgada y en realidad la imagen puede medir 1024x900 o lo que quiera medir, en cambio Imagemagic ignora esos bytes.
- Otro existe con las imagenes en bmp, que es pareceido al anterior.
- Otro consiste en los gifs animados, GD solo copia la paleta de de el primer fotograma y normalmente el resultado al tratar la imagen es el ultimo fotograma, asi trata de insertar la paleta del primer fotograma en el ultimo y ese es el resultado, con lo que no se produce ningun error pero la imagen queda desfigurada, eso sin mentar que deja de ser un gif animado.
-Yo utilizaba GD para realizar thumbnails de imagenes(bueno en realidad producia varias redimensiones) hasta que empezaron a venir estos errores, y opté por imagemagick, es lo mejor para tratamientoo de imagenes
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 10:32.