Foros del Web » Programando para Internet » PHP »

Combinar imágenes dinámicas (GD)

Estas en el tema de Combinar imágenes dinámicas (GD) en el foro de PHP en Foros del Web. Hola: Tengo un script que genera una foto rotada 90 grados: Código: <?php header("Content-Type: image/jpeg"); if (isset($_GET["rotar"])) $rotar = imagecreatefromjpeg($_GET["rotar"]); else exit(0); $destino = ImageRotate($rotar, ...
  #1 (permalink)  
Antiguo 03/10/2005, 03:29
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Combinar imágenes dinámicas (GD)

Hola:

Tengo un script que genera una foto rotada 90 grados:

Código:
<?php
header("Content-Type: image/jpeg");
if (isset($_GET["rotar"])) $rotar = imagecreatefromjpeg($_GET["rotar"]);
else exit(0);
$destino = ImageRotate($rotar, 90, 0); 
@imagejpeg($destino);
imagedestroy($destino);
?>
Ej:

Y otra script que genera la imagen con otras características (márgenes dimeniones, etc.)

Código:
<?php

header("Content-Type: image/jpeg");

if (isset($_GET["imagen"])) $imagen = imagecreatefromjpeg(urldecode($_GET["imagen"]));
else exit(0);
if (isset($_GET["tam"])) $tam = explode("x", $_GET["tam"]);
else $tam = explode("x", "1x1");
if (isset($_GET["simular"])) $simular = $_GET["simular"];
else $simular = "A6";
if (isset($_GET["margen"])) $margen = $_GET["margen"];
else $margen = "0";

$Ancho =imagesx($imagen); 
$Alto =imagesy($imagen); 

$destino = ImageCreateTrueColor($tam[0],$tam[1]);
//$destino = ImageCreate($tam[0],$tam[1]);

$blanco = ImageColorAllocate( $destino, 255, 255, 255); 
imageFill($destino, 1, 1, $blanco);

switch ($simular)	{
	case "A5":
		if ((int) $tam[0] > (int) $tam[1])	{
			$ancho = ($tam[0] / 2) - ($margen * 2);
			$alto = $tam[1] - ($margen * 2);
			ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		}
		else	{
			$ancho = $tam[0] - ($margen * 2);
			$alto = ($tam[1] / 2) - ($margen * 2);
			ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		}
		break;
	case "A4":
		$ancho = ($tam[0] / 2) - ($margen * 2);
		$alto = $tam[1] / 2 - ($margen * 2);
		ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		ImageCopyResized($destino, $imagen, $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		break;

	case "A3":
		if ((int) $tam[0] > (int) $tam[1])	{

			$ancho = ($tam[0] / 4) - ($margen * 2);
			$alto = $tam[1] / 2 - ($margen * 2);
			ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 4 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 4 + $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto);
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $tam[0] / 4 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $tam[0] / 4 + $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto);
		}
		else	{
			$ancho = ($tam[0] / 2) - ($margen * 2);
			$alto = $tam[1] / 4 - ($margen * 2);
			ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $margen, $tam[1] / 4 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $tam[1] / 4 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $margen, $tam[1] / 4 + $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
			ImageCopyResized($destino, $imagen, $tam[0] / 2 + $margen, $tam[1] / 4 + $tam[1] / 2 + $margen, 0, 0, $ancho, $alto, $Ancho, $Alto); 
		}
		break;
	default:
		$ancho = $tam[0] - ($margen * 2);
		$alto = $tam[1] - ($margen * 2);
		ImageCopyResized($destino, $imagen, $margen, $margen, 0, 0, $ancho, $alto, $Ancho,$Alto);
		break;
}
@imagejpeg($destino);
imagedestroy($destino);
imagedestroy($imagen);
?>
Ej:

(Simula una vista previa de impresión...)

Lo que no he conseguido es que la misma URL contenga los 2 script...
rotar90.php?rotar=miniPostal.php?margen=8&simular= A5&...

Lo que si pude hacer poner los 2 scripts en uno, pero me gustaría saber si de la manera que no pude conseguir es posible...

Ej:

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 03/10/2005, 04:27
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Hola caricatos!

Ojalá y pudiese ayudarte... pero de verdad que no te alcanzo a entender.
Cita:
Iniciado por caricatos
Lo que no he conseguido es que la misma URL contenga los 2 script...
rotar90.php?rotar=miniPostal.php?margen=8&simular= A5&...

Lo que si pude hacer poner los 2 scripts en uno, pero me gustaría saber si de la manera que no pude conseguir es posible...
... , ... ¿cuál es la diferencia??, ¿cuál es la idea??

... puedes pasar "cualquier cosa" vía URL, así que definitivamente puedes hacer lo que quieres:
Código PHP:
// si tu URL es rotar90.php?rotar=miniPostal.php?margen=8&...
// tu puedes hacer: 
echo $_GET['rotar']; // devolverá miniPostal.php?margen=8 .. un explode??

// quizá te intereze hacer rotar90.php?rotar=miniPostal.php?&margen=8&...
echo $_GET['rotar']; // miniPostal.php? .. quizá un include??
echo $_GET['margen']; // 8 
obviamente, ya que se trata de una sola imágen las cabeceras haz de enviarlas solo una vez y debes tener una única variable para identificar el archivo (ni tanto así)... ... ... pero, ahora sí que no entiendo el objetivo... me esforzé en serio , sorry.

