Foros del Web » Programando para Internet » PHP »

GD: Editar imágenes de base de datos

Estas en el tema de GD: Editar imágenes de base de datos en el foro de PHP en Foros del Web. Hola: El caso es que puedo editar imágenes creadas de la nada o en base a otras imágenes (imagecreate/imagecreatefromXXX) pero las que he subido a ...
  #1 (permalink)  
Antiguo 28/12/2005, 04:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.547
Antigüedad: 15 años, 8 meses
Puntos: 1262
GD: Editar imágenes de base de datos

Hola:

El caso es que puedo editar imágenes creadas de la nada o en base a otras imágenes (imagecreate/imagecreatefromXXX) pero las que he subido a la base de datos las puedo mostrar por el identificador (imagen.php?id=NN) pero no puedo asignarlo a una variable ($imagen = imagecreateXXX("imagen.php?id=NN");

He visto la existencia de imageGD y de imagecreatefromgd pero no están documentadas (y haciendo pruebas se me bloqueó la máquina)...

La verdad es que prefería no usar imagenes físicas (subirlas a carpetas), pero es la única forma en donde conseguí algo...

Si alguien ha hecho algo al respecto y me puede orientar...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 28/12/2005, 04:55
Avatar de Panino5001
Moderatroll
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.062
Antigüedad: 13 años, 6 meses
Puntos: 775
No sé si es la mejor manera, es sólo una idea:
yo tomaría el contenido de la imagen, lo guardaría en un archivo temporal, realizaría la edición y luego borraría la imagen:
Código PHP:
$stringimage=file_get_contents("laimagen.php?elparametroquesenecesite");
$fp=fopen("temp.txt","w");
fwrite($fp,$stringimage);
fclose($fp);
copy("temp.txt","imagenaprocesar.jpg");
//aquí el proceso que quiera con gd
unlink("imagenaprocesar.jpg"); 
  #3 (permalink)  
Antiguo 28/12/2005, 05:48
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.547
Antigüedad: 15 años, 8 meses
Puntos: 1262
Gracias Panino5001:

Creo que haré algo como lo que propones, ya que creo que es difícil conseguir mi objetivo de otra manera.

Lo que tengo por ahora es:

Código:
<?php 
function extension($cadena)	{
	if ($cadena == "image/png") return "png";
	if ($cadena == "image/gif") return "gif";
	if ($cadena == "image/jpg") return "jpg";
	return "php";
}
function crearImagen($f, $e)	{
	if ($e == "png") return imagecreatefrompng($f);
	if ($e == "gif") return imagecreatefromgif($f);
	if ($e == "jpg") return imagecreatefromjpg($f);
	return imagecreatefromgd($f);
}
function mostrarImagen($imagen, $e)	{
	switch ($e)	{
	case "png":
		imagepng($imagen);
		break;
	case "gif":
		imagegif($imagen);
		break;
	case "jpg":
		imagejpg($imagen);
		break;
	}
}
if(isset($_GET['id'])) { 
$elId = $_GET['id'];

$servidor = $_SERVER["SERVER_NAME"];
if ($servidor == "localhost")	{
	include("variables-localhost.php");
}
else	{
	include("variables-remotas.php");
}

$conexion=mysql_connect($host,$usuario,$clave) or die ("no se ha podido conectar a la BD"); 
mysql_select_db($basedatos) or die ("no se ha podido seleccionar la BD"); 
$sql = "SELECT archivo_binario,archivo_tipo, activo FROM $tabla WHERE id='".$_GET['id']."'"; 
$consulta = mysql_query($sql,$conexion);
//$vale = mysql_result($consulta,0,"activo");
$vale = mysql_num_rows($consulta);
if ($vale == 0)	{
	$sql = "SELECT archivo_binario, archivo_tipo FROM $tabla WHERE id=97";
	$consulta = mysql_query($sql,$conexion);
}
$datos = mysql_result($consulta,0,"archivo_binario"); 
$tipo = mysql_result($consulta,0,"archivo_tipo"); 
$fichero = "temporal/id$elId.".extension($tipo);
$f = fopen($fichero, "w");
if (fwrite($f, $datos) === FALSE) {
       echo "Cannot write to file ($f)";
       exit;
}
fclose($f);
$imagen = crearImagen($fichero, extension($tipo));
mostrarImagen($imagen, extension($tipo));
} 
?>
Sé que se puede mejorar, pero en localhos me funciona... ahora probaré lo de borrar el archivo temporal.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 28/12/2005, 07:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si tus imagenees las tienes como "binario" en tu BD .. lo que debes usar es la función:

imagecreatefromstring()
http://www.php.net/manual/en/functio...fromstring.php

para generar tu "resource" de imagen que necesitas para seguir usando el resto de funciones de GD y trabajar así tu imagen.

Esta función "imagecreatefromstring()" no significa cuado emplea el termino "string" que sea de una "frase" (como Texto) sino que se refiere a que el "strign" es el archivo que tienes intrepretado como "ascii" en tu campo de tu BBDD.

De hecho hace un tiempo hice un tutorial al respecto (parece que en algo te basastes por el uso de variables que haces para tu versión?) .. fijate en los ejemplos de:

http://www.forosdelweb.com/f18/tutorial-ejemplo-subir-archivos-bd-guardando-bd-binario-127775/
Concretamente: "ver_thumbnail.php" y el uso de imagecreatefromstring() que se hace.


Un saludo,
  #5 (permalink)  
Antiguo 28/12/2005, 14:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.547
Antigüedad: 15 años, 8 meses
Puntos: 1262
Gracias Cluster, no conocía esa función (la verdad es que miré la librería y pensaba que se trataba de texto normal, y la descarté sin mirarla...)

Bueno, me va bien, aunque la pena es que mi servidor no crea en formato gif y tendré que restringir a png y jpg.

Nuevamente gracias, y muchas felicidades

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 28/12/2005, 14:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por caricatos
Gracias Cluster, no conocía esa función (la verdad es que miré la librería y pensaba que se trataba de texto normal, y la descarté sin mirarla...)

Bueno, me va bien, aunque la pena es que mi servidor no crea en formato gif y tendré que restringir a png y jpg.

Nuevamente gracias, y muchas felicidades

Saludos
jejeje .. eso mismo me pasó a mi en su época .. por eso te hice el comentario:

Cita:
Esta función "imagecreatefromstring()" no significa cuado emplea el termino "string" que sea de una "frase" (como Texto) sino que se refiere a que el "strign" es el archivo que tienes intrepretado como "ascii" en tu campo de tu BBDD.
Ahí es cuando comprendí que es un "string" ..

Por cierto esto es aplicable a otras cosas como por ejemplo cuando tienes que generar un PDF (con alguna classe tipo R&OS o FPDF) y quieres incrustrar tu imagen generada o trabajada con GD en el documento PDF que estás generando .. ahí también interviene el terminio "string" .. por qué hay métodos para llamar a ese contenido como "archivo físico" en el disco y otros para llamarlo como un "string".

También se aplica si envias un e-mail con un archivo adjunto (usando PHP Mailer por ejemplo ..)

En fin .. esto es mas bien un "concepto" más que el tema de la función en sí particular de GD.

Un saludo,
  #7 (permalink)  
Antiguo 28/12/2005, 17:19
Avatar de Panino5001
Moderatroll
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.062
Antigüedad: 13 años, 6 meses
Puntos: 775
Yo tampoco conocía esa función (el trabajo que me hubiese ahorrado con ella!!).
Gracias, Cluster, por esto y por todo lo que aprendo de ti cada día.
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:33.