Pero bueno, contestando tu pregunta: sí, sí se puede. Un saludo!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 03/10/2005, 11:06
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola jam:

Pues con los 2 scripts que expuse antes no funciona...

Cada fichero devuelve una imagen, retocando otra imagen que recibe por URL...
No sé si se trata de algún coflicto por tener la línea de comando más de un carácter "?"...

Además, podría haber problemas con los parámetros, ya que un script puede intentar usar datos del otro.

si f1.php y f2.php reciben dos parámetros, con el mismo nombre, ¿Cómo se resolvería?

f1.php?dato1=f2.php?dato1=f2&dato2=x1&dato2=x2

Si dices que es posible, ¿conoces algún ejemplo que funcione?

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 03/10/2005, 14:02
 
Fecha de Ingreso: agosto-2004
Mensajes: 258
Antigüedad: 19 años, 8 meses
Puntos: 0
a ver amigo, ordenemonos, mira tu tienes dos codigos, uno te rota una imagen y el otro te crea un aminiatura(digamos), pero los tienes separados.

y quieres unirlos, bueno, si es eso, lo q puedes hacer seria, en la pagina que manda la orden, podrias poner digamos un option que diga rotar imagen y otro que digha redimensionar, y cuando selecciones uno podrias enviar a una segunda pagina en la que estarian las dos funciones y por medio de lo q reciba efectuar la operacion.

ahora si quieres que haga las dos cosas a la vez. bueno pasa los parametros por url como te dices abajo, es decir, mandar una variable que sea para ti como un prendido de q lo rote y otro de q lo redimensione y en la segunda pagina solo lo capturas y efectuas ambas operaciones a la vez, pero sobre la misma imagen, bueno espero haber entendido la idea, y haberte ayudado en algo, suerte
  #5 (permalink)  
Antiguo 04/10/2005, 15:55
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Poner en un script las dos opciones ya lo he hecho, pero mi pregunta es si se puede pasar por URL otra URL con parámetros... (sinceramente no lo necesito ya que yo he hecho ambos scripts y no tengo problemas en combinarlos, pero quisiera saber si se puede... )

En clases de metodología (informática pura y dura) casi todos los profes me soltaron el famoso lema "divide y vencerás", y tan solo pensaba aplicarlo...

Pues eso... (creo que no se puede)

Gracias

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 25/10/2005, 18:40
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 9 meses
Puntos: 102
Y acá ando... ese tope fue bueno para la memoria .

Cita:
mi pregunta es si se puede pasar por URL otra URL con parámetros...
Sí siempre que no contenga carácteres que puedan "revolverse con la URI principal" (ó que no te importe a tí revolverlos). Simplemente ve que hay sitios donde antes de abrir un enlace pasan por un archivo que registra (ó cualquier otra cosa) la acción y redirecciona... abrás visto el archivo o.php de este foro ... bueno, pués comúnmente esos archivos pasan la URI vía URI... valgase la redundancia .

Cita:
No sé si se trata de algún coflicto por tener la línea de comando más de un carácter "?"...
Nop... el carácter en sí no produce conflictos, pasa como un carácter más. Lo que te sí puede causarte un conflicto son los espacios y el carácter "&"... los que se me vienen a la mente ahora. Esos sí hay que codificarlos si se quieren escapar.

La URI con la que querias trabajar:
rotar90.php?rotar=miniPostal.php?margen=8&simular= A5


Descomponiendola:
  • rotar90.php << el archivo que se va a ejecutar
  • rotar << primer parámetro
  • miniPostal?margen=8 <<< valor de "rotar"
  • simular << 2do parámetro
  • A5 << valor de "simular"

Los parámetros de dividen gracias al símbolo "&"... si entre dichos símbolos tienes "?" ó "=" no los reconoce... siguen siendo un solo parámetro.

Cita:
si f1.php y f2.php reciben dos parámetros, con el mismo nombre, ¿Cómo se resolvería?
Honestamente no tengo ni idea (el pasar parámetros con el mismo nombre)... estaria bien probarlo. Apuesto a que recoje el primer valor y no más... ¿quizá crea una matriz??... no lo sé.

Cita:
Cada fichero devuelve una imagen
Es eso en donde puede estar el conflicto... Se ejecuta un solo archivo y debes tener una sola salida al navegador, de lo contrario sería como... si abrieras dos páginas al mismo tiempo; podrías crear un archivo que use marcos y en cada marco mostrar las páginas independientes pero tienes una sola salida y un solo archivo ejecutandose --el que contiene los marcos--.

Seguramente algo similar se puede hacer (disculpa, no me he detenido a ver el código), quizá puedas "convertir" tus scripts a funciones, que en vez de entregar la imágen al navegador la devuelvan y esta pueda ser retomada por tu otra función y al final tener una sola salida al navegador...

Cita:
podría haber problemas con los parámetros, ya que un script puede intentar usar datos del otro
No tiene por qué haberlos... mientras no cambies el valor del parámetro (que puedes) deberías poder tomarlo directamente desde donde sea cuantas veces lo requieras.

... pue eso. Te hablo en teoría, repito que no he visto tu código y no tengo a la mano herramientas como para poder hacer pruebas... pero en una de esas, solo tenme pasciencia (verás que soy lento pero seguro ).

... y tu número de seguro??.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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 19:48.